diff --git a/.github/workflows/acceptance.yml b/.github/workflows/acceptance.yml
index 82480849c7..f4637cded8 100644
--- a/.github/workflows/acceptance.yml
+++ b/.github/workflows/acceptance.yml
@@ -691,3 +691,51 @@ jobs:
with:
name: cypress-videos
path: packages/volto/cypress/videos
+
+ seven:
+ if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
+ runs-on: ubuntu-latest
+ name: Seven
+ timeout-minutes: 45
+ strategy:
+ fail-fast: false
+ matrix:
+ node-version: [22.x]
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Set up Node.js environment
+ uses: ./.github/actions/node_env_setup
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Cypress acceptance tests
+ uses: cypress-io/github-action@v6
+ env:
+ BABEL_ENV: production
+ CYPRESS_RETRIES: 2
+ # Recommended: pass the GitHub token lets this action correctly
+ # determine the unique run id necessary to re-run the checks
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ install: false
+ working-directory: packages/seven
+ browser: chrome
+ spec: cypress/tests/core/basic/**/*.cy.ts
+ start: |
+ make ci-acceptance-backend-start
+ make acceptance-frontend-prod-start
+ wait-on: 'npx wait-on --httpTimeout 20000 http-get://127.0.0.1:55001/plone http://127.0.0.1:3000'
+
+ # Upload Cypress screenshots
+ - uses: actions/upload-artifact@v4
+ if: failure()
+ with:
+ name: cypress-screenshots
+ path: packages/seven/cypress/screenshots
+ # Upload Cypress videos
+ - uses: actions/upload-artifact@v4
+ if: failure()
+ with:
+ name: cypress-videos
+ path: packages/seven/cypress/videos
diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml
index b9616ac57d..db5a5e8d93 100644
--- a/.github/workflows/changelog.yml
+++ b/.github/workflows/changelog.yml
@@ -48,6 +48,8 @@ jobs:
- 'packages/slots/**'
theming:
- 'packages/theming/**'
+ seven:
+ - 'packages/seven/**'
wrongNews:
- added|modified: 'news/**'
@@ -150,6 +152,14 @@ jobs:
env:
BASE_BRANCH: ${{ github.base_ref }}
+ - name: seven changelog check
+ if: steps.filter.outputs.seven == 'true'
+ run: |
+ git fetch --no-tags origin main
+ towncrier check --compare-with origin/main --dir packages/seven
+ env:
+ BASE_BRANCH: ${{ github.base_ref }}
+
- name: Wrong location of news changelog check
if: steps.filter.outputs.wrongNews == 'true'
run: echo "News items should be moved from the repository root to the appropriate package root in `packages/package-name`." && exit 1
diff --git a/.github/workflows/cookieplone.yml b/.github/workflows/cookieplone.yml
new file mode 100644
index 0000000000..a9d52a957c
--- /dev/null
+++ b/.github/workflows/cookieplone.yml
@@ -0,0 +1,66 @@
+name: Cookieplone
+on: [push, pull_request]
+
+env:
+ PYTHON_VERSION: "3.13"
+
+jobs:
+ seven:
+ if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
+ runs-on: ubuntu-latest
+ name: Seven Cookieplone
+ timeout-minutes: 45
+ strategy:
+ fail-fast: false
+ matrix:
+ node-version: [22.x]
+ steps:
+ - uses: actions/checkout@v4
+ - run: echo "Current branch is ${GITHUB_REF#refs/heads/}"
+ - name: Set up Node.js environment
+ uses: ./.github/actions/node_env_setup
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Generate Cookieplone-based frontend addon
+ run: |
+ pipx install cookieplone
+ COOKIEPLONE_REPOSITORY_TAG=seventemplate pipx run --no-cache cookieplone seven_addon --no-input
+
+ - name: Install generated package
+ working-directory: seven-add-on
+ run: |
+ pnpm dlx mrs-developer missdev --no-config --fetch-https
+ (cd core && git fetch --depth 1 origin ${GITHUB_REF#refs/heads/}:${GITHUB_REF#refs/heads/} && git checkout ${GITHUB_REF#refs/heads/})
+ pnpm i
+
+ - name: Cypress acceptance tests
+ uses: cypress-io/github-action@v6
+ env:
+ BABEL_ENV: production
+ CYPRESS_RETRIES: 2
+ # Recommended: pass the GitHub token lets this action correctly
+ # determine the unique run id necessary to re-run the checks
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ install: false
+ working-directory: seven-add-on/core/packages/seven
+ browser: chrome
+ spec: cypress/tests/core/basic/**/*.cy.ts
+ start: |
+ make ci-acceptance-backend-start
+ make project-acceptance-frontend-prod-start
+ wait-on: 'npx wait-on --httpTimeout 20000 http-get://127.0.0.1:55001/plone http://127.0.0.1:3000'
+
+ # Upload Cypress screenshots
+ - uses: actions/upload-artifact@v4
+ if: failure()
+ with:
+ name: cypress-screenshots
+ path: packages/seven/cypress/screenshots
+ # Upload Cypress videos
+ - uses: actions/upload-artifact@v4
+ if: failure()
+ with:
+ name: cypress-videos
+ path: packages/seven/cypress/videos
diff --git a/.lintstagedrc b/.lintstagedrc
deleted file mode 100644
index e2d1cf3190..0000000000
--- a/.lintstagedrc
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "packages/!(volto)/**/*.{js,jsx,ts,tsx}": [
- "pnpm eslint --max-warnings=0 --fix",
- "pnpm prettier --single-quote --write"
- ],
- "packages/volto/**/*.{js,jsx,ts,tsx}": [
- "pnpm --filter @plone/volto lint:husky",
- "pnpm --filter @plone/volto prettier:husky"
- ],
- "packages/volto/src/**/*.{jsx, tsx}": ["pnpm --filter @plone/volto i18n"],
- "packages/!(volto)/**/*.{css,less,scss}": ["pnpm stylelint --fix"],
- "packages/volto/**/*.{css,less,scss}": [
- "pnpm --filter @plone/volto stylelint --fix"
- ],
- "packages/volto/**/*.overrides": [
- "pnpm --filter @plone/volto stylelint --fix"
- ]
-}
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
index e2295290f3..2f8365e7cf 100644
--- a/.readthedocs.yaml
+++ b/.readthedocs.yaml
@@ -11,27 +11,25 @@ build:
tools:
python: "3.12"
nodejs: "20"
- jobs:
- post_checkout:
- # Cancel building pull requests when there aren't changes in the docs directory or YAML file.
- # You can add any other files or directories that you'd like here as well,
- # like your docs requirements file, or other files that will change your docs build.
- #
- # If there are no changes (git diff exits with 0) we force the command to return with 183.
- # This is a special exit code on Read the Docs that will cancel the build immediately.
- - |
- if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && git diff --quiet origin/main -- docs/ .readthedocs.yaml requirements-docs.txt packages/volto/.storybook;
- then
- exit 183;
- fi
- post_install:
- # Install dependencies defined in your ``package.json``
- # - npm ci
- # Install any other extra dependencies to build the docs
- - corepack enable
- - corepack prepare pnpm@* --activate
- - asdf reshim nodejs
- - pnpm install
- - pnpm build:registry
- - (cd packages/volto && pnpm build-storybook -o ${READTHEDOCS_OUTPUT}/html/storybook)
- - make docs-rtd-pr-preview
+ commands:
+ # Cancel building pull requests when there aren't changes in the docs directory or YAML file.
+ # You can add any other files or directories that you'd like here as well,
+ # like your docs requirements file, or other files that will change your docs build.
+ #
+ # If there are no changes (git diff exits with 0) we force the command to return with 183.
+ # This is a special exit code on Read the Docs that will cancel the build immediately.
+ - |
+ if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && git diff --quiet origin/main -- docs/ .readthedocs.yaml requirements-docs.txt packages/volto/.storybook;
+ then
+ exit 183;
+ fi
+ # Install dependencies defined in your ``package.json``
+ # - npm ci
+ # Install any other extra dependencies to build the docs
+ - corepack enable
+ - corepack prepare pnpm@* --activate
+ - asdf reshim nodejs
+ - pnpm install
+ - pnpm build:registry
+ - (cd packages/volto && pnpm build-storybook -o ${READTHEDOCS_OUTPUT}/html/storybook)
+ - make docs-rtd-pr-preview
diff --git a/Makefile b/Makefile
index 72656906b6..b689fac12c 100644
--- a/Makefile
+++ b/Makefile
@@ -145,9 +145,24 @@ packages/registry/dist: $(shell find packages/registry/src -type f)
packages/components/dist: $(shell find packages/components/src -type f)
pnpm build:components
+packages/client/dist: $(shell find packages/client/src -type f)
+ pnpm build:client
+
+packages/providers/dist: $(shell find packages/providers/src -type f)
+ pnpm build:providers
+
+packages/helpers/dist: $(shell find packages/helpers/src -type f)
+ pnpm build:helpers
+
+packages/react-router/dist: $(shell find packages/react-router/src -type f)
+ pnpm build:react-router
+
.PHONY: build-deps
build-deps: packages/registry/dist ## Build dependencies
+.PHONY: build-all-deps
+build-all-deps: packages/registry/dist packages/components/dist packages/client/dist packages/providers/dist packages/react-router/dist packages/helpers/dist ## Build all dependencies
+
.PHONY: i18n
i18n: ## Converts your po files into json to translate volto frontend
$(MAKE) -C "./packages/volto/" i18n
@@ -378,6 +393,28 @@ acceptance-server-detached-start: ## Starts test acceptance server main fixture
acceptance-server-detached-stop: ## Stop test acceptance server main fixture in detached mode (daemon)
docker kill plone-client-acceptance-server
+######### Seven acceptance tests
+
+.PHONY: seven-acceptance-frontend-dev-start
+seven-acceptance-frontend-dev-start: ## Start acceptance frontend in development mode for Seven
+ $(MAKE) -C "./packages/seven/" acceptance-frontend-dev-start
+
+.PHONY: seven-acceptance-frontend-prod-start
+seven-acceptance-frontend-prod-start:: ## Start acceptance frontend in production mode for Seven
+ $(MAKE) -C "./packages/seven/" acceptance-frontend-prod-start
+
+.PHONY: seven-acceptance-test
+seven-acceptance-test: ## Start Cypress in interactive mode for Seven
+ $(MAKE) -C "./packages/seven/" acceptance-test
+
+.PHONY: seven-ci-acceptance-test
+seven-ci-acceptance-test: ## Run cypress tests in headless mode for CI for Seven
+ $(MAKE) -C "./packages/seven/" ci-acceptance-test
+
+.PHONY: seven-ci-acceptance-test-run-all
+seven-ci-acceptance-test-run-all: ## With a single command, start both the acceptance frontend and backend acceptance server, and run Cypress tests in headless mode for Seven
+ $(MAKE) -C "./packages/seven/" ci-acceptance-test-run-all
+
# include local overrides if present
-include Makefile.local
-include ../../../Makefile.local
diff --git a/PACKAGES.md b/PACKAGES.md
index 5f72ef477c..51de2c3eac 100644
--- a/PACKAGES.md
+++ b/PACKAGES.md
@@ -15,9 +15,8 @@ and as a development dependency:
Plone 6.0.x (Volto 17 and below) does not use any of them.
These packages are expected to be used and become part of Plone 7.
-Some of them might become part of Plone 6.1.x minor versions.
-The packages are divided into three categories or types:
+These packages are divided into three categories or types:
- core
- utilities
@@ -53,6 +52,7 @@ The bundle of these packages must work on both CommonJS and ECMAScript Module (E
- `@plone/providers`
- `@plone/helpers`
+- `@plone/react-router`
### Rules
@@ -67,6 +67,7 @@ This bundle must work on both CommonJS and ESM environments.
- `@plone/blocks`
- `@plone/slots`
- `@plone/theming`
+- `@plone/cmsui`
- `@plone/contents`
@@ -94,7 +95,7 @@ Some of them are used by the build, and separated in packages for convenience.
- `tsconfig`
-## Volto add-ons packages
+## Volto add-on packages
These Volto add-ons are packages used by Volto core.
They are always loaded, so they are also called "core packages".
diff --git a/docs/source/release-notes/index.md b/docs/source/release-notes/index.md
index 3eab10e849..5b1b29e49e 100644
--- a/docs/source/release-notes/index.md
+++ b/docs/source/release-notes/index.md
@@ -17,6 +17,29 @@ myst:
+## 18.7.0 (2025-01-24)
+
+### Feature
+
+- - Fixed handling of the site logo preview to appear after upload. @Shyam-Raghuwanshi [#6591](https://github.com/plone/volto/issues/6591)
+- Provide language alternate links @erral [#6602](https://github.com/plone/volto/issues/6602)
+- feat(cypress):Add custom check Accessibility command @Tishasoumya-02 [#6606](https://github.com/plone/volto/issues/6606)
+
+### Bugfix
+
+- Improve the usability of the `ObjectBrowser` when inputting a manual value, checking it on blur, and adding a local validator. @sneridagh [#6576](https://github.com/plone/volto/issues/6576)
+- fix(useClipboard): Do not have a pending promise in a boolean state @nileshgulia1 [#6585](https://github.com/plone/volto/issues/6585)
+
+### Internal
+
+- Add Seven convenience Makefile commands. @sneridagh [#6599](https://github.com/plone/volto/issues/6599)
+- Restore pull request previews on Read the Docs. @stevepiercy [#6612](https://github.com/plone/volto/issues/6612)
+- Fix lint-staged throwing warnings when a file is checked-in and ignored. @sneridagh [#6614](https://github.com/plone/volto/issues/6614)
+
+### Documentation
+
+- Enhancements of the upgrade guide for Volto 18, since we detected some inconsistencies. @sneridagh [#6609](https://github.com/plone/volto/issues/6609)
+
## 18.6.0 (2025-01-11)
### Feature
diff --git a/lint-staged.config.js b/lint-staged.config.js
new file mode 100644
index 0000000000..1b1d2ec7ae
--- /dev/null
+++ b/lint-staged.config.js
@@ -0,0 +1,31 @@
+const { ESLint } = require('eslint');
+
+const removeIgnoredFiles = async (files) => {
+ const eslint = new ESLint();
+ const ignoredFiles = await Promise.all(
+ files.map((file) => eslint.isPathIgnored(file)),
+ );
+ const filteredFiles = files.filter((_, i) => !ignoredFiles[i]);
+ return filteredFiles.join(' ');
+};
+module.exports = {
+ 'packages/!(volto)/**/*.{js,jsx,ts,tsx}': async (files) => {
+ const filesToLint = await removeIgnoredFiles(files);
+ return [
+ `eslint --max-warnings=0 ${filesToLint}`,
+ 'pnpm prettier --single-quote --write',
+ ];
+ },
+ 'packages/volto/**/*.{js,jsx,ts,tsx}': [
+ 'pnpm --filter @plone/volto lint:husky',
+ 'pnpm --filter @plone/volto prettier:husky',
+ ],
+ 'packages/volto/src/**/*.{jsx, tsx}': ['pnpm --filter @plone/volto i18n'],
+ 'packages/!(volto)/**/*.{css,less,scss}': ['pnpm stylelint --fix'],
+ 'packages/volto/**/*.{css,less,scss}': [
+ 'pnpm --filter @plone/volto stylelint --fix',
+ ],
+ 'packages/volto/**/*.overrides': [
+ 'pnpm --filter @plone/volto stylelint --fix',
+ ],
+};
diff --git a/package.json b/package.json
index 1cf8ebd0e3..756e6d20a0 100644
--- a/package.json
+++ b/package.json
@@ -5,14 +5,18 @@
"preinstall": "npx only-allow pnpm",
"watch": "pnpm --filter @plone/registry --filter @plone/client --filter @plone/components --filter @plone/providers watch",
"build:deps": "pnpm --filter @plone/registry build",
- "build:all": "pnpm --filter @plone/registry --filter @plone/client --filter @plone/components --filter @plone/providers build",
- "build:all:force": "pnpm --filter @plone/registry --filter @plone/client --filter @plone/components --filter @plone/providers build:force",
+ "build:all": "pnpm --filter @plone/registry --filter @plone/client --filter @plone/components --filter @plone/providers --filter @plone/react-router build",
+ "build:all:force": "pnpm --filter @plone/registry --filter @plone/client --filter @plone/components --filter @plone/providers --filter @plone/react-router build:force",
"build:registry": "pnpm --filter @plone/registry run build",
"build:components": "pnpm --filter @plone/components run build",
+ "build:client": "pnpm --filter @plone/client run build",
+ "build:providers": "pnpm --filter @plone/providers run build",
+ "build:helpers": "pnpm --filter @plone/helpers run build",
+ "build:react-router": "pnpm --filter @plone/react-router run build",
"build": "pnpm --filter @plone/volto build",
"start": "pnpm --filter @plone/volto start",
"start:project": "pnpm --filter plone run start",
- "lint": "pnpm build:all && eslint --max-warnings=0 '{apps,packages}/**/*.{js,jsx,ts,tsx}'",
+ "lint": "make build-all-deps && eslint --max-warnings=0 '{apps,packages}/**/*.{js,jsx,ts,tsx}'",
"lint:volto": "pnpm --filter @plone/volto run lint",
"test": "pnpm --filter @plone/volto run test",
"test:ci": "pnpm --filter @plone/volto run test:ci",
diff --git a/packages/blocks/.eslintrc.cjs b/packages/blocks/.eslintrc.cjs
index 42cb63d1af..18bae08069 100644
--- a/packages/blocks/.eslintrc.cjs
+++ b/packages/blocks/.eslintrc.cjs
@@ -1,5 +1,5 @@
/** @type {import('eslint').Linter.Config} */
module.exports = {
- extends: ['../../.eslintrc.cjs', 'plugin:react/jsx-runtime'],
- ignorePatterns: ['storybook-static', 'dist'],
+ extends: ['../../.eslintrc.cjs', '../eslintconfig/addons.js'],
+ ignorePatterns: ['vitest.config.ts'],
};
diff --git a/packages/blocks/CHANGELOG.md b/packages/blocks/CHANGELOG.md
index 89cd5d8368..190740f454 100644
--- a/packages/blocks/CHANGELOG.md
+++ b/packages/blocks/CHANGELOG.md
@@ -8,6 +8,20 @@
+## 1.0.0-alpha.2 (2025-01-24)
+
+### Feature
+
+- Added more blocks. @sneridagh [#6409](https://github.com/plone/volto/pull/6409)
+
+### Bugfix
+
+- Fixed several typing errors and a map without key. @sneridagh [#6599](https://github.com/plone/volto/pull/6599)
+
+### Internal
+
+- Centralize `tsconfig`. @sneridagh [#6536](https://github.com/plone/volto/pull/6536)
+
## 1.0.0-alpha.1 (2024-07-26)
### Internal
diff --git a/packages/blocks/RenderBlocks/BlockWrapper.tsx b/packages/blocks/RenderBlocks/BlockWrapper.tsx
index e94b555d47..d55f8ec8d5 100644
--- a/packages/blocks/RenderBlocks/BlockWrapper.tsx
+++ b/packages/blocks/RenderBlocks/BlockWrapper.tsx
@@ -11,8 +11,8 @@ const BlockWrapper = (props: BlockWrapperProps) => {
const data = content.blocks?.[block];
const category = blocksConfig?.[data['@type']]?.category;
// TODO: Bring in the StyleWrapper helpers for calculating styles and classes
- const classNames = null;
- const style = null;
+ const classNames = undefined;
+ const style = undefined;
return (
{
const Block = blocksConfig[blockType]?.view || DefaultBlockView;
return Block ? (
-
+
{/* @ts-ignore It's ok to pass the blockData as is */}
+## 1.0.0-alpha.22 (2025-01-24)
+
+### Documentation
+
+- Fix typo in README. @sneridagh [#6599](https://github.com/plone/volto/pull/6599)
+
## 1.0.0-alpha.21 (2025-01-15)
### Feature
diff --git a/packages/client/README.md b/packages/client/README.md
index 139648e30e..3e36a69cfb 100644
--- a/packages/client/README.md
+++ b/packages/client/README.md
@@ -37,7 +37,7 @@ The main artifact that the client provides is the `ploneClient` entry point.
Once imported, you should call `initialize` to setup its basic parameters, like `apiPath`, headers or authentication options.
-After initialization, you can import all the prorvided query options factories.
+After initialization, you can import all the provided query options factories.
```ts
import ploneClient from '@plone/client';
diff --git a/packages/client/package.json b/packages/client/package.json
index e4bce7a30d..c87e16e7ab 100644
--- a/packages/client/package.json
+++ b/packages/client/package.json
@@ -8,7 +8,7 @@
}
],
"license": "MIT",
- "version": "1.0.0-alpha.21",
+ "version": "1.0.0-alpha.22",
"repository": {
"type": "git",
"url": "git@github.com:plone/volto.git"
diff --git a/packages/eslintconfig/README.md b/packages/eslintconfig/README.md
new file mode 100644
index 0000000000..551281bc53
--- /dev/null
+++ b/packages/eslintconfig/README.md
@@ -0,0 +1,34 @@
+# `eslintconfig`
+
+Base configurations for projects.
+
+## Usage
+
+In `package.json`:
+
+```json
+ "devDependencies": {
+ "eslintconfig": "workspace:*",
+ }
+```
+
+```js
+{
+ "extends": "tsconfig/react-library.json",
+ "include": ["src", "src/**/*.js"],
+ "exclude": [
+ "node_modules",
+ "build",
+ "public",
+ "coverage",
+ "src/**/*.test.{js,jsx,ts,tsx}",
+ "src/**/*.spec.{js,jsx,ts,tsx}",
+ "src/**/*.stories.{js,jsx,ts,tsx}"
+ ]
+}
+```
+
+> [!WARNING]
+> This package or app is experimental.
+> The community offers no support whatsoever for it.
+> Breaking changes may occur without notice.
diff --git a/packages/eslintconfig/addons.js b/packages/eslintconfig/addons.js
new file mode 100644
index 0000000000..cf72e9fa30
--- /dev/null
+++ b/packages/eslintconfig/addons.js
@@ -0,0 +1,17 @@
+/** @type {import('eslint').Linter.Config} */
+module.exports = {
+ ignorePatterns: ['storybook-static', 'dist'],
+ overrides: [
+ {
+ files: ['**/*.{ts,tsx, js, jsx}'],
+ extends: [
+ 'plugin:react/jsx-runtime', // We only want this for non-library code (eg. volto add-ons)
+ ],
+ rules: {
+ 'import/no-unresolved': 1,
+ 'import/named': 'error',
+ 'react/jsx-key': [2, { checkFragmentShorthand: true }],
+ },
+ },
+ ],
+};
diff --git a/packages/eslintconfig/package.json b/packages/eslintconfig/package.json
new file mode 100644
index 0000000000..5abc62b4fb
--- /dev/null
+++ b/packages/eslintconfig/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "eslintconfig",
+ "version": "0.0.0",
+ "private": true,
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/helpers/CHANGELOG.md b/packages/helpers/CHANGELOG.md
index bd9e85c701..9f6747d5ff 100644
--- a/packages/helpers/CHANGELOG.md
+++ b/packages/helpers/CHANGELOG.md
@@ -8,6 +8,12 @@
+## 1.0.1 (2025-01-24)
+
+### Internal
+
+- Centralize `tsconfig`. @sneridagh [#6536](https://github.com/plone/volto/issues/6536)
+
## 1.0.0 (2024-12-12)
### Internal
diff --git a/packages/helpers/news/6536.internal b/packages/helpers/news/6536.internal
deleted file mode 100644
index 27c8bbd143..0000000000
--- a/packages/helpers/news/6536.internal
+++ /dev/null
@@ -1 +0,0 @@
-Centralize `tsconfig`. @sneridagh
diff --git a/packages/helpers/package.json b/packages/helpers/package.json
index 01a81fc5f7..e9ee170c59 100644
--- a/packages/helpers/package.json
+++ b/packages/helpers/package.json
@@ -9,7 +9,7 @@
],
"funding": "https://github.com/sponsors/plone",
"license": "MIT",
- "version": "1.0.0",
+ "version": "1.0.1",
"repository": {
"type": "git",
"url": "https://github.com/plone/volto.git"
diff --git a/packages/providers/CHANGELOG.md b/packages/providers/CHANGELOG.md
index 96a8e9b472..fec0df254a 100644
--- a/packages/providers/CHANGELOG.md
+++ b/packages/providers/CHANGELOG.md
@@ -8,6 +8,12 @@
+## 1.0.0-alpha.7 (2025-01-24)
+
+### Internal
+
+- Centralize `tsconfig`. @sneridagh [#6536](https://github.com/plone/volto/issues/6536)
+
## 1.0.0-alpha.6 (2024-11-21)
### Feature
diff --git a/packages/providers/news/6536.internal b/packages/providers/news/6536.internal
deleted file mode 100644
index 27c8bbd143..0000000000
--- a/packages/providers/news/6536.internal
+++ /dev/null
@@ -1 +0,0 @@
-Centralize `tsconfig`. @sneridagh
diff --git a/packages/providers/package.json b/packages/providers/package.json
index 8a12623112..9e3772638b 100644
--- a/packages/providers/package.json
+++ b/packages/providers/package.json
@@ -9,7 +9,7 @@
],
"funding": "https://github.com/sponsors/plone",
"license": "MIT",
- "version": "1.0.0-alpha.6",
+ "version": "1.0.0-alpha.7",
"repository": {
"type": "git",
"url": "https://github.com/plone/volto.git"
diff --git a/packages/react-router/.gitignore b/packages/react-router/.gitignore
new file mode 100644
index 0000000000..b947077876
--- /dev/null
+++ b/packages/react-router/.gitignore
@@ -0,0 +1,2 @@
+node_modules/
+dist/
diff --git a/packages/react-router/.npmignore b/packages/react-router/.npmignore
new file mode 100644
index 0000000000..a6d10baa1e
--- /dev/null
+++ b/packages/react-router/.npmignore
@@ -0,0 +1,6 @@
+news
+towncrier.toml
+.changelog.draft
+node_modules/
+.release-it.json
+.eslintrc.js
diff --git a/packages/react-router/.release-it.json b/packages/react-router/.release-it.json
new file mode 100644
index 0000000000..bcb50ec97b
--- /dev/null
+++ b/packages/react-router/.release-it.json
@@ -0,0 +1,28 @@
+{
+ "plugins": {
+ "../scripts/prepublish.js": {}
+ },
+ "hooks": {
+ "after:bump": [
+ "pipx run towncrier build --draft --yes --version ${version} > .changelog.draft && pipx run towncrier build --yes --version ${version}",
+ "pnpm build:force"
+ ],
+ "after:release": "rm .changelog.draft"
+ },
+ "npm": {
+ "publish": false
+ },
+ "git": {
+ "changelog": "pipx run towncrier build --draft --yes --version 0.0.0",
+ "requireUpstream": false,
+ "requireCleanWorkingDir": false,
+ "commitMessage": "Release @plone/react-router ${version}",
+ "tagName": "plone-react-router-${version}",
+ "tagAnnotation": "Release @plone/react-router ${version}"
+ },
+ "github": {
+ "release": true,
+ "releaseName": "@plone/react-router ${version}",
+ "releaseNotes": "cat .changelog.draft"
+ }
+}
diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md
new file mode 100644
index 0000000000..97a8deaaa6
--- /dev/null
+++ b/packages/react-router/CHANGELOG.md
@@ -0,0 +1,66 @@
+# @plone/providers Release Notes
+
+
+
+
+
+## 1.0.0 (2025-01-24)
+
+### Bugfix
+
+- Initial implementation.
+ Added `getAddonRoutesConfig` for configuring routes in add-ons. @sneridagh [#6599](https://github.com/plone/volto/issues/6599)
+
+## 1.0.0-alpha.6 (2024-11-21)
+
+### Feature
+
+- Update RAC to 1.5.0 @sneridagh [#6498](https://github.com/plone/volto/issues/6498)
+
+## 1.0.0-alpha.5 (2024-11-05)
+
+### Internal
+
+- Improve packaging. @sneridagh
+
+## 1.0.0-alpha.4 (2024-11-05)
+
+### Internal
+
+- Bump local `typescript` version. @sneridagh [#6461](https://github.com/plone/volto/issues/6461)
+- Replace `parcel` with `tsup`. Better types, better tsconfig. Move to ESM. @sneridagh [#6468](https://github.com/plone/volto/issues/6468)
+
+## 1.0.0-alpha.3 (2024-10-18)
+
+## 1.0.0-alpha.2 (2024-10-18)
+
+### Breaking
+
+- Improve and group providers. @sneridagh
+ Breaking:
+ - The interface of the providers has changed. Please check the new one, and adapt your apps accordingly. [#6069](https://github.com/plone/volto/issues/6069)
+
+### Internal
+
+- Update typescript and vitest everywhere @sneridagh [#6407](https://github.com/plone/volto/issues/6407)
+
+## 1.0.0-alpha.1 (2024-05-23)
+
+### Internal
+
+- Cleanup imports in RouterLocation provider @pnicolli [#6029](https://github.com/plone/volto/issues/6029)
+
+## 1.0.0-alpha.0 (2024-05-13)
+
+### Feature
+
+- Initial implementation @sneridagh [#5887](https://github.com/plone/volto/issues/5887)
+
+### Internal
+
+- Improvements to the monorepo setup with utilities, especially ESLint. Build cached option to speedup operations. @sneridagh [#5969](https://github.com/plone/volto/issues/5969)
+- Saner defaults for building deps, switch default to cached, add `build:force` command @sneridagh [#5980](https://github.com/plone/volto/issues/5980)
diff --git a/packages/react-router/README.md b/packages/react-router/README.md
new file mode 100644
index 0000000000..75ba6475a9
--- /dev/null
+++ b/packages/react-router/README.md
@@ -0,0 +1,188 @@
+# `@plone/providers`
+
+This package contains utility providers for Plone React components.
+The main purpose is to provide dependency injection of common required artifacts needed by any app.
+These artifacts include:
+- Router related
+- Plone Client
+- URL handling methods
+
+> [!WARNING]
+> This package or app is experimental.
+> The community offers no support whatsoever for it.
+> Breaking changes may occur without notice.
+
+## `PloneProvider`
+
+It provides all the necessary artifacts that an app can need grouped in a single provider.
+
+```ts
+interface PloneProvider {
+ ploneClient: InstanceType;
+ queryClient: QueryClient;
+ useLocation: () => Location | undefined;
+ useParams: (opts?: any) => Record;
+ navigate: (path: string) => void;
+ useHref: (to: string, options?: any) => string;
+ flattenToAppURL: (path: string | undefined) => string | undefined;
+}
+```
+
+It should be instantiated at the top of your app.
+You have to provide the required props depending on the framework and the router used.
+This is the example for a Next.js app.
+Please refer to the {file}`apps` folder of the Volto repository for more examples of the usage of `PloneProvider` in different React frameworks.
+
+```tsx
+'use client';
+import React from 'react';
+import {
+ useRouter,
+ usePathname,
+ useSearchParams,
+ useParams,
+} from 'next/navigation';
+import { QueryClient } from '@tanstack/react-query';
+import { PloneProvider } from '@plone/providers';
+import PloneClient from '@plone/client';
+import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
+import { flattenToAppURL } from './utils';
+import config from './config';
+
+// Custom hook to unify the location object between NextJS and Plone
+function useLocation() {
+ let pathname = usePathname();
+ let search = useSearchParams();
+
+ return {
+ pathname,
+ search,
+ searchStr: '',
+ hash: (typeof window !== 'undefined' && window.location.hash) || '',
+ href: (typeof window !== 'undefined' && window.location.href) || '',
+ };
+}
+
+const Providers: React.FC<{
+ children?: React.ReactNode;
+}> = ({ children }) => {
+ // Creating the clients at the file root level makes the cache shared
+ // between all requests and means _all_ data gets passed to _all_ users.
+ // Besides being bad for performance, this also leaks any sensitive data.
+ // We use this pattern to ensure that every client gets its own clients
+ const [queryClient] = React.useState(
+ () =>
+ new QueryClient({
+ defaultOptions: {
+ queries: {
+ // With SSR, we usually want to set some default staleTime
+ // above 0 to avoid refetching immediately on the client
+ staleTime: 60 * 1000,
+ },
+ },
+ }),
+ );
+
+ const [ploneClient] = React.useState(() =>
+ PloneClient.initialize({
+ apiPath: config.settings.apiPath,
+ }),
+ );
+
+ const router = useRouter();
+
+ return (
+ {
+ router.push(to);
+ }}
+ useParams={useParams}
+ useHref={(to) => flattenToAppURL(to)}
+ flattenToAppURL={flattenToAppURL}
+ >
+ {children}
+
+
+ );
+};
+
+export default Providers;
+
+```
+
+You can use it anywhere in your app by using the hook `usePloneProvider`.
+
+```tsx
+import { usePloneProvider } from '@plone/providers';
+
+const { ploneClient } = usePloneProvider()
+```
+
+Alternatively, you can use it in any other context property.
+
+```tsx
+const { navigate } = usePloneProvider()
+```
+
+## `PloneClientProvider`
+
+`PloneProvider` in a group of other smaller providers.
+You can also instantiate and use them as standalone providers.
+However, you should do this only if the framework has some limitation on using the bulk `PloneClientProvider`.
+
+The following snippets show its usage.
+First, instantiate the provider.
+
+```ts
+export type PloneClientProviderProps = {
+ client: InstanceType;
+ queryClient: QueryClient;
+ children?: React.ReactNode;
+};
+```
+
+Second, use its related hook through either of the following examples.
+
+```tsx
+import { usePloneClient } from '@plone/providers';
+
+const client = usePloneClient()
+```
+
+or
+
+```tsx
+const { getContentQuery } = usePloneClient()
+```
+
+## `AppRouterProvider`
+
+This provider is included also in `PloneProvider`.
+You can also instantiate and use it as a standalone provider.
+However, you should do this only if the framework has some limitation on using the bulk `PloneClientProvider`.
+
+The following code example shows its usage.
+
+```ts
+interface AppRouterProps {
+ useLocation: () => Location | undefined;
+ useParams: (opts?: any) => Record;
+ navigate: (path: string) => void;
+ useHref?: (to: string, options?: any) => string;
+ flattenToAppURL: (path: string | undefined) => string | undefined;
+ children: ReactNode;
+}
+```
+
+The following code sample shows its related hook.
+
+```tsx
+import { useAppRouter } from '@plone/providers';
+
+const { useLocation } = useAppRouter()
+```
diff --git a/packages/react-router/news/.gitkeep b/packages/react-router/news/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/packages/react-router/package.json b/packages/react-router/package.json
new file mode 100644
index 0000000000..0b6477b40c
--- /dev/null
+++ b/packages/react-router/package.json
@@ -0,0 +1,77 @@
+{
+ "name": "@plone/react-router",
+ "description": "Plone React Router integration package",
+ "maintainers": [
+ {
+ "name": "Plone Foundation",
+ "url": "https://plone.org"
+ }
+ ],
+ "funding": "https://github.com/sponsors/plone",
+ "license": "MIT",
+ "version": "1.0.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/plone/volto.git"
+ },
+ "bugs": {
+ "url": "https://github.com/plone/volto/issues"
+ },
+ "homepage": "https://plone.org",
+ "keywords": [
+ "volto",
+ "plone",
+ "plone6",
+ "react",
+ "helpers"
+ ],
+ "publishConfig": {
+ "access": "public"
+ },
+ "type": "module",
+ "files": [
+ "dist",
+ "README.md"
+ ],
+ "main": "./dist/index.js",
+ "exports": {
+ "./package.json": "./package.json",
+ ".": {
+ "import": "./dist/index.js",
+ "default": "./dist/index.cjs"
+ }
+ },
+ "scripts": {
+ "build": "tsup",
+ "build:force": "tsup",
+ "check:exports": "attw --pack .",
+ "test": "vitest",
+ "dry-release": "release-it --dry-run",
+ "release": "release-it",
+ "release-major-alpha": "release-it major --preRelease=alpha",
+ "release-alpha": "release-it --preRelease=alpha"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ }
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "@arethetypeswrong/cli": "^0.16.4",
+ "@plone/types": "workspace:*",
+ "@react-router/dev": "7.1.2",
+ "@types/node": "22.10.7",
+ "@types/react": "^18",
+ "@types/react-dom": "^18",
+ "release-it": "17.1.1",
+ "tsconfig": "workspace:*",
+ "tsup": "^8.3.5",
+ "typescript": "^5.6.3",
+ "vitest": "^2.1.3"
+ }
+}
diff --git a/packages/react-router/src/index.test.ts b/packages/react-router/src/index.test.ts
new file mode 100644
index 0000000000..7f20b57247
--- /dev/null
+++ b/packages/react-router/src/index.test.ts
@@ -0,0 +1,93 @@
+import { describe, expect, it, afterEach, beforeEach } from 'vitest';
+import { getAddonRoutesConfig } from './index';
+import type { ReactRouterRouteEntry } from '@plone/types';
+
+describe('getAddonRoutesConfig', () => {
+ const addonsInfo = [
+ {
+ name: '@plone/components',
+ modulePath: '/my/path/to/plone/components',
+ },
+ ];
+
+ it('route - basic', () => {
+ const routesConfig: Array = [
+ {
+ type: 'route',
+ path: '/login',
+ file: './login.tsx',
+ },
+ ];
+ expect(getAddonRoutesConfig(routesConfig, addonsInfo)).toEqual([
+ { children: undefined, file: './login.tsx', path: '/login' },
+ ]);
+ });
+
+ it('route - basic with addon name', () => {
+ const routesConfig: Array = [
+ {
+ type: 'route',
+ path: '/login',
+ file: '@plone/components/login.tsx',
+ },
+ ];
+ expect(getAddonRoutesConfig(routesConfig, addonsInfo)).toEqual([
+ {
+ children: undefined,
+ file: '/my/path/to/plone/components/login.tsx',
+ path: '/login',
+ },
+ ]);
+ });
+
+ it('route - with options', () => {
+ const routesConfig: Array = [
+ {
+ type: 'route',
+ path: '/login',
+ file: './login.tsx',
+ options: {
+ id: 'login',
+ },
+ },
+ ];
+ expect(getAddonRoutesConfig(routesConfig, addonsInfo)).toEqual([
+ {
+ children: undefined,
+ file: './login.tsx',
+ path: '/login',
+ id: 'login',
+ },
+ ]);
+ });
+
+ it('route - nested', () => {
+ const routesConfig: Array = [
+ {
+ type: 'route',
+ path: '/login',
+ file: './login.tsx',
+ children: [
+ {
+ type: 'route',
+ path: '/login/ok',
+ file: './login/ok.tsx',
+ },
+ ],
+ },
+ ];
+ expect(getAddonRoutesConfig(routesConfig, addonsInfo)).toEqual([
+ {
+ file: './login.tsx',
+ path: '/login',
+ children: [
+ {
+ children: undefined,
+ file: './login/ok.tsx',
+ path: '/login/ok',
+ },
+ ],
+ },
+ ]);
+ });
+});
diff --git a/packages/react-router/src/index.ts b/packages/react-router/src/index.ts
new file mode 100644
index 0000000000..59788606ce
--- /dev/null
+++ b/packages/react-router/src/index.ts
@@ -0,0 +1,77 @@
+import { route, index, layout, prefix } from '@react-router/dev/routes';
+import type { RouteConfig, RouteConfigEntry } from '@react-router/dev/routes';
+import type { ReactRouterRouteEntry } from '@plone/types';
+import path from 'node:path';
+
+export function getAddonRoutesConfig(
+ routesConfig: Array,
+ addonsInfo: Array,
+): Array {
+ let resultRoutesConfig: RouteConfig = [];
+
+ for (const routeConfig of routesConfig) {
+ const containsAddonModule = addonsInfo.find((addon) =>
+ routeConfig.file.includes(addon.name),
+ );
+ if (containsAddonModule) {
+ routeConfig.file = path.join(
+ containsAddonModule.modulePath,
+ routeConfig.file.replace(containsAddonModule.name, ''),
+ );
+ }
+ switch (routeConfig.type) {
+ case 'route':
+ if (routeConfig.options) {
+ resultRoutesConfig.push(
+ route(routeConfig.path, routeConfig.file, routeConfig.options),
+ );
+ } else if (routeConfig.children) {
+ resultRoutesConfig.push(
+ route(
+ routeConfig.path,
+ routeConfig.file,
+ routeConfig.options || {},
+ getAddonRoutesConfig(
+ routeConfig.children,
+ addonsInfo,
+ ) as Array,
+ ),
+ );
+ } else {
+ resultRoutesConfig.push(route(routeConfig.path, routeConfig.file));
+ }
+ break;
+
+ case 'index':
+ resultRoutesConfig.push(index(routeConfig.file, routeConfig.options));
+ break;
+
+ case 'layout':
+ if (routeConfig.options) {
+ resultRoutesConfig.push(
+ layout(routeConfig.file, routeConfig.options),
+ );
+ }
+ if (routeConfig.children) {
+ resultRoutesConfig.push(
+ layout(
+ routeConfig.file,
+ routeConfig.options || {},
+ getAddonRoutesConfig(
+ routeConfig.children,
+ addonsInfo,
+ ) as Array,
+ ),
+ );
+ }
+ break;
+
+ case 'prefix':
+ console.log('prefix not implemented yet');
+ break;
+ default:
+ break;
+ }
+ }
+ return resultRoutesConfig;
+}
diff --git a/packages/react-router/towncrier.toml b/packages/react-router/towncrier.toml
new file mode 100644
index 0000000000..3ef721f378
--- /dev/null
+++ b/packages/react-router/towncrier.toml
@@ -0,0 +1,33 @@
+[tool.towncrier]
+filename = "CHANGELOG.md"
+directory = "news/"
+title_format = "## {version} ({project_date})"
+underlines = ["", "", ""]
+template = "../scripts/templates/towncrier_template.jinja"
+start_string = "\n"
+issue_format = "[#{issue}](https://github.com/plone/volto/issues/{issue})"
+
+[[tool.towncrier.type]]
+directory = "breaking"
+name = "Breaking"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "feature"
+name = "Feature"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "bugfix"
+name = "Bugfix"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "internal"
+name = "Internal"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "documentation"
+name = "Documentation"
+showcontent = true
diff --git a/packages/react-router/tsconfig.json b/packages/react-router/tsconfig.json
new file mode 100644
index 0000000000..d6fbf62fe0
--- /dev/null
+++ b/packages/react-router/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "extends": "tsconfig/react-library.json",
+ "include": ["src"],
+ "exclude": [
+ "node_modules",
+ "build",
+ "public",
+ "coverage",
+ "src/**/*.test.{js,jsx,ts,tsx}",
+ "src/**/*.spec.{js,jsx,ts,tsx}",
+ "src/**/*.stories.{js,jsx,ts,tsx}"
+ ]
+}
diff --git a/packages/react-router/tsup.config.ts b/packages/react-router/tsup.config.ts
new file mode 100644
index 0000000000..82b88a425c
--- /dev/null
+++ b/packages/react-router/tsup.config.ts
@@ -0,0 +1,9 @@
+import { defineConfig } from 'tsup';
+
+export default defineConfig({
+ entryPoints: ['src/index.ts'],
+ format: ['cjs', 'esm'],
+ dts: true,
+ outDir: 'dist',
+ clean: true,
+});
diff --git a/packages/registry/CHANGELOG.md b/packages/registry/CHANGELOG.md
index 549b62a537..5aed2ac3e9 100644
--- a/packages/registry/CHANGELOG.md
+++ b/packages/registry/CHANGELOG.md
@@ -8,6 +8,16 @@
+## 2.3.0 (2025-01-24)
+
+### Feature
+
+- Added route registry. @sneridagh [#6600](https://github.com/plone/volto/issues/6600)
+
+### Documentation
+
+- Document the route API. @sneridagh [#6604](https://github.com/plone/volto/issues/6604)
+
## 2.2.0 (2024-12-12)
### Feature
diff --git a/packages/registry/news/6600.feature b/packages/registry/news/6600.feature
deleted file mode 100644
index 946395b56f..0000000000
--- a/packages/registry/news/6600.feature
+++ /dev/null
@@ -1 +0,0 @@
-Added route registry. @sneridagh
diff --git a/packages/registry/news/6604.documentation b/packages/registry/news/6604.documentation
deleted file mode 100644
index bd10235aba..0000000000
--- a/packages/registry/news/6604.documentation
+++ /dev/null
@@ -1 +0,0 @@
-Document the route API. @sneridagh
diff --git a/packages/registry/package.json b/packages/registry/package.json
index f05ac0d9bd..1f0f9047e0 100644
--- a/packages/registry/package.json
+++ b/packages/registry/package.json
@@ -9,7 +9,7 @@
],
"funding": "https://github.com/sponsors/plone",
"license": "MIT",
- "version": "2.2.0",
+ "version": "2.3.0",
"repository": {
"type": "git",
"url": "https://github.com/plone/volto.git"
diff --git a/packages/seven/.eslintrc.cjs b/packages/seven/.eslintrc.cjs
new file mode 100644
index 0000000000..21d4f1322c
--- /dev/null
+++ b/packages/seven/.eslintrc.cjs
@@ -0,0 +1,88 @@
+/**
+ * This is intended to be a basic starting point for linting in your app.
+ * It relies on recommended configs out of the box for simplicity, but you can
+ * and should modify this configuration to best suit your team's needs.
+ */
+
+/** @type {import('eslint').Linter.Config} */
+module.exports = {
+ root: true,
+ parserOptions: {
+ ecmaVersion: 'latest',
+ sourceType: 'module',
+ ecmaFeatures: {
+ jsx: true,
+ },
+ },
+ env: {
+ browser: true,
+ commonjs: true,
+ es6: true,
+ },
+
+ // Base config
+ extends: ['eslint:recommended'],
+
+ // Ignore Cypress folder
+ ignorePatterns: [
+ 'cypress/',
+ '.react-router/**/*',
+ 'tests/registry.config.ts',
+ ],
+
+ overrides: [
+ // React
+ {
+ files: ['**/*.{js,jsx,ts,tsx}'],
+ plugins: ['react', 'jsx-a11y'],
+ extends: [
+ 'plugin:react/recommended',
+ 'plugin:react/jsx-runtime',
+ 'plugin:react-hooks/recommended',
+ 'plugin:jsx-a11y/recommended',
+ ],
+ settings: {
+ react: {
+ version: 'detect',
+ },
+ 'import/core-modules': ['@plone/registry/addons-loader'],
+ formComponents: ['Form'],
+ linkComponents: [
+ { name: 'Link', linkAttribute: 'to' },
+ { name: 'NavLink', linkAttribute: 'to' },
+ ],
+ },
+ },
+
+ // Typescript
+ {
+ files: ['**/*.{ts,tsx}'],
+ plugins: ['@typescript-eslint', 'import'],
+ parser: '@typescript-eslint/parser',
+ settings: {
+ 'import/internal-regex': '^~/',
+ 'import/resolver': {
+ node: {
+ extensions: ['.ts', '.tsx'],
+ },
+ typescript: {
+ alwaysTryTypes: true,
+ },
+ },
+ },
+ extends: [
+ 'plugin:@typescript-eslint/recommended',
+ 'plugin:import/recommended',
+ 'plugin:import/typescript',
+ ],
+ },
+
+ // Node
+ {
+ files: ['.eslintrc.js'],
+ env: {
+ node: true,
+ },
+ },
+ ],
+};
diff --git a/packages/seven/.gitignore b/packages/seven/.gitignore
new file mode 100644
index 0000000000..f1eb112b25
--- /dev/null
+++ b/packages/seven/.gitignore
@@ -0,0 +1,7 @@
+node_modules
+
+/.cache
+/build
+.env
+.react-router
+.registry.loader.js
diff --git a/packages/seven/.release-it.json b/packages/seven/.release-it.json
new file mode 100644
index 0000000000..d91788c67c
--- /dev/null
+++ b/packages/seven/.release-it.json
@@ -0,0 +1,26 @@
+{
+ "hooks": {
+ "after:bump": [
+ "pipx run towncrier build --draft --yes --version ${version} > .changelog.draft",
+ "pipx run towncrier build --yes --version ${version}"
+ ],
+ "after:release": "rm .changelog.draft"
+ },
+ "npm": {
+ "publish": false
+ },
+ "git": {
+ "commitArgs": ["--no-verify"],
+ "changelog": "pipx run towncrier build --draft --yes --version 0.0.0",
+ "requireUpstream": false,
+ "requireCleanWorkingDir": false,
+ "commitMessage": "Release Plone7 ${version}",
+ "tagName": "plone7-${version}",
+ "tagAnnotation": "Release Plone7 ${version}"
+ },
+ "github": {
+ "release": true,
+ "releaseName": "Plone7 ${version}",
+ "releaseNotes": "cat .changelog.draft"
+ }
+}
diff --git a/packages/seven/CHANGELOG.md b/packages/seven/CHANGELOG.md
new file mode 100644
index 0000000000..a90be32e57
--- /dev/null
+++ b/packages/seven/CHANGELOG.md
@@ -0,0 +1,11 @@
+# Plone 7 Release Notes
+
+
+
+
+
+## 1.0.0 (unreleased)
diff --git a/packages/seven/Makefile b/packages/seven/Makefile
new file mode 100644
index 0000000000..b012ee8899
--- /dev/null
+++ b/packages/seven/Makefile
@@ -0,0 +1,274 @@
+# Volto development
+
+### Defensive settings for make:
+# https://tech.davis-hansson.com/p/make/
+SHELL:=bash
+.ONESHELL:
+.SHELLFLAGS:=-eu -o pipefail -c
+.SILENT:
+.DELETE_ON_ERROR:
+MAKEFLAGS+=--warn-undefined-variables
+MAKEFLAGS+=--no-builtin-rules
+
+# Project settings (read from repo root)
+include ../../variables.mk
+
+# Allow setting the language for backend-docker-start. Default is `en`.
+LANGUAGE ?=en
+
+# Recipe snippets for reuse
+
+CHECKOUT_BASENAME="$(shell basename $(shell realpath ./))"
+CHECKOUT_BRANCH=$(shell git branch --show-current)
+CHECKOUT_TMP=../$(CHECKOUT_BASENAME).tmp
+CHECKOUT_TMP_ABS="$(shell realpath $(CHECKOUT_TMP))"
+
+CURRENT_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
+
+# We like colors
+# From: https://coderwall.com/p/izxssa/colored-makefile-for-golang-projects
+RED=`tput setaf 1`
+GREEN=`tput setaf 2`
+RESET=`tput sgr0`
+YELLOW=`tput setaf 3`
+
+
+# Top-level targets
+
+.PHONY: all
+all: help
+
+# Add the following 'help' target to your Makefile
+# and add help text after each target name starting with ' ##'
+# to return a pretty list of targets and their descriptions.
+.PHONY: help
+help: ## This help message
+ @echo -e "$$(grep -hE '^\S+:.*##' $(MAKEFILE_LIST) | sed -e 's/:.*##\s*/:/' -e 's/^\(.\+\):\(.*\)/\\x1b[36m\1\\x1b[m:\2/' | column -c2 -t -s :)"
+
+.PHONY: start
+start: ## Starts Plone 7 in development mode
+ pnpm start
+
+.PHONY: build
+build: ## Build a production bundle for distribution
+ pnpm build
+
+.PHONY: test
+test: ## Run unit tests
+ pnpm test
+
+.PHONY: clean
+clean: ## Clean development environment
+ rm -rf node_modules
+
+##### Build
+
+.PHONY: cypress-install
+cypress-install: ## Install Cypress for acceptance tests
+ $(NODEBIN)/cypress install
+
+../registry/dist: $(shell find ../registry/src -type f)
+ (cd ../../ && pnpm build:registry)
+
+../components/dist: $(shell find ../components/src -type f)
+ (cd ../../ && pnpm build:components)
+
+../client/dist: $(shell find ../client/src -type f)
+ (cd ../../ && pnpm build:client)
+
+../providers/dist: $(shell find ../providers/src -type f)
+ (cd ../../ && pnpm build:providers)
+
+../helpers/dist: $(shell find ../helpers/src -type f)
+ (cd ../../ && pnpm build:helpers)
+
+../react-router/dist: $(shell find ../react-router/src -type f)
+ (cd ../../ && pnpm build:react-router)
+
+.PHONY: build-deps
+build-deps: ../registry/dist ../components/dist ../client/dist ../providers/dist ../react-router/dist ../helpers/dist ## Build dependencies
+
+.PHONY: i18n
+i18n: ## Extract and compile translations
+ pnpm i18n
+
+## Storybook
+
+.PHONY: storybook-start
+storybook-start: ## Start Storybook server on port 6006
+ @echo "$(GREEN)==> Start Storybook$(RESET)"
+ pnpm run storybook
+
+.PHONY: storybook-build
+storybook-build: build-deps ## Build Storybook
+ pnpm build-storybook -o ../../docs/_build/html/storybook
+
+##### Release (it runs the one inside)
+
+.PHONY: release-notes-copy-to-docs
+release-notes-copy-to-docs: ## Copy release notes into documentation
+ cp CHANGELOG.md ../../docs/source/release-notes/index.md
+ git add ../../docs/source/release-notes/index.md
+
+##### Docker containers
+
+.PHONY: backend-docker-start
+backend-docker-start: ## Starts a Docker-based backend for development
+ docker run -it --rm --name=backend -p 8080:8080 -v volto-backend-data:/data -e SITE=Plone -e ADDONS='$(KGS)' -e LANGUAGE='$(LANGUAGE)' $(DOCKER_IMAGE)
+
+.PHONY: frontend-docker-start
+frontend-docker-start: ## Starts a Docker-based frontend for development
+ docker run -it --rm --name=volto --link backend -p 3000:3000 -e RAZZLE_INTERNAL_API_PATH=http://backend:8080/Plone -e RAZZLE_DEV_PROXY_API_PATH=http://backend:8080/Plone plone/plone-frontend:latest
+
+##### Acceptance tests (Cypress)
+######### Dev mode Acceptance tests
+
+.PHONY: acceptance-frontend-dev-start
+acceptance-frontend-dev-start: ## Start acceptance frontend in development mode
+ PLONE_API_PATH=http://127.0.0.1:55001/plone pnpm start
+
+######### Core Acceptance tests
+
+.PHONY: acceptance-backend-start
+acceptance-backend-start: ## Start backend acceptance server
+ #docker run -it --rm -p 55001:55001 $(DOCKER_IMAGE_ACCEPTANCE)
+ # Uncomment next line and comment line above to use a custom image with the acceptance server (in case you need to use an specific backend add-on or version)
+ docker run -it --rm -e ZSERVER_HOST=0.0.0.0 -e ZSERVER_PORT=55001 -p 55001:55001 -e ADDONS='$(KGS) $(TESTING_ADDONS)' -e APPLY_PROFILES=plone.app.contenttypes:plone-content,plone.restapi:default,plone.volto:default-homepage -e CONFIGURE_PACKAGES=plone.app.contenttypes,plone.restapi,plone.volto,plone.volto.cors $(DOCKER_IMAGE) ./bin/robot-server plone.app.robotframework.testing.VOLTO_ROBOT_TESTING
+
+.PHONY: ci-acceptance-backend-start
+ci-acceptance-backend-start: ## Start backend acceptance server in headless mode for CI
+ docker run -i --rm -p 55001:55001 $(DOCKER_IMAGE_ACCEPTANCE)
+ # Uncomment next line and comment line above to use a custom image with the acceptance server (in case you need to use an specific backend add-on or version)
+ # docker run -i --rm -e ZSERVER_HOST=0.0.0.0 -e ZSERVER_PORT=55001 -p 55001:55001 -e ADDONS='$(KGS) $(TESTING_ADDONS)' -e APPLY_PROFILES=plone.app.contenttypes:plone-content,plone.restapi:default,plone.volto:default-homepage -e CONFIGURE_PACKAGES=plone.app.contenttypes,plone.restapi,plone.volto,plone.volto.cors $(DOCKER_IMAGE) ./bin/robot-server plone.app.robotframework.testing.VOLTO_ROBOT_TESTING
+
+.PHONY: acceptance-frontend-prod-start
+acceptance-frontend-prod-start: build-deps ## Start acceptance frontend in production mode
+ pnpm build && PLONE_API_PATH=http://127.0.0.1:55001/plone pnpm start:prod
+
+.PHONY: acceptance-test
+acceptance-test: ## Start Cypress in interactive mode
+ NODE_ENV=production CYPRESS_API=plone $(NODEBIN)/cypress open
+
+.PHONY: ci-acceptance-test
+ci-acceptance-test: ## Run cypress tests in headless mode for CI
+ NODE_ENV=production CYPRESS_API=plone $(NODEBIN)/cypress run --config specPattern='cypress/tests/core/**/*.{ts,tsx}'
+
+.PHONY: ci-acceptance-test-run-all
+ci-acceptance-test-run-all: ## With a single command, start both the acceptance frontend and backend acceptance server, and run Cypress tests in headless mode
+ $(NODEBIN)/start-test "make ci-acceptance-backend-start" http-get://127.0.0.1:55001/plone "make acceptance-frontend-prod-start" http://127.0.0.1:3000 "make ci-acceptance-test"
+
+######### Deployment Core Acceptance tests
+
+.PHONY: deployment-acceptance-frontend-prod-start
+deployment-acceptance-frontend-prod-start: build-deps ## Start acceptance frontend in production mode for deployment
+ pnpm build && pnpm start:prod
+
+.PHONY: deployment-acceptance-test
+deployment-acceptance-test: ## Start Cypress in interactive mode for tests in deployment
+ NODE_ENV=production CYPRESS_API=plone $(NODEBIN)/cypress open --config baseUrl='http://localhost'
+
+.PHONY: deployment-acceptance-web-server-start
+deployment-acceptance-web-server-start: ## Start the reverse proxy (Traefik) in port 80 for deployment
+ cd cypress/docker && docker compose -f seamless.yml up
+
+.PHONY: deployment-ci-acceptance-test-run-all
+deployment-ci-acceptance-test-run-all: ## With a single command, run the backend, frontend, and the Cypress tests in headless mode for CI for deployment tests
+ $(NODEBIN)/start-test "make acceptance-backend-start" http-get://127.0.0.1:55001/plone "make deployment-acceptance-frontend-prod-start" http://127.0.0.1:3000 "make ci-acceptance-test"
+
+######### Project Acceptance tests
+
+.PHONY: project-acceptance-frontend-prod-start
+project-acceptance-frontend-prod-start: build-deps ## Start acceptance frontend in production mode for project tests
+ (cd ../../.. && pnpm build && PLONE_API_PATH=http://127.0.0.1:55001/plone pnpm start:prod)
+
+######### Core Sandbox Acceptance tests
+
+.PHONY: coresandbox-acceptance-backend-start
+coresandbox-acceptance-backend-start: ## Start backend acceptance server for core sandbox tests
+ docker run -i --rm -p 55001:55001 -e APPLY_PROFILES=plone.app.contenttypes:plone-content,plone.restapi:default,plone.volto:default-homepage,plone.volto:coresandbox -e CONFIGURE_PACKAGES=plone.app.contenttypes,plone.restapi,plone.volto,plone.volto.cors,plone.volto.coresandbox $(DOCKER_IMAGE_ACCEPTANCE)
+
+.PHONY: coresandbox-acceptance-frontend-prod-start
+coresandbox-acceptance-frontend-prod-start: build-deps ## Start acceptance frontend in production mode for core sandbox tests
+ ADDONS=@plone/volto-coresandbox PLONE_API_PATH=http://127.0.0.1:55001/plone pnpm build && pnpm start:prod
+
+.PHONY: coresandbox-acceptance-frontend-dev-start
+coresandbox-acceptance-frontend-dev-start: build-deps ## Start acceptance frontend in development mode for core sandbox tests
+ ADDONS=@plone/volto-coresandbox PLONE_API_PATH=http://127.0.0.1:55001/plone pnpm start
+
+.PHONY: coresandbox-acceptance-test
+coresandbox-acceptance-test: ## Start Cypress in interactive mode for core sandbox tests
+ NODE_ENV=production CYPRESS_API=plone $(NODEBIN)/cypress open --config specPattern='cypress/tests/coresandbox/**/*.{js,jsx,ts,tsx}'
+
+.PHONY: coresandbox-ci-acceptance-test
+coresandbox-ci-acceptance-test: ## Run Cypress tests in headless mode for CI for core sandbox tests
+ NODE_ENV=production CYPRESS_API=plone $(NODEBIN)/cypress run --config specPattern='cypress/tests/coresandbox/**/*.{js,jsx,ts,tsx}'
+
+.PHONY: coresandbox-ci-acceptance-test-run-all
+coresandbox-ci-acceptance-test-run-all: ## With a single command, run the backend, frontend, and the Cypress tests in headless mode for CI for core sandbox tests
+ $(NODEBIN)/start-test "make coresandbox-acceptance-backend-start" http-get://127.0.0.1:55001/plone "make coresandbox-acceptance-frontend-prod-start" http://127.0.0.1:3000 "make coresandbox-ci-acceptance-test"
+
+######### Multilingual Acceptance tests
+
+.PHONY: multilingual-acceptance-backend-start
+multilingual-acceptance-backend-start: ## Start backend acceptance server for multilingual tests
+ docker run -i --rm -p 55001:55001 -e APPLY_PROFILES=plone.app.contenttypes:plone-content,plone.restapi:default,plone.volto:multilingual $(DOCKER_IMAGE_ACCEPTANCE)
+
+.PHONY: multilingual-acceptance-frontend-prod-start
+multilingual-acceptance-frontend-prod-start: build-deps ## Start acceptance frontend in production mode for multilingual tests
+ ADDONS=@plone/volto-coresandbox:multilingualFixture PLONE_API_PATH=http://127.0.0.1:55001/plone pnpm build && pnpm start:prod
+
+.PHONY: multilingual-acceptance-test
+multilingual-acceptance-test: ## Start Cypress in interactive mode for multilingual tests
+ NODE_ENV=production CYPRESS_API=plone $(NODEBIN)/cypress open --config specPattern='cypress/tests/multilingual/**/*.{js,jsx,ts,tsx}'
+
+.PHONY: multilingual-ci-acceptance-test
+multilingual-ci-acceptance-test: ## Run Cypress tests in headless mode for CI for multilingual tests
+ NODE_ENV=production CYPRESS_API=plone $(NODEBIN)/cypress run --config specPattern='cypress/tests/multilingual/**/*.{js,jsx,ts,tsx}'
+
+.PHONY: multilingual-ci-acceptance-test-run-all
+multilingual-ci-acceptance-test-run-all: ## With a single command, run the backend, frontend, and the Cypress tests in headless mode for CI for multilingual tests
+ $(NODEBIN)/start-test "make multilingual-acceptance-backend-start" http-get://127.0.0.1:55001/plone "make multilingual-acceptance-frontend-prod-start" http://127.0.0.1:3000 "make multilingual-ci-acceptance-test"
+
+######### Deployment Multilingual Acceptance tests
+
+.PHONY: deployment-multilingual-acceptance-backend-start
+deployment-multilingual-acceptance-backend-start: ## Start backend acceptance server for multilingual tests for deployment
+ docker run -i --rm -p 55001:55001 -e APPLY_PROFILES=plone.app.contenttypes:plone-content,plone.restapi:default,plone.volto:multilingual $(DOCKER_IMAGE_ACCEPTANCE)
+
+.PHONY: deployment-multilingual-acceptance-frontend-prod-start
+deployment-multilingual-acceptance-frontend-prod-start: build-deps ##Start acceptance frontend in production mode for multilingual tests for deployment
+ ADDONS=@plone/volto-coresandbox:multilingualFixture pnpm build && pnpm start:prod
+
+.PHONY: deployment-multilingual-acceptance-test
+deployment-multilingual-acceptance-test: ## Start Cypress in interactive mode for multilingual tests for deployment
+ NODE_ENV=production CYPRESS_API=plone $(NODEBIN)/cypress open --config baseUrl='http://localhost',specPattern='cypress/tests/multilingual/**/*.{js,jsx,ts,tsx}'
+
+.PHONY: deployment-multilingual-ci-acceptance-test
+deployment-multilingual-ci-acceptance-test: ## Run Cypress tests in headless mode for CI for multilingual tests for deployment
+ NODE_ENV=production CYPRESS_API=plone $(NODEBIN)/cypress run --config specPattern='cypress/tests/multilingual/**/*.{js,jsx,ts,tsx}'
+
+.PHONY: deployment-multilingual-ci-acceptance-test-run-all
+deployment-multilingual-ci-acceptance-test-run-all: ## With a single command, run the backend, frontend, and the Cypress tests in headless mode for CI for multilingual tests for deployment
+ $(NODEBIN)/start-test "make deployment-multilingual-acceptance-backend-start" http-get://127.0.0.1:55001/plone "make deployment-multilingual-acceptance-frontend-prod-start" http://127.0.0.1:3000 "make deployment-multilingual-ci-acceptance-test"
+
+######### Working Copy Acceptance tests
+
+.PHONY: working-copy-acceptance-backend-start
+working-copy-acceptance-backend-start: ## Start backend acceptance server for working copy tests
+ docker run -i --rm -p 55001:55001 -e APPLY_PROFILES=plone.app.contenttypes:plone-content,plone.restapi:default,plone.app.iterate:default,plone.volto:default-homepage $(DOCKER_IMAGE_ACCEPTANCE)
+
+.PHONY: working-copy-acceptance-frontend-prod-start
+working-copy-acceptance-frontend-prod-start: build-deps ## Start acceptance frontend in production mode for working copy tests
+ ADDONS=@plone/volto-coresandbox:workingCopyFixture PLONE_API_PATH=http://127.0.0.1:55001/plone pnpm build && pnpm start:prod
+
+.PHONY: working-copy-acceptance-test
+working-copy-acceptance-test: ## Start Cypress in interactive mode for working copy tests
+ NODE_ENV=production CYPRESS_API=plone $(NODEBIN)/cypress open --config specPattern='cypress/tests/workingCopy/**/*.{js,jsx,ts,tsx}'
+
+.PHONY: working-copy-ci-acceptance-test
+working-copy-ci-acceptance-test: ## Run Cypress tests in headless mode for CI for working copy tests
+ NODE_ENV=production CYPRESS_API=plone $(NODEBIN)/cypress run --config specPattern='cypress/tests/workingCopy/**/*.{js,jsx,ts,tsx}'
+
+.PHONY: working-copy-ci-acceptance-test-run-all
+working-copy-ci-acceptance-test-run-all: ## With a single command, run the backend, frontend, and the Cypress tests in headless mode for CI for working copy tests
+ $(NODEBIN)/start-test "make working-copy-acceptance-backend-start" http-get://127.0.0.1:55001/plone "make working-copy-acceptance-frontend-prod-start" http://127.0.0.1:3000 "make working-copy-ci-acceptance-test"
diff --git a/packages/seven/README.md b/packages/seven/README.md
new file mode 100644
index 0000000000..9377c8fc62
--- /dev/null
+++ b/packages/seven/README.md
@@ -0,0 +1,33 @@
+# Plone 7
+
+> [!WARNING]
+> This package and all the efforts around it are not even in an alpha state and are experimental.
+> The community offers no support whatsoever for it.
+> Breaking changes may occur without notice.
+
+This is the initial (and very early) implementation of Plone 7.
+After the design and first implementations of all the required pieces (the `@plone/*` libraries) that will compose Plone 7, this package will concentrate all the development during the next years.
+
+It is based on [React Router](https://reactrouter.com/dev/docs) 7, using the `@plone/*` libraries.
+
+The name of this package and its folder name in `packages` may also change since it's undecided yet.
+
+## Releases
+
+Even in experimental phase, this package will be soft released periodically, under a tag.
+This will provide a way to try it out in real development and deploy scenarios.
+
+## Development
+
+To start, from the root of the monorepo, issue the following commands.
+
+```shell
+pnpm install
+pnpm --filter plone7 run dev
+```
+
+Then start the Plone backend.
+
+```shell
+make backend-docker-start
+```
diff --git a/packages/seven/app/config.server.ts b/packages/seven/app/config.server.ts
new file mode 100644
index 0000000000..2d7c951f7d
--- /dev/null
+++ b/packages/seven/app/config.server.ts
@@ -0,0 +1,32 @@
+/**
+ * This is the server side config entry point
+ */
+import config from '@plone/registry';
+import ploneClient from '@plone/client';
+import applyAddonConfiguration from '@plone/registry/addons-loader';
+
+export default function install() {
+ applyAddonConfiguration(config);
+
+ config.settings.apiPath =
+ process.env.PLONE_API_PATH || 'http://localhost:3000';
+ config.settings.internalApiPath =
+ process.env.PLONE_INTERNAL_API_PATH || undefined;
+
+ const cli = ploneClient.initialize({
+ apiPath: config.settings.internalApiPath || config.settings.apiPath,
+ });
+
+ config.registerUtility({
+ name: 'ploneClient',
+ type: 'client',
+ method: () => cli,
+ });
+
+ console.log('API_PATH is:', config.settings.apiPath);
+ console.log(
+ 'INTERNAL_API_PATH is:',
+ config.settings.internalApiPath || 'not set',
+ );
+ return config;
+}
diff --git a/packages/seven/app/config.ts b/packages/seven/app/config.ts
new file mode 100644
index 0000000000..7f2026e538
--- /dev/null
+++ b/packages/seven/app/config.ts
@@ -0,0 +1,11 @@
+/**
+ * This is the client side config entry point
+ */
+import config from '@plone/registry';
+import applyAddonConfiguration from '@plone/registry/addons-loader';
+
+export default function install() {
+ applyAddonConfiguration(config);
+ config.settings.apiPath = 'http://localhost:3000';
+ return config;
+}
diff --git a/packages/seven/app/content.tsx b/packages/seven/app/content.tsx
new file mode 100644
index 0000000000..8358a163e0
--- /dev/null
+++ b/packages/seven/app/content.tsx
@@ -0,0 +1,56 @@
+import type { Route } from './+types/content';
+import { data, useLoaderData, useLocation } from 'react-router';
+import PloneClient from '@plone/client';
+import App from '@plone/slots/components/App';
+import config from '@plone/registry';
+
+export const meta: Route.MetaFunction = ({ data }) => {
+ return [
+ { title: data?.title },
+ { name: 'description', content: data?.description },
+ ];
+};
+
+const expand = ['navroot', 'breadcrumbs', 'navigation'];
+
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+export async function loader({ params, request }: Route.LoaderArgs) {
+ const ploneClient = config
+ .getUtility({
+ name: 'ploneClient',
+ type: 'client',
+ })
+ .method();
+
+ const { getContent } = ploneClient as PloneClient;
+
+ const path = new URL(request.url).pathname;
+
+ if (
+ !(
+ /^https?:\/\//.test(path) ||
+ /^favicon.ico\/\//.test(path) ||
+ /expand/.test(path) ||
+ /\/@@images\//.test(path) ||
+ /\/@@download\//.test(path) ||
+ /^\/assets/.test(path) ||
+ /\.(css|css\.map)$/.test(path)
+ )
+ ) {
+ try {
+ return await getContent({ path, expand });
+ } catch (error) {
+ throw data('Content Not Found', { status: 404 });
+ }
+ } else {
+ console.log('matched path not fetched', path);
+ throw data('Content Not Found', { status: 404 });
+ }
+}
+
+export default function Content() {
+ const data = useLoaderData();
+ const pathname = useLocation().pathname;
+
+ return ;
+}
diff --git a/packages/seven/app/okroute.tsx b/packages/seven/app/okroute.tsx
new file mode 100644
index 0000000000..56472e1bb6
--- /dev/null
+++ b/packages/seven/app/okroute.tsx
@@ -0,0 +1,5 @@
+export async function loader() {
+ return new Response(null, {
+ status: 200,
+ });
+}
diff --git a/packages/seven/app/root.tsx b/packages/seven/app/root.tsx
new file mode 100644
index 0000000000..ad5ae56a73
--- /dev/null
+++ b/packages/seven/app/root.tsx
@@ -0,0 +1,191 @@
+import { useState } from 'react';
+import {
+ isRouteErrorResponse,
+ Links,
+ Meta,
+ Outlet,
+ Scripts,
+ ScrollRestoration,
+ useHref,
+ useLocation,
+ useNavigate as useRRNavigate,
+ useParams,
+ useLoaderData,
+ useRouteLoaderData,
+} from 'react-router';
+import type { Route } from './+types/root';
+
+import { QueryClient } from '@tanstack/react-query';
+import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
+import PloneClient from '@plone/client';
+import { PloneProvider } from '@plone/providers';
+import { flattenToAppURL } from './utils';
+import config from '@plone/registry';
+import install from './config';
+import installSSR from './config.server';
+
+install();
+
+import themingMain from '@plone/theming/styles/main.css?url';
+import slotsMain from '@plone/slots/main.css?url';
+
+function useNavigate() {
+ const navigate = useRRNavigate();
+ return (to: string) => navigate(flattenToAppURL(to) || '');
+}
+
+function useHrefLocal(to: string) {
+ return useHref(flattenToAppURL(to) || '');
+}
+
+export const meta: Route.MetaFunction = () => [
+ { name: 'generator', content: 'Plone 7 - https://plone.org' },
+];
+
+export const links: Route.LinksFunction = () => [
+ {
+ rel: 'icon',
+ href: '/favicon.png',
+ type: 'image/png',
+ sizes: 'any',
+ },
+ {
+ rel: 'icon',
+ href: '/icon.svg',
+ type: 'image/svg+xml',
+ },
+ { rel: 'stylesheet', href: themingMain },
+ { rel: 'stylesheet', href: slotsMain },
+ { rel: 'preconnect', href: 'https://fonts.googleapis.com' },
+ {
+ rel: 'preconnect',
+ href: 'https://fonts.gstatic.com',
+ crossOrigin: 'anonymous',
+ },
+ {
+ rel: 'stylesheet',
+ href: 'https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap',
+ },
+];
+
+export async function loader() {
+ const ssrConfig = installSSR();
+
+ return {
+ env: {
+ PLONE_API_PATH: ssrConfig.settings.apiPath,
+ PLONE_INTERNAL_API_PATH: ssrConfig.settings.internalApiPath,
+ },
+ };
+}
+
+export function Layout({ children }: { children: React.ReactNode }) {
+ const data = useLoaderData();
+ const indexLoaderData = useRouteLoaderData('index');
+ const contentLoaderData = useRouteLoaderData('content');
+ const contentData = indexLoaderData || contentLoaderData;
+
+ return (
+
+
+
+
+
+
+
+
+
+
+ {children}
+
+
+
+
+
+
+ );
+}
+
+export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) {
+ let message = 'Oops!';
+ let details = 'An unexpected error occurred.';
+ let stack: string | undefined;
+ if (isRouteErrorResponse(error)) {
+ message = error.status === 404 ? '404' : 'Error';
+ details =
+ error.status === 404
+ ? 'The requested page could not be found.'
+ : error.statusText || details;
+ } else if (import.meta.env.DEV && error && error instanceof Error) {
+ details = error.message;
+ stack = error.stack;
+ }
+
+ return (
+
+ {message}
+ {details}
+ {stack && (
+
+ {stack}
+
+ )}
+
+ );
+}
+
+declare global {
+ interface Window {
+ env: {
+ PLONE_API_PATH: string;
+ PLONE_INTERNAL_API_PATH: string;
+ };
+ }
+}
+
+export default function App() {
+ if (!import.meta.env.SSR) {
+ config.settings.apiPath = window.env.PLONE_API_PATH;
+ config.settings.internalApiPath = window.env.PLONE_INTERNAL_API_PATH;
+ }
+
+ const [queryClient] = useState(
+ () =>
+ new QueryClient({
+ defaultOptions: {
+ queries: {
+ // With SSR, we usually want to set some default staleTime
+ // above 0 to avoid refetching immediately on the client
+ staleTime: 60 * 1000,
+ },
+ },
+ }),
+ );
+
+ const [ploneClient] = useState(() =>
+ PloneClient.initialize({
+ apiPath: config.settings.apiPath,
+ }),
+ );
+
+ const navigate = useNavigate();
+
+ return (
+
+
+
+
+ );
+}
diff --git a/packages/seven/app/routes.ts b/packages/seven/app/routes.ts
new file mode 100644
index 0000000000..9f2ba5b06c
--- /dev/null
+++ b/packages/seven/app/routes.ts
@@ -0,0 +1,17 @@
+import type { RouteConfig } from '@react-router/dev/routes';
+import { index, route } from '@react-router/dev/routes';
+import { getAddonRoutesConfig } from '@plone/react-router';
+import config from '@plone/registry';
+// eslint-disable-next-line import/no-unresolved
+import applyAddonConfiguration, { addonsInfo } from '../.registry.loader';
+
+applyAddonConfiguration(config);
+
+const routes: RouteConfig = [
+ index('content.tsx', { id: 'index' }),
+ route('ok', 'okroute.tsx', { id: 'ok' }),
+ route('*', 'content.tsx', { id: 'content' }),
+ ...getAddonRoutesConfig(config.routes || [], addonsInfo),
+];
+
+export default routes;
diff --git a/packages/seven/app/utils.ts b/packages/seven/app/utils.ts
new file mode 100644
index 0000000000..64a05e9e5d
--- /dev/null
+++ b/packages/seven/app/utils.ts
@@ -0,0 +1,20 @@
+import config from '@plone/registry';
+
+/**
+ * Flatten to app server URL - Given a URL if it starts with the API server URL
+ * this method flattens it (removes) the server part
+ * TODO: Update it when implementing non-root based app location (on a
+ * directory other than /, eg. /myapp)
+ * @method flattenToAppURL
+ */
+export function flattenToAppURL(url: string | undefined): string | undefined {
+ const { settings } = config;
+
+ const result =
+ url &&
+ url
+ .replace(settings.apiPath, '')
+ .replace(settings.internalApiPath, '')
+ .replace('http://localhost:3000', '');
+ return result;
+}
diff --git a/packages/seven/cypress.config.js b/packages/seven/cypress.config.js
new file mode 100644
index 0000000000..1ffa5e690a
--- /dev/null
+++ b/packages/seven/cypress.config.js
@@ -0,0 +1,13 @@
+import { defineConfig } from 'cypress';
+
+export default defineConfig({
+ viewportWidth: 1280,
+ chromeWebSecurity: false,
+ projectId: 'hvviu4',
+ video: true, // To remove when Test Replay is available in cypress.io
+ e2e: {
+ baseUrl: 'http://127.0.0.1:3000',
+ excludeSpecPattern: ['*~'],
+ specPattern: 'cypress/tests/**/*.cy.{js,jsx,ts,tsx}',
+ },
+});
diff --git a/packages/seven/cypress/add-commands.js b/packages/seven/cypress/add-commands.js
new file mode 100644
index 0000000000..bc3a3f6c3e
--- /dev/null
+++ b/packages/seven/cypress/add-commands.js
@@ -0,0 +1,2 @@
+// This file is here so it's easy to import commands in other files.
+import './support/commands';
diff --git a/packages/seven/cypress/docker/seamless-rules.yml b/packages/seven/cypress/docker/seamless-rules.yml
new file mode 100644
index 0000000000..e7262ff4c9
--- /dev/null
+++ b/packages/seven/cypress/docker/seamless-rules.yml
@@ -0,0 +1,27 @@
+http:
+ routers:
+ frontend:
+ rule: "Host(`localhost`)"
+ service: frontend
+ backend:
+ rule: "Host(`localhost`) && PathPrefix(`/++api++`)"
+ service: backend
+ middlewares:
+ - backend
+
+ middlewares:
+ backend:
+ replacePathRegex:
+ regex: "^/\\+\\+api\\+\\+($|/.*)"
+ replacement: "/VirtualHostBase/http/localhost/plone/++api++/VirtualHostRoot$1"
+
+ services:
+ frontend:
+ loadBalancer:
+ servers:
+ - url: "http://host.docker.internal:3000"
+ backend:
+ loadBalancer:
+ servers:
+ - url: "http://host.docker.internal:55001"
+
diff --git a/packages/seven/cypress/docker/seamless.yml b/packages/seven/cypress/docker/seamless.yml
new file mode 100644
index 0000000000..d17b4ec4ae
--- /dev/null
+++ b/packages/seven/cypress/docker/seamless.yml
@@ -0,0 +1,24 @@
+version: "3.7"
+
+services:
+
+ proxy:
+ image: traefik:v2.8
+ command:
+ - "--api.insecure=true"
+ - "--providers.docker=true"
+ # - "--providers.docker.exposedbydefault=false"
+ - "--providers.file=true"
+ - "--providers.file.filename=/etc/traefik/rules.yml"
+ - "--entrypoints.web.address=:80"
+ - "--api.insecure=true"
+ # - "--accesslog=true"
+ # - "--log.level=DEBUG"
+ ports:
+ - 80:80
+ - "8888:8080"
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - ./seamless-rules.yml:/etc/traefik/rules.yml
+ extra_hosts:
+ - host.docker.internal:host-gateway
diff --git a/packages/seven/cypress/fixtures/broccoli.jpg b/packages/seven/cypress/fixtures/broccoli.jpg
new file mode 100644
index 0000000000..456706d662
Binary files /dev/null and b/packages/seven/cypress/fixtures/broccoli.jpg differ
diff --git a/packages/seven/cypress/fixtures/example.json b/packages/seven/cypress/fixtures/example.json
new file mode 100644
index 0000000000..02e4254378
--- /dev/null
+++ b/packages/seven/cypress/fixtures/example.json
@@ -0,0 +1,5 @@
+{
+ "name": "Using fixtures to represent data",
+ "email": "hello@cypress.io",
+ "body": "Fixtures are a great way to mock data for responses to routes"
+}
diff --git a/packages/seven/cypress/fixtures/file.pdf b/packages/seven/cypress/fixtures/file.pdf
new file mode 100644
index 0000000000..9d3abb3e22
Binary files /dev/null and b/packages/seven/cypress/fixtures/file.pdf differ
diff --git a/packages/seven/cypress/fixtures/halfdome2022.jpg b/packages/seven/cypress/fixtures/halfdome2022.jpg
new file mode 100644
index 0000000000..58c9411ca2
Binary files /dev/null and b/packages/seven/cypress/fixtures/halfdome2022.jpg differ
diff --git a/packages/seven/cypress/fixtures/image.png b/packages/seven/cypress/fixtures/image.png
new file mode 100644
index 0000000000..4c109bab8d
Binary files /dev/null and b/packages/seven/cypress/fixtures/image.png differ
diff --git a/packages/seven/cypress/helpers/index.js b/packages/seven/cypress/helpers/index.js
new file mode 100644
index 0000000000..243c220d57
--- /dev/null
+++ b/packages/seven/cypress/helpers/index.js
@@ -0,0 +1,13 @@
+export function getIfExists(
+ selector,
+ successAction = () => {},
+ failAction = () => {},
+) {
+ cy.get('body').then((body) => {
+ if (body.find(selector).length > 0 && successAction) {
+ successAction();
+ } else if (failAction) {
+ failAction();
+ }
+ });
+}
diff --git a/packages/seven/cypress/support/commands.js b/packages/seven/cypress/support/commands.js
new file mode 100644
index 0000000000..f8ba71f310
--- /dev/null
+++ b/packages/seven/cypress/support/commands.js
@@ -0,0 +1,969 @@
+/* eslint-disable no-console */
+import '@testing-library/cypress/add-commands';
+import { getIfExists } from '../helpers';
+import { ploneAuth } from './constants';
+
+const HOSTNAME = Cypress.env('BACKEND_HOST') || '127.0.0.1';
+const GUILLOTINA_API_URL = `http://${HOSTNAME}:8081/db/web`;
+const PLONE_SITE_ID = Cypress.env('SITE_ID') || 'plone';
+const PLONE_API_URL =
+ Cypress.env('API_PATH') || `http://${HOSTNAME}:55001/${PLONE_SITE_ID}`;
+
+const SLATE_SELECTOR = '.content-area .slate-editor [contenteditable=true]';
+const SLATE_TITLE_SELECTOR = '.block.inner.title [contenteditable="true"]';
+
+const TABLE_SLATE_SELECTOR =
+ '.celled.fixed.table tbody tr:nth-child(1) td:first-child() [contenteditable="true"]';
+const TABLE_HEAD_SLATE_SELECTOR =
+ '.celled.fixed.table thead tr th:first-child() [contenteditable="true"]';
+
+const ploneAuthObj = {
+ user: ploneAuth[0],
+ pass: ploneAuth[1],
+};
+
+// --- isInViewport ----------------------------------------------------------
+Cypress.Commands.add('isInViewport', (element) => {
+ cy.get(element).then(($el) => {
+ const windowInnerWidth = Cypress.config(`viewportWidth`);
+ const windowInnerHeight = Cypress.config(`viewportHeight`);
+ const rect = $el[0].getBoundingClientRect();
+
+ const rightBoundOfWindow = windowInnerWidth;
+ const bottomBoundOfWindow = windowInnerHeight;
+
+ expect(rect.top).to.be.at.least(0);
+ expect(rect.left).to.be.at.least(0);
+ expect(rect.right).to.be.lessThan(rightBoundOfWindow);
+ expect(rect.bottom).to.be.lessThan(bottomBoundOfWindow);
+ });
+});
+
+// --- isInHTML ----------------------------------------------------------
+Cypress.Commands.add('isInHTML', ({ parent = 'body', content }) => {
+ cy.url().then((currentUrl) => {
+ // sometimes the cy command is called when the url is still at content/edit
+ // we want to query the html markup of the content, not the edit form
+ const url =
+ currentUrl.indexOf('/edit') !== -1
+ ? currentUrl.split('/edit')[0]
+ : currentUrl;
+ cy.request({
+ method: 'GET',
+ url: url,
+ }).then((response) => {
+ const html = Cypress.$(response.body);
+ if (content.startsWith('.') || content.startsWith('#')) {
+ return expect(html.find(parent)).to.have.descendants(content);
+ } else {
+ // check if parent contains the content text string in its HTML output
+ return expect(html.find(parent)).to.contain(content);
+ }
+ });
+ });
+});
+
+// --- AUTOLOGIN -------------------------------------------------------------
+Cypress.Commands.add('autologin', (usr, pass) => {
+ let api_url, user, password;
+ if (Cypress.env('API') === 'guillotina') {
+ api_url = GUILLOTINA_API_URL;
+ user = usr || 'admin';
+ password = pass || 'admin';
+ } else {
+ api_url = PLONE_API_URL;
+ user = usr || ploneAuth[0];
+ password = pass || ploneAuth[1];
+ }
+
+ return cy
+ .request({
+ method: 'POST',
+ url: `${api_url}/@login`,
+ headers: { Accept: 'application/json' },
+ body: { login: user, password: password },
+ })
+ .then((response) => cy.setCookie('auth_token', response.body.token));
+});
+
+// --- CREATE CONTENT --------------------------------------------------------
+Cypress.Commands.add(
+ 'createContent',
+ ({
+ contentType,
+ contentId,
+ contentTitle,
+ contentDescription,
+ path = '',
+ allow_discussion = false,
+ transition = '',
+ bodyModifier = (body) => body,
+ image = false,
+ }) => {
+ let api_url, auth;
+ if (Cypress.env('API') === 'guillotina') {
+ api_url = GUILLOTINA_API_URL;
+ auth = {
+ user: 'root',
+ pass: 'root',
+ };
+ } else {
+ api_url = PLONE_API_URL;
+ auth = ploneAuthObj;
+ }
+
+ const defaultParams = {
+ method: 'POST',
+ url: `${api_url}/${path}`,
+ headers: {
+ Accept: 'application/json',
+ },
+ auth: auth,
+ body: {
+ '@type': contentType,
+ id: contentId,
+ title: contentTitle,
+ description: contentDescription,
+ allow_discussion: allow_discussion,
+ },
+ };
+
+ if (contentType === 'File') {
+ const params = {
+ ...defaultParams,
+ body: bodyModifier({
+ ...defaultParams.body,
+ file: {
+ data: 'dGVzdGZpbGUK',
+ encoding: 'base64',
+ filename: 'lorem.txt',
+ 'content-type': 'text/plain',
+ },
+ }),
+ };
+
+ return cy.request(params);
+ }
+ if (contentType === 'Image') {
+ const params = {
+ ...defaultParams,
+ body: bodyModifier({
+ ...defaultParams.body,
+ image: {
+ data: 'iVBORw0KGgoAAAANSUhEUgAAANcAAAA4CAMAAABZsZ3QAAAAM1BMVEX29fK42OU+oMvn7u9drtIPisHI4OhstdWZyt4fkcXX5+sAg74umMhNp86p0eJ7vNiKw9v/UV4wAAAAAXRSTlMAQObYZgAABBxJREFUeF7tmuty4yAMhZG4X2zn/Z92J5tsBJwWXG/i3XR6frW2Y/SBLIRAfaQUDNt8E5tLUt9BycfcKfq3R6Mlfyimtx4rzp+K3dtibXkor99zsEqLYZltblTecciogoh+TXfY1Ve4dn07rCDGG9dHSEEOg/GmXl0U1XDxTKxNK5De7BxsyyBr6gGm2/vPxKJ8F6f7BXKfRMp1xIWK9A+5ks25alSb353dWnDJN1k35EL5f8dVGifTf/4tjUuuFq7u4srmXC60yAmldLXIWbg65RKU87lcGxJCFqUPv0IacW0PmSivOZFLE908inPToMmii/roG+MRV/O8FU88i8tFsxV3a06MFUw0Qu7RmAtdV5/HVVaOVMTWNOWSwMljLhzhcB6XIS7OK5V6AvRDNN7t5VJWQs1J40UmalbK56usBG/CuCHSYuc+rkUGeMCViNRARPrzW52N3oQLe6WifNliSuuGaH3czbVNudI9s7ZLUCLHVwWlyES522o1t14uvmbblmVTKqFjaZYJFSTPP4dLL1kU1z7p0lzdbRulmEWLxoQX+z9ce7A8GqEEucllLxePuZwdJl1Lezu0hoswvTPt61DrFcRuujV/2cmlxaGBC7Aw6cpovGANwRiSdOAWJ5AGy4gLL64dl0QhUEAuEUNws+XxV+OKGPdw/hESGYF9XEGaFC7sNLMSXWJjHsnanYi87VK428N2uxpOjOFANcagLM5l+7mSycM8KknZpKLcGi6jmzWGr/vLurZ/0g4u9AZuAoeb5r1ceQhyiTPY1E4wUR6u/F3H2ojSpXMMriBPT9cezTto8Cx+MsglHL4fv1Rxrb1LVw9yvyQpJ3AhFnLZfuRLH2QsOG3FGGD20X/th/u5bFAt16Bt308KjF+MNOXgl/SquIEySX3GhaZvc67KZbDxcCDORz2N8yCWPaY5lyQZO7lQ29fnZbt3Xu6qoge4+DjXl/MocySPOp9rlvdyznahRyHEYd77v3LhugOXDv4J65QXfl803BDAdaWBEDhfVx7nKofjoVCgxnUAqw/UAUDPn788BDvQuG4TDtdtUPvzjSlXAB8DvaDOhhrmhwbywylXAm8CvaouikJTL93gs3y7Yy4VYbIxOHrcMizPqWOjqO9l3Uz52kibQy4xxOgqhJvD+w5rvokOcAlGvNCfeqCv1ste1stzLm0f71Iq3ZfTrPfuE5nhPtF+LvQE2lffQC7pYtQy3tdzdrKvd5TLVVzDetScS3nEKmmwDyt1Cev1kX3YfbvzNK4fzrlw+cB6vm+uiUgf2zdXI62241LawCb7Pi5FXFPF8KpzDoF/Sw2lg+GrHNbno1mhPu+VCF/vfMnw06PnUl6j48dVHD3jHNHPua+fc3o/5yp/zsGi0vYtzi3Pz5mHd4T6BWMIlewacd63AAAAAElFTkSuQmCC',
+ encoding: 'base64',
+ filename: 'image.png',
+ 'content-type': 'image/png',
+ },
+ }),
+ };
+
+ return cy.request(params);
+ }
+ if (
+ ['Document', 'News Item', 'Folder', 'CMSFolder'].includes(contentType)
+ ) {
+ const params = {
+ ...defaultParams,
+ body: {
+ ...defaultParams.body,
+ blocks: {
+ 'd3f1c443-583f-4e8e-a682-3bf25752a300': { '@type': 'title' },
+ '7624cf59-05d0-4055-8f55-5fd6597d84b0': { '@type': 'slate' },
+ },
+ blocks_layout: {
+ items: [
+ 'd3f1c443-583f-4e8e-a682-3bf25752a300',
+ '7624cf59-05d0-4055-8f55-5fd6597d84b0',
+ ],
+ },
+ },
+ };
+
+ if (image) {
+ let sourceFilename = 'cypress/fixtures/halfdome2022.jpg';
+ let imageObject = {
+ encoding: 'base64',
+ filename: 'image.jpg',
+ 'content-type': 'image/jpg',
+ };
+ if (typeof image === 'object') {
+ sourceFilename = image.sourceFilename;
+ imageObject = {
+ ...imageObject,
+ ...image,
+ };
+ }
+ cy.readFile(sourceFilename, 'base64').then((encodedImage) => {
+ const withImageParams = {
+ ...params,
+ body: bodyModifier({
+ ...params.body,
+ preview_image: {
+ ...imageObject,
+ data: encodedImage,
+ },
+ }),
+ };
+
+ return cy.request(withImageParams).then(() => {
+ if (transition) {
+ cy.setWorkflow({
+ path: path || contentId,
+ review_state: transition,
+ });
+ }
+ console.log(`${contentType} created`);
+ });
+ });
+ } else {
+ const documentParams = {
+ ...params,
+ body: bodyModifier({
+ ...params.body,
+ }),
+ };
+ return cy.request(documentParams).then(() => {
+ if (transition) {
+ cy.setWorkflow({
+ path: path || contentId,
+ review_state: transition,
+ });
+ }
+ console.log(`${contentType} created`);
+ });
+ }
+ } else {
+ return cy
+ .request({
+ method: 'POST',
+ url: `${api_url}/${path}`,
+ headers: {
+ Accept: 'application/json',
+ },
+ auth: auth,
+ body: bodyModifier({
+ '@type': contentType,
+ id: contentId,
+ title: contentTitle,
+ allow_discussion: allow_discussion,
+ }),
+ })
+ .then(() => {
+ if (transition) {
+ cy.setWorkflow({
+ path: path || contentId,
+ review_state: transition,
+ });
+ }
+ console.log(`${contentType} created`);
+ });
+ }
+ },
+);
+
+// Remove content
+Cypress.Commands.add('removeContent', ({ path = '' }) => {
+ let api_url, auth;
+ if (Cypress.env('API') === 'guillotina') {
+ api_url = GUILLOTINA_API_URL;
+ auth = {
+ user: 'root',
+ pass: 'root',
+ };
+ } else {
+ api_url = PLONE_API_URL;
+ auth = ploneAuthObj;
+ }
+
+ return cy.request({
+ method: 'DELETE',
+ url: `${api_url}/${path}`,
+ headers: {
+ Accept: 'application/json',
+ },
+ auth: auth,
+ });
+});
+
+// Get content
+Cypress.Commands.add('getContent', ({ path = '' }) => {
+ let api_url, auth;
+ if (Cypress.env('API') === 'guillotina') {
+ api_url = GUILLOTINA_API_URL;
+ auth = {
+ user: 'root',
+ pass: 'root',
+ };
+ } else {
+ api_url = PLONE_API_URL;
+ auth = ploneAuthObj;
+ }
+
+ return cy.request({
+ method: 'get',
+ url: `${api_url}/${path}`,
+ headers: {
+ Accept: 'application/json',
+ },
+ auth: auth,
+ });
+});
+
+// --- Add DX Content-Type ----------------------------------------------------------
+Cypress.Commands.add('addContentType', (name) => {
+ let api_url, auth;
+ api_url = Cypress.env('API_PATH') || 'http://127.0.0.1:8080/Plone';
+ auth = ploneAuthObj;
+
+ return cy
+ .request({
+ method: 'POST',
+ url: `${api_url}/@controlpanels/dexterity-types/${name}`,
+ headers: {
+ Accept: 'application/json',
+ },
+ auth: auth,
+ body: {
+ title: name,
+ },
+ })
+ .then(() => console.log(`${name} content-type added.`));
+});
+
+// --- Remove DX behavior ----------------------------------------------------------
+Cypress.Commands.add('removeContentType', (name) => {
+ let api_url, auth;
+ api_url = Cypress.env('API_PATH') || 'http://127.0.0.1:8080/Plone';
+ auth = ploneAuthObj;
+
+ return cy
+ .request({
+ method: 'DELETE',
+ url: `${api_url}/@controlpanels/dexterity-types/${name}`,
+ headers: {
+ Accept: 'application/json',
+ },
+ auth: auth,
+ body: {},
+ })
+ .then(() => console.log(`${name} content-type removed.`));
+});
+
+// --- Add DX field ----------------------------------------------------------
+Cypress.Commands.add('addSlateJSONField', (type, name) => {
+ let api_url, auth;
+ api_url = Cypress.env('API_PATH') || 'http://127.0.0.1:8080/Plone';
+ auth = ploneAuthObj;
+
+ return cy
+ .request({
+ method: 'POST',
+ url: `${api_url}/@types/${type}`,
+ headers: {
+ Accept: 'application/json',
+ },
+ auth: auth,
+ body: {
+ id: name,
+ title: name,
+ description: 'Slate JSON Field',
+ factory: 'SlateJSONField',
+ required: false,
+ },
+ })
+ .then(() => console.log(`${name} SlateJSONField field added to ${type}`));
+});
+
+// --- Remove DX field ----------------------------------------------------------
+Cypress.Commands.add('removeSlateJSONField', (type, name) => {
+ let api_url, auth;
+ api_url = Cypress.env('API_PATH') || 'http://127.0.0.1:8080/Plone';
+ auth = ploneAuthObj;
+
+ return cy
+ .request({
+ method: 'DELETE',
+ url: `${api_url}/@types/${type}/${name}`,
+ headers: {
+ Accept: 'application/json',
+ },
+ auth: auth,
+ body: {},
+ })
+ .then(() =>
+ console.log(`${name} SlateJSONField field removed from ${type}`),
+ );
+});
+
+// --- CREATE USER --------------------------------------------------------
+Cypress.Commands.add(
+ 'createUser',
+ ({
+ username = 'editor',
+ fullname = 'editor',
+ email = 'editor@local.dev',
+ password = 'password',
+ roles = ['Member', 'Reader', 'Editor'],
+ groups = {
+ '@id': 'http://127.0.0.1:3000/@users',
+ items: [
+ {
+ id: 'AuthenticatedUsers',
+ title: 'AuthenticatedUsers',
+ },
+ ],
+ items_total: 1,
+ },
+ }) => {
+ let api_url, auth, path;
+ if (Cypress.env('API') === 'guillotina') {
+ api_url = GUILLOTINA_API_URL;
+ auth = {
+ user: 'root',
+ pass: 'root',
+ };
+ path = 'users';
+ } else {
+ api_url = PLONE_API_URL;
+ auth = ploneAuthObj;
+ path = '@users';
+ }
+
+ return cy
+ .request({
+ method: 'POST',
+ url: `${api_url}/${path}`,
+ headers: {
+ Accept: 'application/json',
+ },
+ auth: auth,
+ body: {
+ '@type': 'User',
+ username: username,
+ fullname: fullname,
+ email: email,
+ password: password,
+ roles: roles,
+ groups: groups,
+ },
+ })
+ .then(() => console.log(`User ${username} created`));
+ },
+);
+
+// Remove user
+Cypress.Commands.add('removeUser', (username = 'editor') => {
+ let api_url, auth, path;
+ if (Cypress.env('API') === 'guillotina') {
+ api_url = GUILLOTINA_API_URL;
+ auth = {
+ user: 'root',
+ pass: 'root',
+ };
+ path = 'users';
+ } else {
+ api_url = PLONE_API_URL;
+ auth = ploneAuthObj;
+ path = '@users';
+ }
+
+ return cy
+ .request({
+ method: 'DELETE',
+ url: `${api_url}/${path}/${username}`,
+ headers: {
+ Accept: 'application/json',
+ },
+ auth: auth,
+ })
+ .then(() => console.log(`User ${username} removed`));
+});
+
+// --- GROUP -----------------------------------------------------------------
+
+Cypress.Commands.add(
+ 'createGroup',
+ ({
+ groupname = 'teachers',
+ email = 'teachers@local.dev',
+ password = ploneAuth[1],
+ roles = ['Member', 'Reader'],
+ users = {
+ '@id': 'http://127.0.0.1:3000/@groups',
+ items: [],
+ items_total: 0,
+ },
+ }) => {
+ let api_url, auth, path;
+ if (Cypress.env('API') === 'guillotina') {
+ api_url = GUILLOTINA_API_URL;
+ auth = {
+ user: 'root',
+ pass: 'root',
+ };
+ path = 'groups';
+ } else {
+ api_url = PLONE_API_URL;
+ auth = ploneAuthObj;
+ path = '@groups';
+ }
+
+ return cy
+ .request({
+ method: 'POST',
+ url: `${api_url}/${path}`,
+ headers: {
+ Accept: 'application/json',
+ },
+ auth: auth,
+ body: {
+ '@type': 'Group',
+ groupname: groupname,
+ email: email,
+ password: password,
+ roles: roles,
+ users: users,
+ },
+ })
+ .then(() => console.log(`Group ${groupname} created`));
+ },
+);
+
+// --- SET WORKFLOW ----------------------------------------------------------
+Cypress.Commands.add(
+ 'setWorkflow',
+ ({
+ path = '/',
+ actor = 'admin',
+ review_state = 'publish',
+ time = '1995-07-31T18:30:00',
+ title = '',
+ comment = '',
+ effective = '2018-01-21T08:00:00',
+ expires = '2019-01-21T08:00:00',
+ include_children = true,
+ }) => {
+ let api_url, auth;
+ api_url = PLONE_API_URL;
+ auth = ploneAuthObj;
+ return cy.request({
+ method: 'POST',
+ url: `${api_url}/${path}/@workflow/${review_state}`,
+ headers: {
+ Accept: 'application/json',
+ },
+ auth: auth,
+ body: {
+ actor: actor,
+ review_state: review_state,
+ time: time,
+ title: title,
+ comment: comment,
+ effective: effective,
+ expires: expires,
+ include_children: include_children,
+ },
+ });
+ },
+);
+
+Cypress.Commands.add('waitForResourceToLoad', (fileName, type) => {
+ const resourceCheckInterval = 40;
+ const maxChecks = 50;
+ const count = [0];
+
+ return new Cypress.Promise((resolve) => {
+ const checkIfResourceHasBeenLoaded = () => {
+ const resource = cy
+ .state('window')
+ .performance.getEntriesByType('resource')
+ .filter((entry) => !type || entry.initiatorType === type)
+ .find((entry) => entry.name.includes(fileName));
+
+ if (resource) {
+ resolve();
+
+ return;
+ }
+
+ count[0] += 1;
+ const tid = setTimeout(
+ checkIfResourceHasBeenLoaded,
+ resourceCheckInterval,
+ );
+
+ if (count[0] > maxChecks) {
+ clearTimeout(tid);
+ throw new Error(
+ `Timeout resolving resource: ${fileName} (type ${type})`,
+ );
+ }
+ };
+
+ checkIfResourceHasBeenLoaded();
+ });
+});
+
+// --- CREATE CONTENT --------------------------------------------------------
+Cypress.Commands.add('setRegistry', (record, value) => {
+ let api_url, auth;
+ api_url = PLONE_API_URL;
+ auth = ploneAuthObj;
+
+ return cy.request({
+ method: 'PATCH',
+ url: `${api_url}/@registry/`,
+ headers: {
+ Accept: 'application/json',
+ },
+ auth: auth,
+ body: {
+ [record]: value,
+ },
+ });
+});
+
+// Low level command reused by `setSelection` and low level command `setCursor`
+Cypress.Commands.add('selection', { prevSubject: true }, (subject, fn) => {
+ cy.wrap(subject)
+ .trigger('mousedown')
+ .wait(1000) //multiple waits between selecting the text to ensure toolbar is visible.
+ .then(fn)
+ .wait(1000)
+ .trigger('mouseup');
+
+ cy.document().trigger('selectionchange');
+ return cy.wrap(subject);
+});
+
+Cypress.Commands.add(
+ 'setSelection',
+ { prevSubject: true },
+ (subject, query, endQuery) => {
+ return cy.wrap(subject).selection(($el) => {
+ if (typeof query === 'string') {
+ const anchorNode = getTextNode($el[0], query);
+ const focusNode = endQuery ? getTextNode($el[0], endQuery) : anchorNode;
+ const anchorOffset = anchorNode.wholeText.indexOf(query);
+ const focusOffset = endQuery
+ ? focusNode.wholeText.indexOf(endQuery) + endQuery.length
+ : anchorOffset + query.length;
+ setBaseAndExtent(anchorNode, anchorOffset, focusNode, focusOffset);
+ } else if (typeof query === 'object') {
+ const el = $el[0];
+ const anchorNode = getTextNode(el.querySelector(query.anchorQuery));
+ const anchorOffset = query.anchorOffset || 0;
+ const focusNode = query.focusQuery
+ ? getTextNode(el.querySelector(query.focusQuery))
+ : anchorNode;
+ const focusOffset = query.focusOffset || 0;
+ setBaseAndExtent(anchorNode, anchorOffset, focusNode, focusOffset);
+ }
+ });
+ },
+);
+
+// Low level command reused by `setCursorBefore` and `setCursorAfter`, equal to `setCursorAfter`
+Cypress.Commands.add(
+ 'setCursor',
+ { prevSubject: true },
+ (subject, query, atStart) => {
+ return cy.wrap(subject).selection(($el) => {
+ const node = getTextNode($el[0], query);
+ const offset =
+ node.wholeText.indexOf(query) + (atStart ? 0 : query.length);
+ const document = node.ownerDocument;
+ document.getSelection().removeAllRanges();
+ document.getSelection().collapse(node, offset);
+ });
+ // Depending on what you're testing, you may need to chain a `.click()` here to ensure
+ // further commands are picked up by whatever you're testing (this was required for Slate, for example).
+ },
+);
+
+Cypress.Commands.add(
+ 'setCursorBefore',
+ { prevSubject: true },
+ (subject, query) => {
+ cy.wrap(subject).setCursor(query, true);
+ },
+);
+
+Cypress.Commands.add(
+ 'setCursorAfter',
+ { prevSubject: true },
+ (subject, query) => {
+ cy.wrap(subject).setCursor(query);
+ },
+);
+
+Cypress.Commands.add(
+ 'pasteClipboard',
+ { prevSubject: true },
+ (query, htmlContent) => {
+ return cy.wrap(query).trigger('paste', createHtmlPasteEvent(htmlContent));
+ },
+);
+
+Cypress.Commands.add('toolbarSave', () => {
+ // Save
+ cy.get('#toolbar-save', { timeout: 10000 }).click();
+ cy.waitForResourceToLoad('');
+});
+
+Cypress.Commands.add('clearSlate', (selector) => {
+ return cy
+ .get(selector)
+ .focus()
+ .click({ force: true })
+ .type('{selectAll}', { delay: 20 })
+ .type('{backspace}', { delay: 20 })
+ .wait(200);
+});
+
+Cypress.Commands.add('getSlate', (createNewSlate = false) => {
+ let slate;
+ if (createNewSlate) {
+ cy.get('.block.inner').last().type('{moveToEnd}{enter}');
+ }
+ cy.getIfExists(
+ SLATE_SELECTOR,
+ () => {
+ slate = cy.get(SLATE_SELECTOR).last();
+ },
+ () => {
+ slate = cy.get(SLATE_SELECTOR, { timeout: 10000 }).last();
+ },
+ );
+ return slate;
+});
+
+Cypress.Commands.add('getSlateSelector', (selector = SLATE_SELECTOR) => {
+ let slate;
+ cy.getIfExists(
+ selector,
+ () => {
+ slate = cy.get(selector).last();
+ },
+ () => {
+ slate = cy.get(selector, { timeout: 10000 }).last();
+ },
+ );
+ return slate;
+});
+
+Cypress.Commands.add('getSlateTitle', () => {
+ return cy.get(SLATE_TITLE_SELECTOR, {
+ timeout: 10000,
+ });
+});
+
+Cypress.Commands.add('clearSlateTitle', () => {
+ return cy.clearSlate(SLATE_TITLE_SELECTOR);
+});
+
+// Slate commands
+Cypress.Commands.add('typeInSlate', { prevSubject: true }, (subject, text) => {
+ return (
+ cy
+ .wrap(subject)
+ .then((subject) => {
+ subject[0].dispatchEvent(
+ new InputEvent('beforeinput', {
+ inputType: 'insertText',
+ data: text,
+ }),
+ );
+ return subject;
+ })
+ // TODO: do this only for Electron-based browser which does not understand instantaneously
+ // that the user inserted some text in the block
+ .wait(1000)
+ );
+});
+
+Cypress.Commands.add(
+ 'typeWithDelay',
+ { prevSubject: 'element' },
+ (subject, text, options) => {
+ const delay = options && options.delay ? options.delay : 20;
+ cy.wrap(subject).type(text, { delay });
+ },
+);
+
+Cypress.Commands.add('lineBreakInSlate', { prevSubject: true }, (subject) => {
+ return (
+ cy
+ .wrap(subject)
+ .then((subject) => {
+ subject[0].dispatchEvent(
+ new InputEvent('beforeinput', { inputType: 'insertLineBreak' }),
+ );
+ return subject;
+ })
+ // TODO: do this only for Electron-based browser which does not understand instantaneously
+ // that the block was split
+ .wait(1000)
+ );
+});
+
+Cypress.Commands.add(
+ 'setSlateSelection',
+ (subject, query, endQuery, wait = 1000) => {
+ cy.get('.slate-editor.selected [contenteditable=true]')
+ .focus()
+ // .click()
+ .setSelection(subject, query, endQuery)
+ .wait(wait); // this wait is needed for the selection change to be detected after
+ },
+);
+
+Cypress.Commands.add('getSlateEditorAndType', (type) => {
+ cy.getSlate().focus().click().type(type);
+});
+
+Cypress.Commands.add('getSlateEditorSelectorAndType', (selector, type) => {
+ cy.getSlateSelector(selector).focus().click().type(type);
+});
+
+Cypress.Commands.add('setSlateCursor', (subject, query, endQuery) => {
+ cy.get('.slate-editor.selected [contenteditable=true]')
+ .focus()
+ .click()
+ .setCursor(subject, query, endQuery)
+ .wait(1000); // this wait is needed for the selection change to be detected after
+});
+
+Cypress.Commands.add('clickSlateButton', (button, timeout = 1000) => {
+ cy.get(`.slate-inline-toolbar .button-wrapper a[title="${button}"]`, {
+ timeout,
+ }).click({ force: true }); // force click is needed to ensure the button in visible in view.
+});
+
+// Helper functions
+function getTextNode(el, match) {
+ const walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false);
+ if (!match) {
+ return walk.nextNode();
+ }
+
+ let node;
+ while ((node = walk.nextNode())) {
+ if (node.wholeText.includes(match)) {
+ return node;
+ }
+ }
+}
+
+function setBaseAndExtent(...args) {
+ const document = args[0].ownerDocument;
+ document.getSelection().removeAllRanges();
+ document.getSelection().setBaseAndExtent(...args);
+}
+
+function createHtmlPasteEvent(htmlContent) {
+ return Object.assign(
+ new Event('paste', { bubbles: true, cancelable: true }),
+ {
+ clipboardData: {
+ getData: () => htmlContent,
+ types: ['text/html'],
+ },
+ },
+ );
+}
+
+Cypress.Commands.add('addNewBlock', (blockName, createNewSlate = false) => {
+ let block;
+ block = cy.getSlate(createNewSlate).click().type(`/${blockName}{enter}`);
+ return block;
+});
+
+Cypress.Commands.add('navigate', (route = '') => {
+ cy.intercept('GET', '**/*').as('navGetCall');
+ cy.window().its('appHistory').invoke('push', route);
+ cy.wait('@navGetCall');
+});
+
+Cypress.Commands.add('store', () => {
+ return cy.window().its('store').invoke('getStore', '');
+});
+
+Cypress.Commands.add('settings', (key, value) => {
+ return cy.window().its('settings');
+});
+Cypress.Commands.add('getIfExists', getIfExists);
+
+Cypress.Commands.add('getTableSlate', (header = false) => {
+ let slate;
+
+ cy.addNewBlock('table');
+ cy.wait(2000);
+
+ const selector = header ? TABLE_HEAD_SLATE_SELECTOR : TABLE_SLATE_SELECTOR;
+
+ cy.getIfExists(
+ selector,
+ () => {
+ slate = cy.get(selector).last();
+ },
+ () => {
+ slate = cy.get(selector, { timeout: 10000 }).last();
+ },
+ );
+ return slate;
+});
+
+Cypress.Commands.add('configureListingWith', (contentType) => {
+ cy.get('.sidebar-container .tabs-wrapper .menu .item')
+ .contains('Block')
+ .click();
+ cy.get('.querystring-widget .fields').contains('Add criteria').click();
+ cy.get(
+ '.querystring-widget .fields:first-of-type .field:first-of-type .react-select__menu .react-select__option',
+ )
+ .contains('Type')
+ .click();
+
+ //insert Page
+ cy.get('.querystring-widget .fields:first-of-type > .field').click();
+ cy.get(
+ '.querystring-widget .fields:first-of-type > .field .react-select__menu .react-select__option',
+ )
+ .contains(contentType)
+
+ .click();
+});
+
+Cypress.Commands.add(
+ 'addLocationQuerystring',
+ (option = 'Relative path', value) => {
+ cy.get('.block-editor-listing').click();
+ cy.get('.querystring-widget .fields').contains('Add criteria').click();
+ cy.get('.querystring-widget .react-select__menu .react-select__option')
+ .contains('Location')
+ .click();
+
+ cy.get('.querystring-widget .fields').contains('Absolute path').click();
+ cy.get(
+ '.querystring-widget .fields .react-select__menu .react-select__option',
+ )
+ .contains(option)
+ .click();
+ if (value) {
+ cy.get('.querystring-widget .fields .input')
+ .click()
+ .type(`${value}{enter}`);
+ }
+ },
+);
+
+Cypress.Commands.add('queryCounter', (path, steps, number = 1) => {
+ cy.intercept(path, cy.spy().as('counterName'));
+ steps.forEach((element) => {
+ element();
+ });
+
+ cy.get('@counterName').its('callCount').should('equal', number);
+});
diff --git a/packages/seven/cypress/support/constants.js b/packages/seven/cypress/support/constants.js
new file mode 100644
index 0000000000..4cdc2876dc
--- /dev/null
+++ b/packages/seven/cypress/support/constants.js
@@ -0,0 +1 @@
+export const ploneAuth = ['admin', 'secret'];
diff --git a/packages/seven/cypress/support/e2e.js b/packages/seven/cypress/support/e2e.js
new file mode 100644
index 0000000000..09b412d1bb
--- /dev/null
+++ b/packages/seven/cypress/support/e2e.js
@@ -0,0 +1,53 @@
+import '@testing-library/cypress/add-commands';
+import 'cypress-axe';
+import 'cypress-file-upload';
+import './commands';
+import { setupGuillotina, tearDownGuillotina } from './guillotina';
+import { setup, teardown } from './reset-fixture';
+
+Cypress.on('uncaught:exception', (err) => {
+ // We are getting this error in Cypress tests but we don't use ResizeObserver ourselves
+ if (/ResizeObserver loop/.test(err.message)) {
+ // returning false here prevents Cypress from
+ // failing the test
+ return false;
+ }
+});
+
+Cypress.on('uncaught:exception', (err) => {
+ // Cypress and React Hydrating the document don't get along
+ // for some unknown reason. Hopefully, we figure out why eventually
+ // so we can remove this.
+ if (
+ /hydrat/i.test(err.message) ||
+ /Minified React error #418/.test(err.message) ||
+ /Minified React error #423/.test(err.message)
+ ) {
+ return false;
+ }
+});
+
+before(function () {
+ if (Cypress.env('API') === 'guillotina') {
+ tearDownGuillotina({ allowFail: true });
+ }
+});
+
+beforeEach(function () {
+ cy.log('Setting up API fixture');
+ if (Cypress.env('API') === 'guillotina') {
+ setupGuillotina();
+ } else {
+ setup();
+ }
+});
+
+afterEach(function () {
+ cy.log('Tearing down API fixture');
+ if (Cypress.env('API') === 'guillotina') {
+ cy.clearCookies();
+ tearDownGuillotina();
+ } else {
+ teardown();
+ }
+});
diff --git a/packages/seven/cypress/support/guillotina.js b/packages/seven/cypress/support/guillotina.js
new file mode 100644
index 0000000000..f8f9275e3f
--- /dev/null
+++ b/packages/seven/cypress/support/guillotina.js
@@ -0,0 +1,73 @@
+export function setupGuillotina() {
+ const headers = {
+ Authorization: 'Basic cm9vdDpyb290',
+ 'Content-Type': 'application/json',
+ };
+ const api_url = 'http://127.0.0.1:8081/db';
+
+ cy.request({
+ method: 'POST',
+ url: api_url,
+ headers,
+ body: { '@type': 'Site', id: 'web', title: 'Guillotina Volto Site' },
+ }).then((response) => console.log('web container created'));
+
+ cy.request({
+ method: 'POST',
+ url: `${api_url}/web/@addons`,
+ headers,
+ body: { id: 'cms' },
+ }).then((response) => console.log('cms add-on installed'));
+
+ cy.request({
+ method: 'POST',
+ url: `${api_url}/web/@addons`,
+ headers,
+ body: { id: 'dbusers' },
+ }).then((response) => console.log('dbusers add-on installed'));
+
+ // Create manager group
+ cy.request({
+ method: 'POST',
+ url: `${api_url}/web/groups`,
+ headers,
+ body: {
+ id: 'managers',
+ '@type': 'Group',
+ user_roles: [
+ 'guillotina.Manager',
+ 'guillotina.ContainerAdmin',
+ 'guillotina.Owner',
+ ],
+ },
+ }).then((response) => console.log('managers group created'));
+
+ // create admin user
+ cy.request({
+ method: 'POST',
+ url: `${api_url}/web/users`,
+ headers,
+ body: {
+ '@type': 'User',
+ username: 'admin',
+ email: 'foo@bar.com',
+ password: 'admin',
+ user_groups: ['managers'],
+ },
+ }).then((response) => console.log('default user created'));
+}
+
+export function tearDownGuillotina({ allowFail = false } = {}) {
+ const headers = {
+ Authorization: 'Basic cm9vdDpyb290',
+ 'Content-Type': 'application/json',
+ };
+ const api_url = 'http://127.0.0.1:8081/db';
+
+ cy.request({
+ method: 'DELETE',
+ url: `${api_url}/web`,
+ headers,
+ ...(allowFail && { failOnStatusCode: false }),
+ }).then((response) => console.log('container deleted'));
+}
diff --git a/packages/seven/cypress/support/helpers.js b/packages/seven/cypress/support/helpers.js
new file mode 100644
index 0000000000..046ccce0ac
--- /dev/null
+++ b/packages/seven/cypress/support/helpers.js
@@ -0,0 +1 @@
+export * from './volto-slate';
diff --git a/packages/seven/cypress/support/reset-fixture.js b/packages/seven/cypress/support/reset-fixture.js
new file mode 100644
index 0000000000..21d2152970
--- /dev/null
+++ b/packages/seven/cypress/support/reset-fixture.js
@@ -0,0 +1,43 @@
+function setup() {
+ const api_url = Cypress.env('API_PATH') || 'http://127.0.0.1:55001/plone';
+ cy.request({
+ method: 'POST',
+ url: `${api_url}/RobotRemote`,
+ headers: { Accept: 'text/xml', 'content-type': 'text/xml' },
+ body: 'run_keywordremote_zodb_setupplone.app.robotframework.testing.PLONE_ROBOT_TESTING',
+ }).then(() => cy.log('Setting up API fixture'));
+}
+
+function teardown() {
+ const api_url = Cypress.env('API_PATH') || 'http://127.0.0.1:55001/plone';
+ cy.request({
+ method: 'POST',
+ url: `${api_url}/RobotRemote`,
+ headers: { Accept: 'text/xml', 'content-type': 'text/xml' },
+ body: 'run_keywordremote_zodb_teardownplone.app.robotframework.testing.PLONE_ROBOT_TESTING',
+ }).then(() => cy.log('Tearing down API fixture'));
+}
+
+function main() {
+ const command = process.argv[2];
+ switch (command) {
+ case 'setup':
+ setup();
+ break;
+ case 'teardown':
+ teardown();
+ break;
+ default:
+ setup();
+ }
+}
+
+// This is the equivalent of `if __name__ == '__main__'` in Python :)
+if (require.main === module) {
+ main();
+}
+
+module.exports = {
+ setup,
+ teardown,
+};
diff --git a/packages/seven/cypress/support/upgradetests.js b/packages/seven/cypress/support/upgradetests.js
new file mode 100644
index 0000000000..03205a9c70
--- /dev/null
+++ b/packages/seven/cypress/support/upgradetests.js
@@ -0,0 +1,82 @@
+export const getsystemNeedsUpgrade = {
+ '@id': 'http://localhost:3000/@system',
+ cmf_version: '2.6.0',
+ debug_mode: 'No',
+ pil_version: '9.2.0 (Pillow)',
+ plone_gs_metadata_version_file_system: '6008',
+ plone_gs_metadata_version_installed: '6006',
+ plone_restapi_version: '8.32.0',
+ plone_version: '6.0.0',
+ python_version:
+ '3.9.14 (main, Sep 13 2022, 03:20:56) \n[GCC 10.2.1 20210110]',
+ upgrade: true,
+ zope_version: '5.6',
+};
+
+export const getUpgradeNeedsUpgrade = {
+ '@id': 'http://localhost:3000/@upgrade',
+ upgrade_steps: {
+ '6006-6007': [
+ {
+ id: 'cb3b910894ab80c94b6367b39bc93039',
+ title: 'Run to6007 upgrade profile.',
+ },
+ {
+ id: 'bb72e6a5b0c9c6131b1efad155868131',
+ title: 'Add a timezone property to portal memberdata if it is missing.',
+ },
+ {
+ id: '62ef4eea9b3bfbd472cf349277de749b',
+ title: 'Fix the portal action icons.',
+ },
+ {
+ id: 'bac1428c12e294517042a1cee5cfabdc',
+ title:
+ 'Rename the behavior collective.dexteritytextindexer to plone.textindexer',
+ },
+ ],
+ '6007-6008': [
+ {
+ id: 'e5cad1e9fd65e8bd1b23519d49417e51',
+ title: 'Update plonetheme.barceloneta registry',
+ },
+ ],
+ },
+ versions: {
+ fs: '6008',
+ instance: '6006',
+ },
+};
+
+export const postUpgradeDryRun = {
+ '@id': 'http://localhost:3000/@upgrade',
+ dry_run: false,
+ report:
+ 'Starting the migration from version: 6006\nRole / permission map imported.\nActions tool imported.\nRan upgrade step: Run to6007 upgrade profile.\nRan upgrade step: Add a timezone property to portal memberdata if it is missing.\nRan upgrade step: Fix the portal action icons.\nRan upgrade step: Rename the behavior collective.dexteritytextindexer to plone.textindexer\nRan upgrade step: Update plonetheme.barceloneta registry\nEnd of upgrade path, main migration has finished.\nStarting upgrade of core addons.\nControl panel imported.\nDone upgrading core addons.\nYour Plone instance is now up-to-date.\n',
+ upgraded: true,
+ versions: {
+ fs: '6008',
+ instance: '6008',
+ },
+};
+
+export const postUpgrade = {
+ '@id': 'http://localhost:3000/@upgrade',
+ dry_run: false,
+ report:
+ 'Starting the migration from version: 6008\nEnd of upgrade path, main migration has finished.\nStarting upgrade of core addons.\nDone upgrading core addons.\nYour Plone instance is now up-to-date.\n',
+ upgraded: true,
+ versions: {
+ fs: '6008',
+ instance: '6008',
+ },
+};
+
+export const getUpgradeSiteUpgraded = {
+ '@id': 'http://localhost:3000/@upgrade',
+ upgrade_steps: {},
+ versions: {
+ fs: '6008',
+ instance: '6008',
+ },
+};
diff --git a/packages/seven/cypress/support/volto-slate.js b/packages/seven/cypress/support/volto-slate.js
new file mode 100644
index 0000000000..e2a59ef8a9
--- /dev/null
+++ b/packages/seven/cypress/support/volto-slate.js
@@ -0,0 +1,81 @@
+export const slateBeforeEach = (contentType = 'Document') => {
+ cy.intercept('GET', `/**/*?expand*`).as('content');
+ cy.autologin();
+ cy.createContent({
+ contentType: contentType,
+ contentId: 'my-page',
+ contentTitle: 'My Page',
+ });
+ cy.visit('/my-page');
+ cy.wait('@content');
+
+ cy.navigate('/my-page/edit');
+ cy.wait('@content');
+};
+
+export const getSelectedSlateEditor = () => {
+ return cy.get('.slate-editor.selected [contenteditable=true]').click();
+};
+
+export const createSlateBlock = () => {
+ cy.get('.ui.basic.icon.button.block-add-button').first().click();
+ cy.get('.blocks-chooser .title').contains('Text').click();
+ cy.get('.ui.basic.icon.button.slate').contains('Text').click();
+ return getSelectedSlateEditor();
+};
+
+export const getSlateBlockValue = (sb) => {
+ return sb.invoke('attr', 'data-slate-value').then((str) => {
+ return typeof str === 'undefined' ? [] : JSON.parse(str);
+ });
+};
+
+export const createSlateBlockWithList = ({
+ numbered,
+ firstItemText,
+ secondItemText,
+}) => {
+ let s1 = createSlateBlock();
+
+ s1.typeInSlate(firstItemText + secondItemText);
+
+ // select all contents of slate block
+ // - this opens hovering toolbar
+ cy.contains(firstItemText + secondItemText).then((el) => {
+ selectSlateNodeOfWord(el);
+ });
+
+ // TODO: do not hardcode these selectors:
+ if (numbered) {
+ // this is the numbered list option in the hovering toolbar
+ cy.get('.slate-inline-toolbar > :nth-child(9)').click();
+ } else {
+ // this is the bulleted list option in the hovering toolbar
+ cy.get('.slate-inline-toolbar > :nth-child(10)').click();
+ }
+
+ // move the text cursor
+ const sse = getSelectedSlateEditor();
+ sse.type('{leftarrow}');
+ for (let i = 0; i < firstItemText.length; ++i) {
+ sse.type('{rightarrow}');
+ }
+
+ // simulate pressing Enter
+ getSelectedSlateEditor().lineBreakInSlate();
+
+ return s1;
+};
+
+export const selectSlateNodeOfWord = (el) => {
+ return cy.window().then((win) => {
+ var event = new CustomEvent('Test_SelectWord', {
+ detail: el[0],
+ });
+ win.document.dispatchEvent(event);
+ });
+};
+
+export const getSlateEditorAndType = (selector, type) => {
+ return cy.get(selector).focus().click().wait(1000).type(type).wait(1000);
+};
diff --git a/packages/seven/cypress/tests/core/basic/basic.cy.ts b/packages/seven/cypress/tests/core/basic/basic.cy.ts
new file mode 100644
index 0000000000..8dcc86dac6
--- /dev/null
+++ b/packages/seven/cypress/tests/core/basic/basic.cy.ts
@@ -0,0 +1,12 @@
+describe('Basic Cypress Test', () => {
+ it('should visit the root URL', () => {
+ cy.visit('/');
+ cy.url().should('eq', Cypress.config().baseUrl + '/');
+ cy.contains('Welcome to Plone 6');
+ });
+
+ it('html tag has the lang attr', () => {
+ cy.visit('/');
+ cy.get('html').should('have.attr', 'lang', 'en');
+ });
+});
diff --git a/packages/seven/cypress/tsconfig.json b/packages/seven/cypress/tsconfig.json
new file mode 100644
index 0000000000..18edb199ac
--- /dev/null
+++ b/packages/seven/cypress/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "lib": ["es5", "dom"],
+ "types": ["cypress", "node"]
+ },
+ "include": ["**/*.ts"]
+}
diff --git a/packages/seven/news/.gitkeep b/packages/seven/news/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/packages/seven/news/6599.feature b/packages/seven/news/6599.feature
new file mode 100644
index 0000000000..cb07cc700e
--- /dev/null
+++ b/packages/seven/news/6599.feature
@@ -0,0 +1 @@
+Initial push of the package holding the Plone 7 codebase. @sneridagh
diff --git a/packages/seven/package.json b/packages/seven/package.json
new file mode 100644
index 0000000000..b5278f6379
--- /dev/null
+++ b/packages/seven/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "seven",
+ "private": true,
+ "sideEffects": false,
+ "type": "module",
+ "scripts": {
+ "dev": "react-router dev",
+ "start": "react-router dev",
+ "build": "react-router build",
+ "start:prod": "react-router-serve ./build/server/index.js",
+ "typecheck": "react-router typegen && tsc",
+ "typegen": "react-router typegen",
+ "release": "release-it"
+ },
+ "dependencies": {
+ "@plone/blocks": "workspace:*",
+ "@plone/client": "workspace:*",
+ "@plone/components": "workspace:*",
+ "@plone/providers": "workspace:*",
+ "@plone/registry": "workspace:*",
+ "@plone/react-router": "workspace:*",
+ "@plone/slots": "workspace:*",
+ "@plone/theming": "workspace:*",
+ "@react-router/node": "7.1.2",
+ "@react-router/serve": "7.1.2",
+ "@tanstack/react-query": "^5.59.0",
+ "@tanstack/react-query-devtools": "^5.59.0",
+ "isbot": "^5.1.17",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-router": "7.1.2"
+ },
+ "devDependencies": {
+ "@react-router/dev": "7.1.2",
+ "@testing-library/cypress": "10.0.2",
+ "@types/react": "^18.3.9",
+ "@types/react-dom": "^18.3.0",
+ "cypress": "^13.13.2",
+ "typescript": "^5.6.3",
+ "vite": "^5.4.9",
+ "vite-tsconfig-paths": "^5.0.1",
+ "wait-on": "^8.0.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+}
diff --git a/packages/seven/public/favicon.ico b/packages/seven/public/favicon.ico
new file mode 100644
index 0000000000..5dbdfcddcb
Binary files /dev/null and b/packages/seven/public/favicon.ico differ
diff --git a/packages/seven/react-router.config.ts b/packages/seven/react-router.config.ts
new file mode 100644
index 0000000000..4f9a6ed522
--- /dev/null
+++ b/packages/seven/react-router.config.ts
@@ -0,0 +1,7 @@
+import type { Config } from '@react-router/dev/config';
+
+export default {
+ // Config options...
+ // Server-side render by default, to enable SPA mode set this to `false`
+ ssr: true,
+} satisfies Config;
diff --git a/packages/seven/registry.config.ts b/packages/seven/registry.config.ts
new file mode 100644
index 0000000000..15b9c3f5d2
--- /dev/null
+++ b/packages/seven/registry.config.ts
@@ -0,0 +1,4 @@
+const addons = ['@plone/blocks', '@plone/slots'];
+const theme = '';
+
+export { addons, theme };
diff --git a/packages/seven/towncrier.toml b/packages/seven/towncrier.toml
new file mode 100644
index 0000000000..3ef721f378
--- /dev/null
+++ b/packages/seven/towncrier.toml
@@ -0,0 +1,33 @@
+[tool.towncrier]
+filename = "CHANGELOG.md"
+directory = "news/"
+title_format = "## {version} ({project_date})"
+underlines = ["", "", ""]
+template = "../scripts/templates/towncrier_template.jinja"
+start_string = "\n"
+issue_format = "[#{issue}](https://github.com/plone/volto/issues/{issue})"
+
+[[tool.towncrier.type]]
+directory = "breaking"
+name = "Breaking"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "feature"
+name = "Feature"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "bugfix"
+name = "Bugfix"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "internal"
+name = "Internal"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "documentation"
+name = "Documentation"
+showcontent = true
diff --git a/packages/seven/tsconfig.json b/packages/seven/tsconfig.json
new file mode 100644
index 0000000000..29b2316386
--- /dev/null
+++ b/packages/seven/tsconfig.json
@@ -0,0 +1,33 @@
+{
+ "include": [
+ "**/*.ts",
+ "**/*.tsx",
+ "**/.server/**/*.ts",
+ "**/.server/**/*.tsx",
+ "**/.client/**/*.ts",
+ "**/.client/**/*.tsx",
+ ".react-router/types/**/*"
+ ],
+ "compilerOptions": {
+ "lib": ["DOM", "DOM.Iterable", "ES2022"],
+ "types": ["@react-router/node", "vite/client"],
+ "isolatedModules": true,
+ "esModuleInterop": true,
+ "jsx": "react-jsx",
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "resolveJsonModule": true,
+ "target": "ES2022",
+ "strict": true,
+ "allowJs": true,
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true,
+ "baseUrl": ".",
+ "paths": {
+ "~/*": ["./app/*"]
+ },
+ "noEmit": true,
+ "rootDirs": [".", "./.react-router/types"],
+ "plugins": [{ "name": "@react-router/dev" }]
+ }
+}
diff --git a/packages/seven/vite.config.ts b/packages/seven/vite.config.ts
new file mode 100644
index 0000000000..ba4e42fef1
--- /dev/null
+++ b/packages/seven/vite.config.ts
@@ -0,0 +1,31 @@
+import { reactRouter } from '@react-router/dev/vite';
+import tsconfigPaths from 'vite-tsconfig-paths';
+import { defineConfig } from 'vite';
+import { PloneRegistryVitePlugin } from '@plone/registry/vite-plugin';
+
+const prodServerName =
+ process.env.PLONE_API_PATH && process.env.PLONE_API_PATH.startsWith('https')
+ ? process.env.PLONE_API_PATH
+ : '';
+
+export default defineConfig({
+ plugins: [PloneRegistryVitePlugin(), reactRouter(), tsconfigPaths()],
+ server: {
+ port: 3000,
+ proxy: {
+ '^/\\+\\+api\\+\\+($$|/.*)': {
+ target: prodServerName
+ ? prodServerName
+ : 'http://localhost:8080/VirtualHostBase/http/localhost:3000/Plone/++api++/VirtualHostRoot',
+ ...(prodServerName && {
+ changeOrigin: true,
+ secure: false,
+ }),
+ rewrite: (path) => {
+ console.log('rewritten path', path);
+ return path.replace('/++api++', '');
+ },
+ },
+ },
+ },
+});
diff --git a/packages/slots/.eslintrc.cjs b/packages/slots/.eslintrc.cjs
index b3a71fc44c..18bae08069 100644
--- a/packages/slots/.eslintrc.cjs
+++ b/packages/slots/.eslintrc.cjs
@@ -1,11 +1,5 @@
/** @type {import('eslint').Linter.Config} */
module.exports = {
- overrides: [
- {
- files: ['**/*.ts', '**/*.tsx'],
- extends: [
- 'plugin:react/jsx-runtime', // We only want this for non-library code (eg. volto add-ons)
- ],
- },
- ],
+ extends: ['../../.eslintrc.cjs', '../eslintconfig/addons.js'],
+ ignorePatterns: ['vitest.config.ts'],
};
diff --git a/packages/slots/.storybook/preview.ts b/packages/slots/.storybook/preview.ts
index 362843c9bc..306da735d3 100644
--- a/packages/slots/.storybook/preview.ts
+++ b/packages/slots/.storybook/preview.ts
@@ -2,7 +2,7 @@ import './storybook-base.css';
import '@plone/components/dist/basic.css';
import '../main.css';
import config from '@plone/registry';
-import installSlots from '../config';
+import installSlots from '../index';
import installBlocks from '@plone/blocks';
config.set('slots', {});
diff --git a/packages/slots/CHANGELOG.md b/packages/slots/CHANGELOG.md
index 1eb8ee8211..5d07428752 100644
--- a/packages/slots/CHANGELOG.md
+++ b/packages/slots/CHANGELOG.md
@@ -8,4 +8,15 @@
+## 1.0.0-alpha.0 (2025-01-24)
+
+### Bugfix
+
+- Unify the ESlint config. @sneridagh [#6599](https://github.com/plone/volto/issues/6599)
+
+### Internal
+
+- Initial commit, first steps. @sneridagh [#6409](https://github.com/plone/volto/issues/6409)
+- Centralize `tsconfig`. @sneridagh [#6536](https://github.com/plone/volto/issues/6536)
+
## 1.0.0 (unreleased)
diff --git a/packages/slots/news/6409.internal b/packages/slots/news/6409.internal
deleted file mode 100644
index 5712bbc003..0000000000
--- a/packages/slots/news/6409.internal
+++ /dev/null
@@ -1 +0,0 @@
-Initial commit, first steps. @sneridagh
diff --git a/packages/slots/news/6536.internal b/packages/slots/news/6536.internal
deleted file mode 100644
index 27c8bbd143..0000000000
--- a/packages/slots/news/6536.internal
+++ /dev/null
@@ -1 +0,0 @@
-Centralize `tsconfig`. @sneridagh
diff --git a/packages/slots/package.json b/packages/slots/package.json
index 208b14f0c4..5e1dffe645 100644
--- a/packages/slots/package.json
+++ b/packages/slots/package.json
@@ -9,7 +9,7 @@
],
"funding": "https://github.com/sponsors/plone",
"license": "MIT",
- "version": "1.0.0",
+ "version": "1.0.0-alpha.0",
"repository": {
"type": "git",
"url": "https://github.com/plone/volto.git"
@@ -67,6 +67,10 @@
"@storybook/react": "^8.0.4",
"@storybook/react-vite": "^8.0.4",
"@storybook/theming": "^8.0.4",
+ "@testing-library/jest-dom": "6.4.2",
+ "@testing-library/react": "14.2.1",
+ "@types/jest-axe": "^3.5.7",
+ "@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
"eslint-plugin-storybook": "^0.8.0",
diff --git a/packages/theming/.eslintrc.cjs b/packages/theming/.eslintrc.cjs
new file mode 100644
index 0000000000..796722cd15
--- /dev/null
+++ b/packages/theming/.eslintrc.cjs
@@ -0,0 +1,4 @@
+/** @type {import('eslint').Linter.Config} */
+module.exports = {
+ extends: ['../../.eslintrc.cjs', '../eslintconfig/addons.js'],
+};
diff --git a/packages/theming/CHANGELOG.md b/packages/theming/CHANGELOG.md
index d3ab18563b..eca1bdc78a 100644
--- a/packages/theming/CHANGELOG.md
+++ b/packages/theming/CHANGELOG.md
@@ -8,4 +8,15 @@
+## 1.0.0-alpha.0 (2025-01-24)
+
+### Bugfix
+
+- Added empty main.css.map to avoid RR7 to complain. @sneridagh [#6599](https://github.com/plone/volto/issues/6599)
+
+### Internal
+
+- Initial commit, first steps. @sneridagh [#6409](https://github.com/plone/volto/issues/6409)
+- Centralize `tsconfig`. @sneridagh [#6536](https://github.com/plone/volto/issues/6536)
+
## 1.0.0 (unreleased)
diff --git a/packages/theming/news/6409.internal b/packages/theming/news/6409.internal
deleted file mode 100644
index 5712bbc003..0000000000
--- a/packages/theming/news/6409.internal
+++ /dev/null
@@ -1 +0,0 @@
-Initial commit, first steps. @sneridagh
diff --git a/packages/theming/news/6536.internal b/packages/theming/news/6536.internal
deleted file mode 100644
index 27c8bbd143..0000000000
--- a/packages/theming/news/6536.internal
+++ /dev/null
@@ -1 +0,0 @@
-Centralize `tsconfig`. @sneridagh
diff --git a/packages/theming/package.json b/packages/theming/package.json
index 688bd0231c..f747e235b1 100644
--- a/packages/theming/package.json
+++ b/packages/theming/package.json
@@ -9,7 +9,7 @@
],
"funding": "https://github.com/sponsors/plone",
"license": "MIT",
- "version": "1.0.0",
+ "version": "1.0.0-alpha.0",
"repository": {
"type": "git",
"url": "https://github.com/plone/volto.git"
diff --git a/packages/theming/styles/main.css.map b/packages/theming/styles/main.css.map
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md
index 348c505930..d9a78eeb64 100644
--- a/packages/types/CHANGELOG.md
+++ b/packages/types/CHANGELOG.md
@@ -8,6 +8,12 @@
+## 1.3.0 (2025-01-24)
+
+### Feature
+
+- Added typings for the route registry. @sneridagh [#6600](https://github.com/plone/volto/issues/6600)
+
## 1.2.0 (2024-12-17)
### Feature
diff --git a/packages/types/news/6600.feature b/packages/types/news/6600.feature
deleted file mode 100644
index cfa4d841ba..0000000000
--- a/packages/types/news/6600.feature
+++ /dev/null
@@ -1 +0,0 @@
-Added typings for the route registry. @sneridagh
diff --git a/packages/types/package.json b/packages/types/package.json
index 6c2370a064..61e66a5483 100644
--- a/packages/types/package.json
+++ b/packages/types/package.json
@@ -9,7 +9,7 @@
],
"funding": "https://github.com/sponsors/plone",
"license": "MIT",
- "version": "1.2.0",
+ "version": "1.3.0",
"repository": {
"type": "git",
"url": "https://github.com/plone/volto.git"
diff --git a/packages/volto-slate/CHANGELOG.md b/packages/volto-slate/CHANGELOG.md
index c3aaaf3225..d4fca1afc4 100644
--- a/packages/volto-slate/CHANGELOG.md
+++ b/packages/volto-slate/CHANGELOG.md
@@ -8,6 +8,12 @@
+## 18.2.0 (2025-01-24)
+
+### Feature
+
+- Fixed keyboard shortcuts for typing headings using Markdown notation. @Shyam-Raghuwanshi [#6588](https://github.com/plone/volto/issues/6588)
+
## 18.1.0 (2025-01-11)
### Feature
diff --git a/packages/volto-slate/news/6588.feature b/packages/volto-slate/news/6588.feature
deleted file mode 100644
index 2580902f28..0000000000
--- a/packages/volto-slate/news/6588.feature
+++ /dev/null
@@ -1 +0,0 @@
-Fixed keyboard shortcuts for typing headings using Markdown notation. @Shyam-Raghuwanshi
diff --git a/packages/volto-slate/package.json b/packages/volto-slate/package.json
index 9827727b61..f74a975dd1 100644
--- a/packages/volto-slate/package.json
+++ b/packages/volto-slate/package.json
@@ -1,6 +1,6 @@
{
"name": "@plone/volto-slate",
- "version": "18.1.0",
+ "version": "18.2.0",
"description": "Slate.js integration with Volto",
"main": "src/index.js",
"author": "European Environment Agency: IDM2 A-Team",
diff --git a/packages/volto/CHANGELOG.md b/packages/volto/CHANGELOG.md
index 3eab10e849..5b1b29e49e 100644
--- a/packages/volto/CHANGELOG.md
+++ b/packages/volto/CHANGELOG.md
@@ -17,6 +17,29 @@ myst:
+## 18.7.0 (2025-01-24)
+
+### Feature
+
+- - Fixed handling of the site logo preview to appear after upload. @Shyam-Raghuwanshi [#6591](https://github.com/plone/volto/issues/6591)
+- Provide language alternate links @erral [#6602](https://github.com/plone/volto/issues/6602)
+- feat(cypress):Add custom check Accessibility command @Tishasoumya-02 [#6606](https://github.com/plone/volto/issues/6606)
+
+### Bugfix
+
+- Improve the usability of the `ObjectBrowser` when inputting a manual value, checking it on blur, and adding a local validator. @sneridagh [#6576](https://github.com/plone/volto/issues/6576)
+- fix(useClipboard): Do not have a pending promise in a boolean state @nileshgulia1 [#6585](https://github.com/plone/volto/issues/6585)
+
+### Internal
+
+- Add Seven convenience Makefile commands. @sneridagh [#6599](https://github.com/plone/volto/issues/6599)
+- Restore pull request previews on Read the Docs. @stevepiercy [#6612](https://github.com/plone/volto/issues/6612)
+- Fix lint-staged throwing warnings when a file is checked-in and ignored. @sneridagh [#6614](https://github.com/plone/volto/issues/6614)
+
+### Documentation
+
+- Enhancements of the upgrade guide for Volto 18, since we detected some inconsistencies. @sneridagh [#6609](https://github.com/plone/volto/issues/6609)
+
## 18.6.0 (2025-01-11)
### Feature
diff --git a/packages/volto/Makefile b/packages/volto/Makefile
index 1a346e111f..ebeeec82d5 100644
--- a/packages/volto/Makefile
+++ b/packages/volto/Makefile
@@ -124,15 +124,15 @@ acceptance-frontend-dev-start: ## Start acceptance frontend in development mode
.PHONY: acceptance-backend-start
acceptance-backend-start: ## Start backend acceptance server
- #docker run -it --rm -p 55001:55001 $(DOCKER_IMAGE_ACCEPTANCE)
+ docker run -it --rm -p 55001:55001 $(DOCKER_IMAGE_ACCEPTANCE)
# Uncomment next line and comment line above to use a custom image with the acceptance server (in case you need to use an specific backend add-on or version)
- docker run -it --rm -e ZSERVER_HOST=0.0.0.0 -e ZSERVER_PORT=55001 -p 55001:55001 -e ADDONS='$(KGS) $(TESTING_ADDONS)' -e APPLY_PROFILES=plone.app.contenttypes:plone-content,plone.restapi:default,plone.volto:default-homepage -e CONFIGURE_PACKAGES=plone.app.contenttypes,plone.restapi,plone.volto,plone.volto.cors $(DOCKER_IMAGE) ./bin/robot-server plone.app.robotframework.testing.VOLTO_ROBOT_TESTING
+ # docker run -it --rm -e ZSERVER_HOST=0.0.0.0 -e ZSERVER_PORT=55001 -p 55001:55001 -e ADDONS='$(KGS) $(TESTING_ADDONS)' -e APPLY_PROFILES=plone.app.contenttypes:plone-content,plone.restapi:default,plone.volto:default-homepage -e CONFIGURE_PACKAGES=plone.app.contenttypes,plone.restapi,plone.volto,plone.volto.cors $(DOCKER_IMAGE) ./bin/robot-server plone.app.robotframework.testing.VOLTO_ROBOT_TESTING
.PHONY: ci-acceptance-backend-start
ci-acceptance-backend-start: ## Start backend acceptance server in headless mode for CI
- #docker run -i --rm -p 55001:55001 $(DOCKER_IMAGE_ACCEPTANCE)
+ docker run -i --rm -p 55001:55001 $(DOCKER_IMAGE_ACCEPTANCE)
# Uncomment next line and comment line above to use a custom image with the acceptance server (in case you need to use an specific backend add-on or version)
- docker run -i --rm -e ZSERVER_HOST=0.0.0.0 -e ZSERVER_PORT=55001 -p 55001:55001 -e ADDONS='$(KGS) $(TESTING_ADDONS)' -e APPLY_PROFILES=plone.app.contenttypes:plone-content,plone.restapi:default,plone.volto:default-homepage -e CONFIGURE_PACKAGES=plone.app.contenttypes,plone.restapi,plone.volto,plone.volto.cors $(DOCKER_IMAGE) ./bin/robot-server plone.app.robotframework.testing.VOLTO_ROBOT_TESTING
+ # docker run -i --rm -e ZSERVER_HOST=0.0.0.0 -e ZSERVER_PORT=55001 -p 55001:55001 -e ADDONS='$(KGS) $(TESTING_ADDONS)' -e APPLY_PROFILES=plone.app.contenttypes:plone-content,plone.restapi:default,plone.volto:default-homepage -e CONFIGURE_PACKAGES=plone.app.contenttypes,plone.restapi,plone.volto,plone.volto.cors $(DOCKER_IMAGE) ./bin/robot-server plone.app.robotframework.testing.VOLTO_ROBOT_TESTING
.PHONY: acceptance-frontend-prod-start
acceptance-frontend-prod-start: build-deps ## Start acceptance frontend in production mode
diff --git a/packages/volto/cypress/support/commands.js b/packages/volto/cypress/support/commands.js
index f8ba71f310..5ea83b651e 100644
--- a/packages/volto/cypress/support/commands.js
+++ b/packages/volto/cypress/support/commands.js
@@ -967,3 +967,25 @@ Cypress.Commands.add('queryCounter', (path, steps, number = 1) => {
cy.get('@counterName').its('callCount').should('equal', number);
});
+
+// Print cypress-axe violations to the terminal
+function printAccessibilityViolations(violations) {
+ cy.task(
+ 'table',
+ violations.map(({ id, impact, description, nodes }) => ({
+ impact,
+ description: `${description} (${id})`,
+ nodes: nodes.length,
+ })),
+ );
+}
+
+Cypress.Commands.add(
+ 'checkAccessibility',
+ (subject, { skipFailures = false } = {}) => {
+ cy.checkA11y(subject, null, printAccessibilityViolations, skipFailures);
+ },
+ {
+ prevSubject: 'optional',
+ },
+);
diff --git a/packages/volto/news/6576.bugfix b/packages/volto/news/6576.bugfix
deleted file mode 100644
index 63951847c8..0000000000
--- a/packages/volto/news/6576.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Improve the usability of the `ObjectBrowser` when inputting a manual value, checking it on blur, and adding a local validator. @sneridagh
diff --git a/packages/volto/news/6585.bugfix b/packages/volto/news/6585.bugfix
deleted file mode 100644
index 5dbbf2f113..0000000000
--- a/packages/volto/news/6585.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-fix(useClipboard): Do not have a pending promise in a boolean state @nileshgulia1
\ No newline at end of file
diff --git a/packages/volto/news/6591.feature b/packages/volto/news/6591.feature
deleted file mode 100644
index f662901e21..0000000000
--- a/packages/volto/news/6591.feature
+++ /dev/null
@@ -1 +0,0 @@
-- Fixed handling of the site logo preview to appear after upload. @Shyam-Raghuwanshi
diff --git a/packages/volto/news/6609.documentation b/packages/volto/news/6609.documentation
deleted file mode 100644
index 92d9888694..0000000000
--- a/packages/volto/news/6609.documentation
+++ /dev/null
@@ -1 +0,0 @@
-Enhancements of the upgrade guide for Volto 18, since we detected some inconsistencies. @sneridagh
diff --git a/packages/volto/package.json b/packages/volto/package.json
index c3d5bb4e5e..c63ec96342 100644
--- a/packages/volto/package.json
+++ b/packages/volto/package.json
@@ -9,7 +9,7 @@
}
],
"license": "MIT",
- "version": "18.6.0",
+ "version": "18.7.0",
"repository": {
"type": "git",
"url": "git@github.com:plone/volto.git"
diff --git a/packages/volto/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.jsx b/packages/volto/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.jsx
new file mode 100644
index 0000000000..fc8a14d7c1
--- /dev/null
+++ b/packages/volto/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.jsx
@@ -0,0 +1,23 @@
+import config from '@plone/volto/registry';
+import Helmet from '@plone/volto/helpers/Helmet/Helmet';
+
+const AlternateHrefLangs = (props) => {
+ const { content } = props;
+ return (
+
+ {config.settings.isMultilingual &&
+ content['@components']?.translations?.items?.map((item, key) => {
+ return (
+
+ );
+ })}
+
+ );
+};
+
+export { AlternateHrefLangs };
diff --git a/packages/volto/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.test.jsx b/packages/volto/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.test.jsx
new file mode 100644
index 0000000000..7ebb9f0aa0
--- /dev/null
+++ b/packages/volto/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.test.jsx
@@ -0,0 +1,135 @@
+import React from 'react';
+import Helmet from '@plone/volto/helpers/Helmet/Helmet';
+
+import renderer from 'react-test-renderer';
+import configureStore from 'redux-mock-store';
+import { Provider } from 'react-intl-redux';
+import config from '@plone/volto/registry';
+
+import { AlternateHrefLangs } from './AlternateHrefLangs';
+
+const mockStore = configureStore();
+
+describe('AlternateHrefLangs', () => {
+ beforeEach(() => {});
+ it('non multilingual site, renders nothing', () => {
+ config.settings.isMultilingual = false;
+ const content = {
+ '@id': '/',
+ '@components': {},
+ };
+ const store = mockStore({
+ intl: {
+ locale: 'en',
+ messages: {},
+ },
+ });
+ // We need to force the component rendering
+ // to fill the Helmet
+ renderer.create(
+
+
+ ,
+ );
+
+ const helmetLinks = Helmet.peek().linkTags;
+ expect(helmetLinks.length).toBe(0);
+ });
+ it('multilingual site, with some translations', () => {
+ config.settings.isMultilingual = true;
+ config.settings.supportedLanguages = ['en', 'es', 'eu'];
+
+ const content = {
+ '@components': {
+ translations: {
+ items: [
+ { '@id': '/en', language: 'en' },
+ { '@id': '/es', language: 'es' },
+ ],
+ },
+ },
+ };
+
+ const store = mockStore({
+ intl: {
+ locale: 'en',
+ messages: {},
+ },
+ });
+
+ // We need to force the component rendering
+ // to fill the Helmet
+ renderer.create(
+
+ <>
+
+ >
+ ,
+ );
+ const helmetLinks = Helmet.peek().linkTags;
+
+ expect(helmetLinks.length).toBe(2);
+
+ expect(helmetLinks).toContainEqual({
+ rel: 'alternate',
+ href: '/es',
+ hrefLang: 'es',
+ });
+ expect(helmetLinks).toContainEqual({
+ rel: 'alternate',
+ href: '/en',
+ hrefLang: 'en',
+ });
+ });
+ it('multilingual site, with all available translations', () => {
+ config.settings.isMultilingual = true;
+ config.settings.supportedLanguages = ['en', 'es', 'eu'];
+ const store = mockStore({
+ intl: {
+ locale: 'en',
+ messages: {},
+ },
+ });
+
+ const content = {
+ '@components': {
+ translations: {
+ items: [
+ { '@id': '/en', language: 'en' },
+ { '@id': '/eu', language: 'eu' },
+ { '@id': '/es', language: 'es' },
+ ],
+ },
+ },
+ };
+
+ // We need to force the component rendering
+ // to fill the Helmet
+ renderer.create(
+
+
+ ,
+ );
+
+ const helmetLinks = Helmet.peek().linkTags;
+
+ // We expect having 3 links
+ expect(helmetLinks.length).toBe(3);
+
+ expect(helmetLinks).toContainEqual({
+ rel: 'alternate',
+ href: '/eu',
+ hrefLang: 'eu',
+ });
+ expect(helmetLinks).toContainEqual({
+ rel: 'alternate',
+ href: '/es',
+ hrefLang: 'es',
+ });
+ expect(helmetLinks).toContainEqual({
+ rel: 'alternate',
+ href: '/en',
+ hrefLang: 'en',
+ });
+ });
+});
diff --git a/packages/volto/src/components/theme/View/View.jsx b/packages/volto/src/components/theme/View/View.jsx
index 902204c869..da8e9a7d82 100644
--- a/packages/volto/src/components/theme/View/View.jsx
+++ b/packages/volto/src/components/theme/View/View.jsx
@@ -21,6 +21,7 @@ import BodyClass from '@plone/volto/helpers/BodyClass/BodyClass';
import { getBaseUrl, flattenToAppURL } from '@plone/volto/helpers/Url/Url';
import { getLayoutFieldname } from '@plone/volto/helpers/Content/Content';
import { hasApiExpander } from '@plone/volto/helpers/Utils/Utils';
+import { AlternateHrefLangs } from '@plone/volto/components/theme/AlternateHrefLangs/AlternateHrefLangs';
import config from '@plone/volto/registry';
import SlotRenderer from '../SlotRenderer/SlotRenderer';
@@ -234,6 +235,7 @@ class View extends Component {
return (
+
{/* Body class if displayName in component is set */}
state: {
manualLinkInput: string;
validURL: boolean;
+ errors: any[];
};
selectedItemsRef: React.RefObject;
placeholderRef: React.RefObject;
diff --git a/packages/volto/types/components/theme/AlternateHrefLangs/AlternateHrefLangs.d.ts b/packages/volto/types/components/theme/AlternateHrefLangs/AlternateHrefLangs.d.ts
new file mode 100644
index 0000000000..b5e6ac36a6
--- /dev/null
+++ b/packages/volto/types/components/theme/AlternateHrefLangs/AlternateHrefLangs.d.ts
@@ -0,0 +1 @@
+export function AlternateHrefLangs(props: any): import("react/jsx-runtime").JSX.Element;
diff --git a/packages/volto/types/components/theme/AlternateHrefLangs/AlternateHrefLangs.test.d.ts b/packages/volto/types/components/theme/AlternateHrefLangs/AlternateHrefLangs.test.d.ts
new file mode 100644
index 0000000000..cb0ff5c3b5
--- /dev/null
+++ b/packages/volto/types/components/theme/AlternateHrefLangs/AlternateHrefLangs.test.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ebecb8c205..57e84a67d7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -34,7 +34,7 @@ importers:
version: 5.6.3
vitest:
specifier: ^2.1.3
- version: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ version: 2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
apps/nextjs:
dependencies:
@@ -141,7 +141,7 @@ importers:
devDependencies:
'@remix-run/dev':
specifier: ^2.13.1
- version: 2.13.1(@remix-run/react@2.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3))(@remix-run/serve@2.13.1(typescript@5.6.3))(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 2.13.1(@remix-run/react@2.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3))(@remix-run/serve@2.13.1(typescript@5.6.3))(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
'@tanstack/react-query-devtools':
specifier: ^5.59.0
version: 5.59.15(@tanstack/react-query@5.59.15(react@18.2.0))(react@18.2.0)
@@ -156,10 +156,10 @@ importers:
version: 5.6.3
vite:
specifier: ^5.4.9
- version: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ version: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
vite-tsconfig-paths:
specifier: ^4.2.1
- version: 4.3.2(typescript@5.6.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 4.3.2(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
apps/rr7:
dependencies:
@@ -211,7 +211,7 @@ importers:
devDependencies:
'@react-router/dev':
specifier: 7.1.1
- version: 7.1.1(@react-router/serve@7.1.1(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3))(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(less@3.11.1)(lightningcss@1.28.1)(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 7.1.1(@react-router/serve@7.1.1(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3))(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(less@3.11.1)(lightningcss@1.28.1)(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
'@types/react':
specifier: ^18.3.9
version: 18.3.12
@@ -223,10 +223,10 @@ importers:
version: 5.6.3
vite:
specifier: ^5.4.9
- version: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ version: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
vite-tsconfig-paths:
specifier: ^5.0.1
- version: 5.1.0(typescript@5.6.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 5.1.0(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
apps/vite:
dependencies:
@@ -272,7 +272,7 @@ importers:
version: 5.37.1(@tanstack/react-query@5.37.1(react@18.2.0))(react@18.2.0)
'@tanstack/router-plugin':
specifier: ^1.66.1
- version: 1.69.1(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)
+ version: 1.69.1(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)
'@types/react':
specifier: ^18.2.47
version: 18.2.79
@@ -281,10 +281,10 @@ importers:
version: 18.2.25
'@vitejs/plugin-react':
specifier: ^4.3.2
- version: 4.3.2(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 4.3.2(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
vite:
specifier: ^5.4.9
- version: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ version: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
apps/vite-ssr:
dependencies:
@@ -311,10 +311,10 @@ importers:
version: 1.70.1(@tanstack/router-generator@1.69.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@tanstack/router-vite-plugin':
specifier: ^1.34.8
- version: 1.69.1(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)
+ version: 1.69.1(vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)
'@tanstack/start':
specifier: ^1.34.9
- version: 1.70.1(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.75.0)(terser@5.30.3)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)
+ version: 1.70.1(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.75.0)(terser@5.30.3)(vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)
axios:
specifier: ^1.6.5
version: 1.6.8
@@ -363,7 +363,7 @@ importers:
version: 18.2.25
'@vitejs/plugin-react':
specifier: ^4
- version: 4.2.1(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 4.2.1(vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
compression:
specifier: ^1.7.4
version: 1.7.4
@@ -384,10 +384,10 @@ importers:
version: 5.6.3
vite:
specifier: ^5.2.9
- version: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ version: 5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
vite-plugin-babel:
specifier: ^1.2.0
- version: 1.2.0(@babel/core@7.24.4)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 1.2.0(@babel/core@7.24.4)(vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
packages/blocks:
dependencies:
@@ -413,12 +413,27 @@ importers:
'@plone/types':
specifier: workspace:*
version: link:../types
+ '@testing-library/jest-dom':
+ specifier: 6.4.2
+ version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@testing-library/react':
+ specifier: 14.2.1
+ version: 14.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ '@types/jest-axe':
+ specifier: ^3.5.7
+ version: 3.5.9
+ '@types/node':
+ specifier: ^20
+ version: 20.12.7
'@types/react':
specifier: ^18
version: 18.2.79
'@types/react-dom':
specifier: ^18
version: 18.2.25
+ jest-axe:
+ specifier: ^8.0.0
+ version: 8.0.0
release-it:
specifier: 17.1.1
version: 17.1.1(typescript@5.6.3)
@@ -476,10 +491,10 @@ importers:
version: 9.0.8
'@vitejs/plugin-react':
specifier: ^4.1.0
- version: 4.2.1(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 4.2.1(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
'@vitest/coverage-v8':
specifier: ^1.3.1
- version: 1.5.0(vitest@2.1.3(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 1.5.0(vitest@2.1.3(@types/node@22.10.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
glob:
specifier: 7.1.6
version: 7.1.6
@@ -497,7 +512,7 @@ importers:
version: 17.1.1(typescript@5.6.3)
tsup:
specifier: ^8.3.5
- version: 8.3.5(@microsoft/api-extractor@7.43.0(@types/node@20.12.7))(@swc/core@1.4.16)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.3)
+ version: 8.3.5(@microsoft/api-extractor@7.43.0(@types/node@22.10.7))(@swc/core@1.4.16)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.3)
typescript:
specifier: ^5.6.3
version: 5.6.3
@@ -506,13 +521,13 @@ importers:
version: 9.0.1
vite:
specifier: ^5.4.8
- version: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ version: 5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
vite-plugin-dts:
specifier: ^3.7.3
- version: 3.8.3(@types/node@20.12.7)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 3.8.3(@types/node@22.10.7)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
vitest:
specifier: ^2.1.3
- version: 2.1.3(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ version: 2.1.3(@types/node@22.10.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
wait-on:
specifier: ^7.2.0
version: 7.2.0(debug@4.3.4)
@@ -527,7 +542,7 @@ importers:
version: 3.12.0(react@18.2.0)
'@storybook/test':
specifier: ^8.0.4
- version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
clsx:
specifier: ^2.1.1
version: 2.1.1
@@ -555,7 +570,7 @@ importers:
version: 8.0.8(@types/react@18.2.79)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@storybook/addon-interactions':
specifier: ^8.0.4
- version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
'@storybook/addon-links':
specifier: ^8.0.4
version: 8.0.8(react@18.2.0)
@@ -573,13 +588,13 @@ importers:
version: 8.0.8(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)
'@storybook/react-vite':
specifier: ^8.0.4
- version: 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ version: 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
'@storybook/theming':
specifier: ^8.0.4
version: 8.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@testing-library/jest-dom':
specifier: 6.4.2
- version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
'@testing-library/react':
specifier: 14.2.1
version: 14.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
@@ -594,10 +609,10 @@ importers:
version: 18.2.25
'@vitejs/plugin-react':
specifier: ^4.1.0
- version: 4.2.1(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ version: 4.2.1(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
'@vitest/coverage-v8':
specifier: ^1.3.1
- version: 1.5.0(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ version: 1.5.0(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
browserslist:
specifier: ^4.23.0
version: 4.23.0
@@ -624,19 +639,19 @@ importers:
version: 8.0.8(@babel/preset-env@7.24.4(@babel/core@7.25.8))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
tsup:
specifier: ^8.3.5
- version: 8.3.5(@microsoft/api-extractor@7.43.0(@types/node@20.12.7))(@swc/core@1.4.16)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.3)
+ version: 8.3.5(@microsoft/api-extractor@7.43.0(@types/node@22.10.7))(@swc/core@1.4.16)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.3)
typescript:
specifier: ^5.6.3
version: 5.6.3
vite:
specifier: ^5.4.8
- version: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ version: 5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
vitest:
specifier: ^2.1.3
- version: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ version: 2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
vitest-axe:
specifier: ^0.1.0
- version: 0.1.0(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ version: 0.1.0(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
packages/coresandbox:
dependencies:
@@ -672,6 +687,8 @@ importers:
specifier: ^7.1.33
version: 7.1.33
+ packages/eslintconfig: {}
+
packages/generator-volto:
dependencies:
ansi-escapes:
@@ -762,13 +779,13 @@ importers:
version: link:../tsconfig
tsup:
specifier: ^8.3.5
- version: 8.3.5(@microsoft/api-extractor@7.43.0(@types/node@20.12.7))(@swc/core@1.4.16)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.3)
+ version: 8.3.5(@microsoft/api-extractor@7.43.0(@types/node@22.10.7))(@swc/core@1.4.16)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.3)
typescript:
specifier: ^5.6.3
version: 5.6.3
vitest:
specifier: ^2.1.3
- version: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ version: 2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
packages/providers:
dependencies:
@@ -814,13 +831,56 @@ importers:
version: link:../tsconfig
tsup:
specifier: ^8.3.5
- version: 8.3.5(@microsoft/api-extractor@7.43.0(@types/node@20.12.7))(@swc/core@1.4.16)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.3)
+ version: 8.3.5(@microsoft/api-extractor@7.43.0(@types/node@22.10.7))(@swc/core@1.4.16)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.3)
typescript:
specifier: ^5.6.3
version: 5.6.3
vitest:
specifier: ^2.1.3
- version: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ version: 2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+
+ packages/react-router:
+ dependencies:
+ react:
+ specifier: ^16.8.0 || ^17.0.0 || ^18.0.0
+ version: 18.2.0
+ react-dom:
+ specifier: ^16.8.0 || ^17.0.0 || ^18.0.0
+ version: 18.2.0(react@18.2.0)
+ devDependencies:
+ '@arethetypeswrong/cli':
+ specifier: ^0.16.4
+ version: 0.16.4
+ '@plone/types':
+ specifier: workspace:*
+ version: link:../types
+ '@react-router/dev':
+ specifier: 7.1.2
+ version: 7.1.2(@react-router/serve@7.1.2(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3))(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(less@3.11.1)(lightningcss@1.28.1)(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@types/node':
+ specifier: 22.10.7
+ version: 22.10.7
+ '@types/react':
+ specifier: ^18
+ version: 18.3.12
+ '@types/react-dom':
+ specifier: ^18
+ version: 18.3.1
+ release-it:
+ specifier: 17.1.1
+ version: 17.1.1(typescript@5.6.3)
+ tsconfig:
+ specifier: workspace:*
+ version: link:../tsconfig
+ tsup:
+ specifier: ^8.3.5
+ version: 8.3.5(@microsoft/api-extractor@7.43.0(@types/node@22.10.7))(@swc/core@1.4.16)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.3)
+ typescript:
+ specifier: ^5.6.3
+ version: 5.6.3
+ vitest:
+ specifier: ^2.1.3
+ version: 2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
packages/registry:
dependencies:
@@ -944,6 +1004,85 @@ importers:
specifier: ^16.1.3
version: 16.2.1(encoding@0.1.13)(typescript@5.6.3)
+ packages/seven:
+ dependencies:
+ '@plone/blocks':
+ specifier: workspace:*
+ version: link:../blocks
+ '@plone/client':
+ specifier: workspace:*
+ version: link:../client
+ '@plone/components':
+ specifier: workspace:*
+ version: link:../components
+ '@plone/providers':
+ specifier: workspace:*
+ version: link:../providers
+ '@plone/react-router':
+ specifier: workspace:*
+ version: link:../react-router
+ '@plone/registry':
+ specifier: workspace:*
+ version: link:../registry
+ '@plone/slots':
+ specifier: workspace:*
+ version: link:../slots
+ '@plone/theming':
+ specifier: workspace:*
+ version: link:../theming
+ '@react-router/node':
+ specifier: 7.1.2
+ version: 7.1.2(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)
+ '@react-router/serve':
+ specifier: 7.1.2
+ version: 7.1.2(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)
+ '@tanstack/react-query':
+ specifier: ^5.59.0
+ version: 5.59.15(react@18.2.0)
+ '@tanstack/react-query-devtools':
+ specifier: ^5.59.0
+ version: 5.59.15(@tanstack/react-query@5.59.15(react@18.2.0))(react@18.2.0)
+ isbot:
+ specifier: ^5.1.17
+ version: 5.1.17
+ react:
+ specifier: ^18.2.0
+ version: 18.2.0
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.2.0(react@18.2.0)
+ react-router:
+ specifier: 7.1.2
+ version: 7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ devDependencies:
+ '@react-router/dev':
+ specifier: 7.1.2
+ version: 7.1.2(@react-router/serve@7.1.2(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3))(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(less@3.11.1)(lightningcss@1.28.1)(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@testing-library/cypress':
+ specifier: 10.0.2
+ version: 10.0.2(cypress@13.13.2)
+ '@types/react':
+ specifier: ^18.3.9
+ version: 18.3.12
+ '@types/react-dom':
+ specifier: ^18.3.0
+ version: 18.3.1
+ cypress:
+ specifier: ^13.13.2
+ version: 13.13.2
+ typescript:
+ specifier: ^5.6.3
+ version: 5.6.3
+ vite:
+ specifier: ^5.4.9
+ version: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite-tsconfig-paths:
+ specifier: ^5.0.1
+ version: 5.1.0(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ wait-on:
+ specifier: ^8.0.0
+ version: 8.0.2
+
packages/slots:
dependencies:
'@plone/blocks':
@@ -976,7 +1115,7 @@ importers:
version: 8.0.8(@types/react@18.2.79)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@storybook/addon-interactions':
specifier: ^8.0.4
- version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.8(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
'@storybook/addon-links':
specifier: ^8.0.4
version: 8.0.8(react@18.2.0)
@@ -998,6 +1137,18 @@ importers:
'@storybook/theming':
specifier: ^8.0.4
version: 8.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ '@testing-library/jest-dom':
+ specifier: 6.4.2
+ version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.8(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@testing-library/react':
+ specifier: 14.2.1
+ version: 14.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ '@types/jest-axe':
+ specifier: ^3.5.7
+ version: 3.5.9
+ '@types/node':
+ specifier: ^20
+ version: 20.12.7
'@types/react':
specifier: ^18
version: 18.2.79
@@ -1027,10 +1178,10 @@ importers:
version: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
vitest:
specifier: ^2.1.3
- version: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ version: 2.1.8(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
vitest-axe:
specifier: ^0.1.0
- version: 0.1.0(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 0.1.0(vitest@2.1.8(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
packages/theming:
dependencies:
@@ -1061,7 +1212,7 @@ importers:
version: 8.0.8(@types/react@18.3.12)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@storybook/addon-interactions':
specifier: ^8.0.4
- version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
'@storybook/addon-links':
specifier: ^8.0.4
version: 8.0.8(react@18.2.0)
@@ -1079,7 +1230,7 @@ importers:
version: 8.0.8(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)
'@storybook/react-vite':
specifier: ^8.0.4
- version: 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
'@storybook/theming':
specifier: ^8.0.4
version: 8.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
@@ -1109,13 +1260,13 @@ importers:
version: 5.6.3
vite:
specifier: ^5.4.8
- version: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ version: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
vitest:
specifier: ^2.1.3
- version: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ version: 2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
vitest-axe:
specifier: ^0.1.0
- version: 0.1.0(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 0.1.0(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
packages/tsconfig: {}
@@ -1520,7 +1671,7 @@ importers:
version: 10.0.1(cypress@13.13.2)
'@testing-library/jest-dom':
specifier: 6.4.2
- version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@26.6.3)(vitest@2.1.3(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@26.6.3)(vitest@2.1.8(@types/node@22.10.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
'@testing-library/react':
specifier: 14.2.0
version: 14.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
@@ -1872,7 +2023,7 @@ importers:
version: 10.0.1(cypress@13.13.2)
'@testing-library/jest-dom':
specifier: 6.4.2
- version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.8(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
'@testing-library/react':
specifier: 12.1.5
version: 12.1.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
@@ -2861,8 +3012,8 @@ packages:
peerDependencies:
postcss-selector-parser: ^6.0.13
- '@cypress/request@3.0.1':
- resolution: {integrity: sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==}
+ '@cypress/request@3.0.7':
+ resolution: {integrity: sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==}
engines: {node: '>= 6'}
'@cypress/xvfb@1.2.4':
@@ -4902,6 +5053,24 @@ packages:
wrangler:
optional: true
+ '@react-router/dev@7.1.2':
+ resolution: {integrity: sha512-iQ9t0SPEn8CopPOavVlThVG4GySqcQpsFyiyYJWtxzNCUY5wvhtEgSNIzIAD3o9Dv5X3IDfUQY6TvIzVrvFohw==}
+ engines: {node: '>=20.0.0'}
+ hasBin: true
+ peerDependencies:
+ '@react-router/serve': ^7.1.2
+ react-router: ^7.1.2
+ typescript: ^5.1.0
+ vite: ^5.1.0 || ^6.0.0
+ wrangler: ^3.28.2
+ peerDependenciesMeta:
+ '@react-router/serve':
+ optional: true
+ typescript:
+ optional: true
+ wrangler:
+ optional: true
+
'@react-router/express@7.1.1':
resolution: {integrity: sha512-oiL2ADor3byuh7piajLTPr6007GmVPZ1Gh4HiN0uuZlz3vQ1rd0xZMSD9LnSrXhsrKEbPFaeCk8E2O67ZoABsg==}
engines: {node: '>=20.0.0'}
@@ -4913,6 +5082,17 @@ packages:
typescript:
optional: true
+ '@react-router/express@7.1.2':
+ resolution: {integrity: sha512-bOPUfAmMEznd33itisilGAulFBgg0TL9gc9gTr6gcr+b7Kc9gSrKtHDaSSbetG4lVJf+wYgEMZMjqCkpDe87YA==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ express: ^4.17.1
+ react-router: 7.1.2
+ typescript: ^5.1.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
'@react-router/node@7.1.1':
resolution: {integrity: sha512-5X79SfJ1IEEsttt0oo9rhO9kgxXyBTKdVBsz3h0WHTkRzbRk0VEpVpBW3PQ1RpkgEaAHwJ8obVl4k4brdDSExA==}
engines: {node: '>=20.0.0'}
@@ -4923,6 +5103,16 @@ packages:
typescript:
optional: true
+ '@react-router/node@7.1.2':
+ resolution: {integrity: sha512-PYLP0Vg0iE4w8iIHsusjMZx6h2PH2D4xSWQ550bgeW6Gj0JE6haB2HcaThvUyhBnnxZqNOPH335dvn+r76N5gQ==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ react-router: 7.1.2
+ typescript: ^5.1.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
'@react-router/serve@7.1.1':
resolution: {integrity: sha512-rhV1yp72ZZQn4giQUzUiLVo/7/7dhxD98Z5pdDm6mKOTJPGoQ8TBPccQaKxzJIFNRHcn0sEdehfLOxl5ydnUKw==}
engines: {node: '>=20.0.0'}
@@ -4930,6 +5120,13 @@ packages:
peerDependencies:
react-router: 7.1.1
+ '@react-router/serve@7.1.2':
+ resolution: {integrity: sha512-cpmR/by4V9ZNAx0XgBFaJ0bhoDNUtAthHouhN65E85Yk2T4EKGOq2Oq08fZDvTUJWmb03HyTouN70XerezJ4cA==}
+ engines: {node: '>=20.0.0'}
+ hasBin: true
+ peerDependencies:
+ react-router: 7.1.2
+
'@react-spectrum/utils@3.12.0':
resolution: {integrity: sha512-r3IAp9h766gATsYT6B66GmjgsTuhXSrEqKuPJenkPzshBeQPrD57ai0fyj5ihtiM3BINbkCQ+AXLrAmJunOV/A==}
peerDependencies:
@@ -6117,6 +6314,16 @@ packages:
peerDependencies:
cypress: ^12.0.0 || ^13.0.0
+ '@testing-library/cypress@10.0.2':
+ resolution: {integrity: sha512-dKv95Bre5fDmNb9tOIuWedhGUryxGu1GWYWtXDqUsDPcr9Ekld0fiTb+pcBvSsFpYXAZSpmyEjhoXzLbhh06yQ==}
+ engines: {node: '>=12', npm: '>=6'}
+ peerDependencies:
+ cypress: ^12.0.0 || ^13.0.0
+
+ '@testing-library/dom@10.4.0':
+ resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==}
+ engines: {node: '>=18'}
+
'@testing-library/dom@6.16.0':
resolution: {integrity: sha512-lBD88ssxqEfz0wFL6MeUyyWZfV/2cjEZZV3YRpb2IoJRej/4f1jB0TzqIOznTpfR1r34CNesrubxwIlAQ8zgPA==}
engines: {node: '>=8'}
@@ -6438,6 +6645,9 @@ packages:
'@types/node@20.12.7':
resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==}
+ '@types/node@22.10.7':
+ resolution: {integrity: sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==}
+
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@@ -6787,6 +6997,9 @@ packages:
'@vitest/expect@2.1.3':
resolution: {integrity: sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==}
+ '@vitest/expect@2.1.8':
+ resolution: {integrity: sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==}
+
'@vitest/mocker@2.1.3':
resolution: {integrity: sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==}
peerDependencies:
@@ -6799,15 +7012,35 @@ packages:
vite:
optional: true
+ '@vitest/mocker@2.1.8':
+ resolution: {integrity: sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
'@vitest/pretty-format@2.1.3':
resolution: {integrity: sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==}
+ '@vitest/pretty-format@2.1.8':
+ resolution: {integrity: sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==}
+
'@vitest/runner@2.1.3':
resolution: {integrity: sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==}
+ '@vitest/runner@2.1.8':
+ resolution: {integrity: sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==}
+
'@vitest/snapshot@2.1.3':
resolution: {integrity: sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==}
+ '@vitest/snapshot@2.1.8':
+ resolution: {integrity: sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==}
+
'@vitest/spy@1.3.1':
resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==}
@@ -6817,6 +7050,9 @@ packages:
'@vitest/spy@2.1.3':
resolution: {integrity: sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==}
+ '@vitest/spy@2.1.8':
+ resolution: {integrity: sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==}
+
'@vitest/utils@1.3.1':
resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==}
@@ -6826,6 +7062,9 @@ packages:
'@vitest/utils@2.1.3':
resolution: {integrity: sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==}
+ '@vitest/utils@2.1.8':
+ resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==}
+
'@volar/language-core@1.11.1':
resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==}
@@ -7094,10 +7333,6 @@ packages:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
- ansi-regex@6.0.1:
- resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
- engines: {node: '>=12'}
-
ansi-regex@6.1.0:
resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
engines: {node: '>=12'}
@@ -7380,6 +7615,9 @@ packages:
axios@1.6.8:
resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==}
+ axios@1.7.9:
+ resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==}
+
axobject-query@3.2.1:
resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==}
@@ -7872,6 +8110,10 @@ packages:
resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==}
engines: {node: '>=12'}
+ chai@5.1.2:
+ resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==}
+ engines: {node: '>=12'}
+
chalk@1.1.3:
resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
engines: {node: '>=0.10.0'}
@@ -8017,10 +8259,6 @@ packages:
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
- cli-table3@0.6.4:
- resolution: {integrity: sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==}
- engines: {node: 10.* || >= 12.*}
-
cli-table3@0.6.5:
resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==}
engines: {node: 10.* || >= 12.*}
@@ -9695,6 +9933,10 @@ packages:
resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==}
engines: {node: '>=0.10.0'}
+ expect-type@1.1.0:
+ resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==}
+ engines: {node: '>=12.0.0'}
+
expect@26.6.2:
resolution: {integrity: sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==}
engines: {node: '>= 10.14.2'}
@@ -10608,8 +10850,8 @@ packages:
resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==}
engines: {node: '>=0.8', npm: '>=1.3.7'}
- http-signature@1.3.6:
- resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==}
+ http-signature@1.4.0:
+ resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==}
engines: {node: '>=0.10'}
http2-wrapper@2.2.1:
@@ -11592,6 +11834,9 @@ packages:
joi@17.12.3:
resolution: {integrity: sha512-2RRziagf555owrm9IRVtdKynOBeITiDpuZqIpgwqXShPncPKNiRQoiGsl/T8SQdq+8ugRzH2LqY67irr2y/d+g==}
+ joi@17.13.3:
+ resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==}
+
jotai@2.0.3:
resolution: {integrity: sha512-MMjhSPAL3RoeZD9WbObufRT2quThEAEknHHridf2ma8Ml7ZVQmUiHk0ssdbR3F0h3kcwhYqSGJ59OjhPge7RRg==}
engines: {node: '>=12.20.0'}
@@ -12327,6 +12572,9 @@ packages:
loupe@3.1.1:
resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==}
+ loupe@3.1.2:
+ resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==}
+
lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
@@ -12381,6 +12629,9 @@ packages:
magic-string@0.30.11:
resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}
+ magic-string@0.30.17:
+ resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+
magic-string@0.30.5:
resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==}
engines: {node: '>=12'}
@@ -14268,10 +14519,6 @@ packages:
resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
- qs@6.10.4:
- resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==}
- engines: {node: '>=0.6'}
-
qs@6.11.0:
resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
engines: {node: '>=0.6'}
@@ -14284,6 +14531,10 @@ packages:
resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
engines: {node: '>=0.6'}
+ qs@6.13.1:
+ resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==}
+ engines: {node: '>=0.6'}
+
qs@6.5.3:
resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
engines: {node: '>=0.6'}
@@ -14667,6 +14918,16 @@ packages:
react-dom:
optional: true
+ react-router@7.1.2:
+ resolution: {integrity: sha512-KeallSO30KLpIe/ZZqfk6pCJ1c+5JhMxl3SCS3Zx1LgaGuQbgLDmjuNi6KZ5LnAV9sWjbmBWGRw8Um/Pw6BExg==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ react: '>=18'
+ react-dom: '>=18'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+
react-select-async-paginate@0.5.3:
resolution: {integrity: sha512-SWX1twi/jzViDpQa1nS+xyjrFtn9RBezbL4aIjcJXCABKMY+8JhH4iAKqAW3pryZbm439/DaMtQeZADH17v7bQ==}
peerDependencies:
@@ -15726,6 +15987,9 @@ packages:
std-env@3.7.0:
resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
+ std-env@3.8.0:
+ resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
+
stdin-discarder@0.1.0:
resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -16211,6 +16475,13 @@ packages:
resolution: {integrity: sha512-7MUlYyGJ6rSitEZ3r1Q1QNV8uSIzapS8SmmhSusBuIc7uIxPPwsKllEP0GRp1NS6Ik6F+fRZvnjDWm3ecv2hDw==}
hasBin: true
+ tldts-core@6.1.73:
+ resolution: {integrity: sha512-k1g5eX87vxu3g//6XMn62y4qjayu4cYby/PF7Ksnh4F4uUK1Z1ze/mJ4a+y5OjdJ+cXRp+YTInZhH+FGdUWy1w==}
+
+ tldts@6.1.73:
+ resolution: {integrity: sha512-/h4bVmuEMm57c2uCiAf1Q9mlQk7cA22m+1Bu0K92vUUtTVT9D4mOFWD9r4WQuTULcG9eeZtNKhLl0Il1LdKGog==}
+ hasBin: true
+
tmp@0.0.33:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
@@ -16280,6 +16551,10 @@ packages:
resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==}
engines: {node: '>=6'}
+ tough-cookie@5.1.0:
+ resolution: {integrity: sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg==}
+ engines: {node: '>=16'}
+
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
@@ -16523,6 +16798,9 @@ packages:
undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+ undici-types@6.20.0:
+ resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
+
undici@5.28.4:
resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==}
engines: {node: '>=14.0'}
@@ -16950,6 +17228,11 @@ packages:
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
+ vite-node@2.1.8:
+ resolution: {integrity: sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+
vite-node@3.0.0-beta.2:
resolution: {integrity: sha512-ofTf6cfRdL30Wbl9n/BX81EyIR5s4PReLmSurrxQ+koLaWUNOEo8E0lCM53OJkb8vpa2URM2nSrxZsIFyvY1rg==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
@@ -17107,6 +17390,31 @@ packages:
jsdom:
optional: true
+ vitest@2.1.8:
+ resolution: {integrity: sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/node': ^18.0.0 || >=20.0.0
+ '@vitest/browser': 2.1.8
+ '@vitest/ui': 2.1.8
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
vue-template-compiler@2.7.16:
resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==}
@@ -17141,6 +17449,11 @@ packages:
engines: {node: '>=12.0.0'}
hasBin: true
+ wait-on@8.0.2:
+ resolution: {integrity: sha512-qHlU6AawrgAIHlueGQHQ+ETcPLAauXbnoTKl3RKq20W0T8x0DKVAo5xWIYjHSyvHxQlcYbFdR0jp4T9bDVITFA==}
+ engines: {node: '>=12.0.0'}
+ hasBin: true
+
walk-up-path@1.0.0:
resolution: {integrity: sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==}
@@ -17712,7 +18025,7 @@ snapshots:
'@babel/helper-compilation-targets@7.23.6':
dependencies:
'@babel/compat-data': 7.24.4
- '@babel/helper-validator-option': 7.23.5
+ '@babel/helper-validator-option': 7.25.7
browserslist: 4.23.0
lru-cache: 5.1.1
semver: 6.3.1
@@ -17791,7 +18104,7 @@ snapshots:
'@babel/helper-function-name@7.23.0':
dependencies:
- '@babel/template': 7.24.0
+ '@babel/template': 7.25.7
'@babel/types': 7.25.8
'@babel/helper-hoist-variables@7.22.5':
@@ -17804,7 +18117,7 @@ snapshots:
'@babel/helper-module-imports@7.24.3':
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.25.8
'@babel/helper-module-imports@7.25.7':
dependencies:
@@ -17917,9 +18230,9 @@ snapshots:
'@babel/helpers@7.24.4':
dependencies:
- '@babel/template': 7.24.0
- '@babel/traverse': 7.24.1
- '@babel/types': 7.24.0
+ '@babel/template': 7.25.7
+ '@babel/traverse': 7.25.7
+ '@babel/types': 7.25.8
transitivePeerDependencies:
- supports-color
@@ -18233,7 +18546,7 @@ snapshots:
'@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.8)':
dependencies:
'@babel/core': 7.25.8
- '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-plugin-utils': 7.25.7
'@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4)':
dependencies:
@@ -18338,7 +18651,17 @@ snapshots:
'@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4)':
dependencies:
'@babel/core': 7.24.4
- '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-plugin-utils': 7.25.7
+
+ '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.25.8)':
+ dependencies:
+ '@babel/core': 7.25.8
+ '@babel/helper-plugin-utils': 7.25.7
+
+ '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.25.7
'@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.25.8)':
dependencies:
@@ -18393,9 +18716,11 @@ snapshots:
'@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.25.8)':
dependencies:
'@babel/core': 7.25.8
- '@babel/helper-module-imports': 7.24.3
+ '@babel/helper-module-imports': 7.25.7
'@babel/helper-plugin-utils': 7.25.7
'@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.25.8)
+ transitivePeerDependencies:
+ - supports-color
'@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4)':
dependencies:
@@ -19012,8 +19337,8 @@ snapshots:
'@babel/core': 7.24.4
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4)
- '@babel/helper-plugin-utils': 7.24.0
- '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.25.7
+ '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.24.4)
'@babel/plugin-transform-typescript@7.24.4(@babel/core@7.25.8)':
dependencies:
@@ -19158,7 +19483,7 @@ snapshots:
'@babel/preset-env@7.24.4(@babel/core@7.25.8)':
dependencies:
- '@babel/compat-data': 7.24.4
+ '@babel/compat-data': 7.25.8
'@babel/core': 7.25.8
'@babel/helper-compilation-targets': 7.25.7
'@babel/helper-plugin-utils': 7.25.7
@@ -19287,9 +19612,9 @@ snapshots:
'@babel/preset-typescript@7.24.1(@babel/core@7.24.4)':
dependencies:
'@babel/core': 7.24.4
- '@babel/helper-plugin-utils': 7.24.0
- '@babel/helper-validator-option': 7.23.5
- '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.25.7
+ '@babel/helper-validator-option': 7.25.7
+ '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.24.4)
'@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4)
'@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4)
transitivePeerDependencies:
@@ -19332,9 +19657,9 @@ snapshots:
'@babel/template@7.24.0':
dependencies:
- '@babel/code-frame': 7.24.2
- '@babel/parser': 7.24.4
- '@babel/types': 7.24.0
+ '@babel/code-frame': 7.25.7
+ '@babel/parser': 7.25.8
+ '@babel/types': 7.25.8
'@babel/template@7.25.7':
dependencies:
@@ -19418,7 +19743,7 @@ snapshots:
dependencies:
postcss-selector-parser: 6.0.16
- '@cypress/request@3.0.1':
+ '@cypress/request@3.0.7':
dependencies:
aws-sign2: 0.7.0
aws4: 1.12.0
@@ -19426,16 +19751,16 @@ snapshots:
combined-stream: 1.0.8
extend: 3.0.2
forever-agent: 0.6.1
- form-data: 2.3.3
- http-signature: 1.3.6
+ form-data: 4.0.0
+ http-signature: 1.4.0
is-typedarray: 1.0.0
isstream: 0.1.2
json-stringify-safe: 5.0.1
mime-types: 2.1.35
performance-now: 2.1.0
- qs: 6.10.4
+ qs: 6.13.1
safe-buffer: 5.2.1
- tough-cookie: 4.1.3
+ tough-cookie: 5.1.0
tunnel-agent: 0.6.0
uuid: 8.3.2
@@ -20440,13 +20765,13 @@ snapshots:
'@types/yargs': 17.0.32
chalk: 4.1.2
- '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.6.3)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.6.3)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
glob: 7.2.3
glob-promise: 4.2.2(glob@7.2.3)
magic-string: 0.27.0
react-docgen-typescript: 2.2.2(typescript@5.6.3)
- vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
optionalDependencies:
typescript: 5.6.3
@@ -20460,6 +20785,16 @@ snapshots:
optionalDependencies:
typescript: 5.6.3
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ glob: 7.2.3
+ glob-promise: 4.2.2(glob@7.2.3)
+ magic-string: 0.27.0
+ react-docgen-typescript: 2.2.2(typescript@5.6.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ optionalDependencies:
+ typescript: 5.6.3
+
'@jridgewell/gen-mapping@0.3.5':
dependencies:
'@jridgewell/set-array': 1.2.1
@@ -20575,6 +20910,15 @@ snapshots:
'@rushstack/node-core-library': 4.0.2(@types/node@20.12.7)
transitivePeerDependencies:
- '@types/node'
+ optional: true
+
+ '@microsoft/api-extractor-model@7.28.13(@types/node@22.10.7)':
+ dependencies:
+ '@microsoft/tsdoc': 0.14.2
+ '@microsoft/tsdoc-config': 0.16.2
+ '@rushstack/node-core-library': 4.0.2(@types/node@22.10.7)
+ transitivePeerDependencies:
+ - '@types/node'
'@microsoft/api-extractor@7.43.0(@types/node@20.12.7)':
dependencies:
@@ -20593,6 +20937,25 @@ snapshots:
typescript: 5.4.2
transitivePeerDependencies:
- '@types/node'
+ optional: true
+
+ '@microsoft/api-extractor@7.43.0(@types/node@22.10.7)':
+ dependencies:
+ '@microsoft/api-extractor-model': 7.28.13(@types/node@22.10.7)
+ '@microsoft/tsdoc': 0.14.2
+ '@microsoft/tsdoc-config': 0.16.2
+ '@rushstack/node-core-library': 4.0.2(@types/node@22.10.7)
+ '@rushstack/rig-package': 0.5.2
+ '@rushstack/terminal': 0.10.0(@types/node@22.10.7)
+ '@rushstack/ts-command-line': 4.19.1(@types/node@22.10.7)
+ lodash: 4.17.21
+ minimatch: 3.0.8
+ resolve: 1.22.8
+ semver: 7.5.4
+ source-map: 0.6.1
+ typescript: 5.4.2
+ transitivePeerDependencies:
+ - '@types/node'
'@microsoft/tsdoc-config@0.16.2':
dependencies:
@@ -20804,7 +21167,7 @@ snapshots:
json-parse-even-better-errors: 3.0.1
normalize-package-data: 5.0.0
proc-log: 3.0.0
- semver: 7.6.0
+ semver: 7.6.3
transitivePeerDependencies:
- bluebird
@@ -21170,12 +21533,12 @@ snapshots:
'@popperjs/core@2.11.8': {}
- '@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
+ '@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@babel/core': 7.25.8
'@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.25.8)
'@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.25.8)
- '@prefresh/vite': 2.4.5(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ '@prefresh/vite': 2.4.5(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
'@rollup/pluginutils': 4.2.1
babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.25.8)
debug: 4.3.4(supports-color@8.1.1)
@@ -21185,7 +21548,7 @@ snapshots:
resolve: 1.22.8
source-map: 0.7.4
stack-trace: 1.0.0-pre2
- vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- preact
- supports-color
@@ -21212,6 +21575,27 @@ snapshots:
- supports-color
optional: true
+ '@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ '@babel/core': 7.25.8
+ '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.25.8)
+ '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.25.8)
+ '@prefresh/vite': 2.4.5(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@rollup/pluginutils': 4.2.1
+ babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.25.8)
+ debug: 4.3.4(supports-color@8.1.1)
+ kolorist: 1.8.0
+ magic-string: 0.30.5
+ node-html-parser: 6.1.13
+ resolve: 1.22.8
+ source-map: 0.7.4
+ stack-trace: 1.0.0-pre2
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ transitivePeerDependencies:
+ - preact
+ - supports-color
+ optional: true
+
'@prefresh/babel-plugin@0.5.1':
optional: true
@@ -21221,14 +21605,14 @@ snapshots:
'@prefresh/utils@1.2.0':
optional: true
- '@prefresh/vite@2.4.5(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
+ '@prefresh/vite@2.4.5(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@babel/core': 7.25.8
'@prefresh/babel-plugin': 0.5.1
'@prefresh/core': 1.5.2
'@prefresh/utils': 1.2.0
'@rollup/pluginutils': 4.2.1
- vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
optional: true
@@ -21245,6 +21629,18 @@ snapshots:
- supports-color
optional: true
+ '@prefresh/vite@2.4.5(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ '@babel/core': 7.25.8
+ '@prefresh/babel-plugin': 0.5.1
+ '@prefresh/core': 1.5.2
+ '@prefresh/utils': 1.2.0
+ '@rollup/pluginutils': 4.2.1
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
'@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.79)(react@18.2.0)':
dependencies:
'@babel/runtime': 7.20.6
@@ -21845,7 +22241,7 @@ snapshots:
'@swc/helpers': 0.5.10
react: 18.2.0
- '@react-router/dev@7.1.1(@react-router/serve@7.1.1(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3))(@types/node@20.12.7)(babel-plugin-macros@3.1.0)(less@3.11.1)(lightningcss@1.28.1)(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ '@react-router/dev@7.1.1(@react-router/serve@7.1.1(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3))(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(less@3.11.1)(lightningcss@1.28.1)(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@babel/core': 7.25.8
'@babel/generator': 7.25.7
@@ -21876,8 +22272,8 @@ snapshots:
semver: 7.6.3
set-cookie-parser: 2.6.0
valibot: 0.41.0(typescript@5.6.3)
- vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
- vite-node: 3.0.0-beta.2(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite-node: 3.0.0-beta.2(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
optionalDependencies:
'@react-router/serve': 7.1.1(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)
typescript: 5.6.3
@@ -21894,6 +22290,55 @@ snapshots:
- supports-color
- terser
+ '@react-router/dev@7.1.2(@react-router/serve@7.1.2(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3))(@types/node@22.10.7)(babel-plugin-macros@3.1.0)(less@3.11.1)(lightningcss@1.28.1)(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ '@babel/core': 7.25.8
+ '@babel/generator': 7.25.7
+ '@babel/parser': 7.25.8
+ '@babel/plugin-syntax-decorators': 7.24.1(@babel/core@7.25.8)
+ '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.8)
+ '@babel/preset-typescript': 7.24.1(@babel/core@7.25.8)
+ '@babel/traverse': 7.25.7
+ '@babel/types': 7.25.8
+ '@npmcli/package-json': 4.0.1
+ '@react-router/node': 7.1.2(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)
+ arg: 5.0.2
+ babel-dead-code-elimination: 1.0.6
+ chokidar: 4.0.1
+ dedent: 1.5.3(babel-plugin-macros@3.1.0)
+ es-module-lexer: 1.6.0
+ exit-hook: 2.2.1
+ fs-extra: 10.1.0
+ gunzip-maybe: 1.4.2
+ jsesc: 3.0.2
+ lodash: 4.17.21
+ pathe: 1.1.2
+ picocolors: 1.1.1
+ picomatch: 2.3.1
+ prettier: 2.8.8
+ react-refresh: 0.14.0
+ react-router: 7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ semver: 7.6.3
+ set-cookie-parser: 2.6.0
+ valibot: 0.41.0(typescript@5.6.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite-node: 3.0.0-beta.2(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ optionalDependencies:
+ '@react-router/serve': 7.1.2(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)
+ typescript: 5.6.3
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - bluebird
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
'@react-router/express@7.1.1(express@4.19.2)(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)':
dependencies:
'@react-router/node': 7.1.1(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)
@@ -21902,6 +22347,14 @@ snapshots:
optionalDependencies:
typescript: 5.6.3
+ '@react-router/express@7.1.2(express@4.19.2)(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)':
+ dependencies:
+ '@react-router/node': 7.1.2(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)
+ express: 4.19.2
+ react-router: 7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ optionalDependencies:
+ typescript: 5.6.3
+
'@react-router/node@7.1.1(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)':
dependencies:
'@mjackson/node-fetch-server': 0.2.0
@@ -21912,6 +22365,16 @@ snapshots:
optionalDependencies:
typescript: 5.6.3
+ '@react-router/node@7.1.2(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)':
+ dependencies:
+ '@mjackson/node-fetch-server': 0.2.0
+ react-router: 7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ source-map-support: 0.5.21
+ stream-slice: 0.1.2
+ undici: 6.20.1
+ optionalDependencies:
+ typescript: 5.6.3
+
'@react-router/serve@7.1.1(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)':
dependencies:
'@react-router/express': 7.1.1(express@4.19.2)(react-router@7.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)
@@ -21926,6 +22389,20 @@ snapshots:
- supports-color
- typescript
+ '@react-router/serve@7.1.2(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)':
+ dependencies:
+ '@react-router/express': 7.1.2(express@4.19.2)(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)
+ '@react-router/node': 7.1.2(react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.6.3)
+ compression: 1.7.4
+ express: 4.19.2
+ get-port: 5.1.1
+ morgan: 1.10.0
+ react-router: 7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ source-map-support: 0.5.21
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
'@react-spectrum/utils@3.12.0(react@18.2.0)':
dependencies:
'@react-aria/i18n': 3.12.4(react@18.2.0)
@@ -22338,7 +22815,7 @@ snapshots:
'@remix-run/css-bundle@2.13.1': {}
- '@remix-run/dev@2.13.1(@remix-run/react@2.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3))(@remix-run/serve@2.13.1(typescript@5.6.3))(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ '@remix-run/dev@2.13.1(@remix-run/react@2.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3))(@remix-run/serve@2.13.1(typescript@5.6.3))(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@babel/core': 7.24.4
'@babel/generator': 7.24.4
@@ -22355,7 +22832,7 @@ snapshots:
'@remix-run/router': 1.20.0
'@remix-run/server-runtime': 2.13.1(typescript@5.6.3)
'@types/mdx': 2.0.13
- '@vanilla-extract/integration': 6.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ '@vanilla-extract/integration': 6.5.0(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
arg: 5.0.2
cacache: 17.1.4
chalk: 4.1.2
@@ -22397,7 +22874,7 @@ snapshots:
optionalDependencies:
'@remix-run/serve': 2.13.1(typescript@5.6.3)
typescript: 5.6.3
- vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- '@types/node'
- bluebird
@@ -22522,7 +22999,7 @@ snapshots:
estree-walker: 2.0.2
glob: 8.1.0
is-reference: 1.2.1
- magic-string: 0.30.11
+ magic-string: 0.30.17
optionalDependencies:
rollup: 4.24.0
@@ -22530,7 +23007,7 @@ snapshots:
dependencies:
'@rollup/pluginutils': 5.1.2(rollup@4.24.0)
estree-walker: 2.0.2
- magic-string: 0.30.11
+ magic-string: 0.30.17
optionalDependencies:
rollup: 4.24.0
@@ -22554,7 +23031,7 @@ snapshots:
'@rollup/plugin-replace@5.0.7(rollup@4.24.0)':
dependencies:
'@rollup/pluginutils': 5.1.2(rollup@4.24.0)
- magic-string: 0.30.11
+ magic-string: 0.30.17
optionalDependencies:
rollup: 4.24.0
@@ -22695,6 +23172,18 @@ snapshots:
z-schema: 5.0.5
optionalDependencies:
'@types/node': 20.12.7
+ optional: true
+
+ '@rushstack/node-core-library@4.0.2(@types/node@22.10.7)':
+ dependencies:
+ fs-extra: 7.0.1
+ import-lazy: 4.0.0
+ jju: 1.4.0
+ resolve: 1.22.8
+ semver: 7.5.4
+ z-schema: 5.0.5
+ optionalDependencies:
+ '@types/node': 22.10.7
'@rushstack/rig-package@0.5.2':
dependencies:
@@ -22707,6 +23196,14 @@ snapshots:
supports-color: 8.1.1
optionalDependencies:
'@types/node': 20.12.7
+ optional: true
+
+ '@rushstack/terminal@0.10.0(@types/node@22.10.7)':
+ dependencies:
+ '@rushstack/node-core-library': 4.0.2(@types/node@22.10.7)
+ supports-color: 8.1.1
+ optionalDependencies:
+ '@types/node': 22.10.7
'@rushstack/ts-command-line@4.19.1(@types/node@20.12.7)':
dependencies:
@@ -22716,6 +23213,16 @@ snapshots:
string-argv: 0.3.2
transitivePeerDependencies:
- '@types/node'
+ optional: true
+
+ '@rushstack/ts-command-line@4.19.1(@types/node@22.10.7)':
+ dependencies:
+ '@rushstack/terminal': 0.10.0(@types/node@22.10.7)
+ '@types/argparse': 1.0.38
+ argparse: 1.0.10
+ string-argv: 0.3.2
+ transitivePeerDependencies:
+ - '@types/node'
'@semantic-ui-react/event-stack@3.1.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
@@ -22914,11 +23421,26 @@ snapshots:
dependencies:
'@storybook/global': 5.0.0
- '@storybook/addon-interactions@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
+ '@storybook/addon-interactions@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.8(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@storybook/instrumenter': 8.0.8
+ '@storybook/test': 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.8(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@storybook/types': 8.0.8
+ polished: 4.3.1
+ ts-dedent: 2.2.0
+ transitivePeerDependencies:
+ - '@jest/globals'
+ - '@types/bun'
+ - '@types/jest'
+ - jest
+ - vitest
+
+ '@storybook/addon-interactions@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@storybook/global': 5.0.0
'@storybook/instrumenter': 8.0.8
- '@storybook/test': 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ '@storybook/test': 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
'@storybook/types': 8.0.8
polished: 4.3.1
ts-dedent: 2.2.0
@@ -22929,11 +23451,11 @@ snapshots:
- jest
- vitest
- '@storybook/addon-interactions@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ '@storybook/addon-interactions@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@storybook/global': 5.0.0
'@storybook/instrumenter': 8.0.8
- '@storybook/test': 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@storybook/test': 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
'@storybook/types': 8.0.8
polished: 4.3.1
ts-dedent: 2.2.0
@@ -23072,7 +23594,7 @@ snapshots:
- encoding
- supports-color
- '@storybook/builder-vite@8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(typescript@5.6.3)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
+ '@storybook/builder-vite@8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(typescript@5.6.3)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@storybook/channels': 8.0.8
'@storybook/client-logger': 8.0.8
@@ -23091,9 +23613,9 @@ snapshots:
fs-extra: 11.2.0
magic-string: 0.30.11
ts-dedent: 2.2.0
- vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
optionalDependencies:
- '@preact/preset-vite': 2.8.2(@babel/core@7.25.8)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ '@preact/preset-vite': 2.8.2(@babel/core@7.25.8)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
typescript: 5.6.3
transitivePeerDependencies:
- encoding
@@ -23126,6 +23648,33 @@ snapshots:
- encoding
- supports-color
+ '@storybook/builder-vite@8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ '@storybook/channels': 8.0.8
+ '@storybook/client-logger': 8.0.8
+ '@storybook/core-common': 8.0.8(encoding@0.1.13)
+ '@storybook/core-events': 8.0.8
+ '@storybook/csf-plugin': 8.0.8
+ '@storybook/node-logger': 8.0.8
+ '@storybook/preview': 8.0.8
+ '@storybook/preview-api': 8.0.8
+ '@storybook/types': 8.0.8
+ '@types/find-cache-dir': 3.2.1
+ browser-assert: 1.2.1
+ es-module-lexer: 0.9.3
+ express: 4.19.2
+ find-cache-dir: 3.3.2
+ fs-extra: 11.2.0
+ magic-string: 0.30.11
+ ts-dedent: 2.2.0
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ optionalDependencies:
+ '@preact/preset-vite': 2.8.2(@babel/core@7.25.8)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ typescript: 5.6.3
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
'@storybook/builder-webpack5@8.0.8(encoding@0.1.13)(esbuild@0.20.2)(typescript@5.6.3)':
dependencies:
'@storybook/channels': 8.0.8
@@ -23143,7 +23692,7 @@ snapshots:
cjs-module-lexer: 1.2.3
constants-browserify: 1.0.0
css-loader: 6.11.0(webpack@5.90.1(esbuild@0.20.2))
- es-module-lexer: 1.5.0
+ es-module-lexer: 1.6.0
express: 4.19.2
fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.3)(webpack@5.90.1(esbuild@0.20.2))
fs-extra: 11.2.0
@@ -23539,11 +24088,11 @@ snapshots:
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- '@storybook/react-vite@8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
+ '@storybook/react-vite@8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
- '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.6.3)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.6.3)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
'@rollup/pluginutils': 5.1.0(rollup@4.24.0)
- '@storybook/builder-vite': 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(typescript@5.6.3)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ '@storybook/builder-vite': 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(typescript@5.6.3)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
'@storybook/node-logger': 8.0.8
'@storybook/react': 8.0.8(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)
find-up: 5.0.0
@@ -23553,7 +24102,7 @@ snapshots:
react-dom: 18.2.0(react@18.2.0)
resolve: 1.22.8
tsconfig-paths: 4.2.0
- vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- '@preact/preset-vite'
- encoding
@@ -23585,6 +24134,29 @@ snapshots:
- typescript
- vite-plugin-glimmerx
+ '@storybook/react-vite@8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@rollup/pluginutils': 5.1.0(rollup@4.24.0)
+ '@storybook/builder-vite': 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.25.8)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)))(encoding@0.1.13)(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@storybook/node-logger': 8.0.8
+ '@storybook/react': 8.0.8(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)
+ find-up: 5.0.0
+ magic-string: 0.30.10
+ react: 18.2.0
+ react-docgen: 7.0.3
+ react-dom: 18.2.0(react@18.2.0)
+ resolve: 1.22.8
+ tsconfig-paths: 4.2.0
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ transitivePeerDependencies:
+ - '@preact/preset-vite'
+ - encoding
+ - rollup
+ - supports-color
+ - typescript
+ - vite-plugin-glimmerx
+
'@storybook/react-webpack5@8.0.8(encoding@0.1.13)(esbuild@0.20.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)':
dependencies:
'@storybook/builder-webpack5': 8.0.8(encoding@0.1.13)(esbuild@0.20.2)(typescript@5.6.3)
@@ -23655,14 +24227,14 @@ snapshots:
- encoding
- supports-color
- '@storybook/test@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
+ '@storybook/test@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.8(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@storybook/client-logger': 8.0.8
'@storybook/core-events': 8.0.8
'@storybook/instrumenter': 8.0.8
'@storybook/preview-api': 8.0.8
'@testing-library/dom': 9.3.4
- '@testing-library/jest-dom': 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ '@testing-library/jest-dom': 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.8(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
'@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4)
'@vitest/expect': 1.3.1
'@vitest/spy': 1.5.0
@@ -23675,14 +24247,34 @@ snapshots:
- jest
- vitest
- '@storybook/test@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ '@storybook/test@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@storybook/client-logger': 8.0.8
'@storybook/core-events': 8.0.8
'@storybook/instrumenter': 8.0.8
'@storybook/preview-api': 8.0.8
'@testing-library/dom': 9.3.4
- '@testing-library/jest-dom': 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@testing-library/jest-dom': 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4)
+ '@vitest/expect': 1.3.1
+ '@vitest/spy': 1.5.0
+ chai: 4.4.1
+ util: 0.12.5
+ transitivePeerDependencies:
+ - '@jest/globals'
+ - '@types/bun'
+ - '@types/jest'
+ - jest
+ - vitest
+
+ '@storybook/test@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ '@storybook/client-logger': 8.0.8
+ '@storybook/core-events': 8.0.8
+ '@storybook/instrumenter': 8.0.8
+ '@storybook/preview-api': 8.0.8
+ '@testing-library/dom': 9.3.4
+ '@testing-library/jest-dom': 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
'@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4)
'@vitest/expect': 1.3.1
'@vitest/spy': 1.5.0
@@ -23854,7 +24446,7 @@ snapshots:
tsx: 4.19.1
zod: 3.23.8
- '@tanstack/router-plugin@1.69.1(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)':
+ '@tanstack/router-plugin@1.69.1(vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)':
dependencies:
'@babel/core': 7.25.8
'@babel/generator': 7.25.7
@@ -23875,12 +24467,12 @@ snapshots:
unplugin: 1.14.1(webpack-sources@3.2.3)
zod: 3.23.8
optionalDependencies:
- vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
- webpack-sources
- '@tanstack/router-plugin@1.69.1(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)':
+ '@tanstack/router-plugin@1.69.1(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)':
dependencies:
'@babel/core': 7.25.8
'@babel/generator': 7.25.7
@@ -23901,14 +24493,14 @@ snapshots:
unplugin: 1.14.1(webpack-sources@3.2.3)
zod: 3.23.8
optionalDependencies:
- vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
- webpack-sources
- '@tanstack/router-vite-plugin@1.69.1(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)':
+ '@tanstack/router-vite-plugin@1.69.1(vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)':
dependencies:
- '@tanstack/router-plugin': 1.69.1(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)
+ '@tanstack/router-plugin': 1.69.1(vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)
transitivePeerDependencies:
- '@rsbuild/core'
- supports-color
@@ -23934,24 +24526,24 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@tanstack/start@1.70.1(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.75.0)(terser@5.30.3)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)':
+ '@tanstack/start@1.70.1(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.75.0)(terser@5.30.3)(vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)':
dependencies:
'@tanstack/react-cross-context': 1.60.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@tanstack/react-router': 1.70.1(@tanstack/router-generator@1.69.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@tanstack/router-generator': 1.69.1
- '@tanstack/router-plugin': 1.69.1(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)
+ '@tanstack/router-plugin': 1.69.1(vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))(webpack-sources@3.2.3)
'@tanstack/start-vite-plugin': 1.66.1
'@vinxi/react': 0.2.5
- '@vinxi/react-server-dom': 0.0.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
- '@vinxi/server-components': 0.4.3(vinxi@0.4.3(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))
- '@vinxi/server-functions': 0.4.3(vinxi@0.4.3(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))
+ '@vinxi/react-server-dom': 0.0.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@vinxi/server-components': 0.4.3(vinxi@0.4.3(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))
+ '@vinxi/server-functions': 0.4.3(vinxi@0.4.3(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))
import-meta-resolve: 4.1.0
isbot: 5.1.17
jsesc: 3.0.2
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
tiny-invariant: 1.3.3
- vinxi: 0.4.3(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3)
+ vinxi: 0.4.3(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3)
zod: 3.23.8
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -23999,6 +24591,23 @@ snapshots:
'@testing-library/dom': 9.3.4
cypress: 13.13.2
+ '@testing-library/cypress@10.0.2(cypress@13.13.2)':
+ dependencies:
+ '@babel/runtime': 7.20.6
+ '@testing-library/dom': 10.4.0
+ cypress: 13.13.2
+
+ '@testing-library/dom@10.4.0':
+ dependencies:
+ '@babel/code-frame': 7.25.7
+ '@babel/runtime': 7.20.6
+ '@types/aria-query': 5.0.4
+ aria-query: 5.3.0
+ chalk: 4.1.2
+ dom-accessibility-api: 0.5.16
+ lz-string: 1.5.0
+ pretty-format: 27.5.1
+
'@testing-library/dom@6.16.0':
dependencies:
'@babel/runtime': 7.20.6
@@ -24022,7 +24631,7 @@ snapshots:
'@testing-library/dom@9.3.4':
dependencies:
- '@babel/code-frame': 7.24.2
+ '@babel/code-frame': 7.25.7
'@babel/runtime': 7.20.6
'@types/aria-query': 5.0.4
aria-query: 5.1.3
@@ -24043,7 +24652,7 @@ snapshots:
lodash: 4.17.21
redent: 3.0.0
- '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@26.6.3)(vitest@2.1.3(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@26.6.3)(vitest@2.1.8(@types/node@22.10.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@adobe/css-tools': 4.3.3
'@babel/runtime': 7.20.6
@@ -24057,9 +24666,9 @@ snapshots:
'@jest/globals': 29.7.0
'@types/jest': 29.5.12
jest: 26.6.3
- vitest: 2.1.3(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vitest: 2.1.8(@types/node@22.10.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
- '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
+ '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@adobe/css-tools': 4.3.3
'@babel/runtime': 7.20.6
@@ -24073,9 +24682,9 @@ snapshots:
'@jest/globals': 29.7.0
'@types/jest': 29.5.12
jest: 29.7.0(@types/node@20.12.7)
- vitest: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ vitest: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
- '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.12.7))(vitest@2.1.8(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@adobe/css-tools': 4.3.3
'@babel/runtime': 7.20.6
@@ -24089,7 +24698,55 @@ snapshots:
'@jest/globals': 29.7.0
'@types/jest': 29.5.12
jest: 29.7.0(@types/node@20.12.7)
- vitest: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vitest: 2.1.8(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+
+ '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ '@adobe/css-tools': 4.3.3
+ '@babel/runtime': 7.20.6
+ aria-query: 5.3.0
+ chalk: 3.0.0
+ css.escape: 1.5.1
+ dom-accessibility-api: 0.6.3
+ lodash: 4.17.21
+ redent: 3.0.0
+ optionalDependencies:
+ '@jest/globals': 29.7.0
+ '@types/jest': 29.5.12
+ jest: 29.7.0(@types/node@22.10.7)
+ vitest: 2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+
+ '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ '@adobe/css-tools': 4.3.3
+ '@babel/runtime': 7.20.6
+ aria-query: 5.3.0
+ chalk: 3.0.0
+ css.escape: 1.5.1
+ dom-accessibility-api: 0.6.3
+ lodash: 4.17.21
+ redent: 3.0.0
+ optionalDependencies:
+ '@jest/globals': 29.7.0
+ '@types/jest': 29.5.12
+ jest: 29.7.0(@types/node@22.10.7)
+ vitest: 2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+
+ '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.10.7))(vitest@2.1.8(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ '@adobe/css-tools': 4.3.3
+ '@babel/runtime': 7.20.6
+ aria-query: 5.3.0
+ chalk: 3.0.0
+ css.escape: 1.5.1
+ dom-accessibility-api: 0.6.3
+ lodash: 4.17.21
+ redent: 3.0.0
+ optionalDependencies:
+ '@jest/globals': 29.7.0
+ '@types/jest': 29.5.12
+ jest: 29.7.0(@types/node@22.10.7)
+ vitest: 2.1.8(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
'@testing-library/react-hooks@8.0.1(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
@@ -24182,7 +24839,7 @@ snapshots:
'@types/babel__template@7.4.4':
dependencies:
- '@babel/parser': 7.24.4
+ '@babel/parser': 7.25.8
'@babel/types': 7.20.5
'@types/babel__traverse@7.20.6':
@@ -24389,6 +25046,10 @@ snapshots:
dependencies:
undici-types: 5.26.5
+ '@types/node@22.10.7':
+ dependencies:
+ undici-types: 6.20.0
+
'@types/normalize-package-data@2.4.4': {}
'@types/parse-json@4.0.2': {}
@@ -24514,7 +25175,7 @@ snapshots:
'@types/testing-library__dom@7.5.0':
dependencies:
- '@testing-library/dom': 9.3.4
+ '@testing-library/dom': 10.4.0
'@types/testing-library__jest-dom@5.14.9':
dependencies:
@@ -24764,7 +25425,7 @@ snapshots:
modern-ahocorasick: 1.0.1
outdent: 0.8.0
- '@vanilla-extract/integration@6.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)':
+ '@vanilla-extract/integration@6.5.0(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)':
dependencies:
'@babel/core': 7.24.4
'@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4)
@@ -24777,8 +25438,8 @@ snapshots:
lodash: 4.17.21
mlly: 1.6.1
outdent: 0.8.0
- vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
- vite-node: 1.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite-node: 1.5.0(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- '@types/node'
- less
@@ -24832,7 +25493,7 @@ snapshots:
transitivePeerDependencies:
- uWebSockets.js
- '@vinxi/plugin-directives@0.4.3(vinxi@0.4.3(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))':
+ '@vinxi/plugin-directives@0.4.3(vinxi@0.4.3(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))':
dependencies:
'@babel/parser': 7.25.8
acorn: 8.13.0
@@ -24843,84 +25504,84 @@ snapshots:
magicast: 0.2.11
recast: 0.23.6
tslib: 2.6.2
- vinxi: 0.4.3(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3)
+ vinxi: 0.4.3(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3)
- '@vinxi/react-server-dom@0.0.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ '@vinxi/react-server-dom@0.0.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
acorn-loose: 8.4.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
'@vinxi/react@0.2.5': {}
- '@vinxi/server-components@0.4.3(vinxi@0.4.3(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))':
+ '@vinxi/server-components@0.4.3(vinxi@0.4.3(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))':
dependencies:
- '@vinxi/plugin-directives': 0.4.3(vinxi@0.4.3(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))
+ '@vinxi/plugin-directives': 0.4.3(vinxi@0.4.3(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))
acorn: 8.11.3
acorn-loose: 8.4.0
acorn-typescript: 1.4.13(acorn@8.11.3)
astring: 1.8.6
magicast: 0.2.11
recast: 0.23.6
- vinxi: 0.4.3(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3)
+ vinxi: 0.4.3(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3)
- '@vinxi/server-functions@0.4.3(vinxi@0.4.3(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))':
+ '@vinxi/server-functions@0.4.3(vinxi@0.4.3(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))':
dependencies:
- '@vinxi/plugin-directives': 0.4.3(vinxi@0.4.3(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))
+ '@vinxi/plugin-directives': 0.4.3(vinxi@0.4.3(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3))
acorn: 8.11.3
acorn-loose: 8.4.0
acorn-typescript: 1.4.13(acorn@8.11.3)
astring: 1.8.6
magicast: 0.2.11
recast: 0.23.6
- vinxi: 0.4.3(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3)
+ vinxi: 0.4.3(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3)
- '@vitejs/plugin-react@4.2.1(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ '@vitejs/plugin-react@4.2.1(vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@babel/core': 7.24.4
'@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.4)
'@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.4)
'@types/babel__core': 7.20.5
react-refresh: 0.14.0
- vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-react@4.2.1(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
+ '@vitejs/plugin-react@4.2.1(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@babel/core': 7.24.4
'@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.4)
'@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.4)
'@types/babel__core': 7.20.5
react-refresh: 0.14.0
- vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-react@4.2.1(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ '@vitejs/plugin-react@4.2.1(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@babel/core': 7.24.4
'@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.4)
'@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.4)
'@types/babel__core': 7.20.5
react-refresh: 0.14.0
- vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-react@4.3.2(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ '@vitejs/plugin-react@4.3.2(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@babel/core': 7.25.8
'@babel/plugin-transform-react-jsx-self': 7.25.7(@babel/core@7.25.8)
'@babel/plugin-transform-react-jsx-source': 7.25.7(@babel/core@7.25.8)
'@types/babel__core': 7.20.5
react-refresh: 0.14.0
- vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
- '@vitest/coverage-v8@1.5.0(vitest@2.1.3(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ '@vitest/coverage-v8@1.5.0(vitest@2.1.3(@types/node@22.10.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 0.2.3
@@ -24935,11 +25596,11 @@ snapshots:
std-env: 3.7.0
strip-literal: 2.1.0
test-exclude: 6.0.0
- vitest: 2.1.3(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vitest: 2.1.3(@types/node@22.10.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
- '@vitest/coverage-v8@1.5.0(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
+ '@vitest/coverage-v8@1.5.0(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 0.2.3
@@ -24954,7 +25615,7 @@ snapshots:
std-env: 3.7.0
strip-literal: 2.1.0
test-exclude: 6.0.0
- vitest: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ vitest: 2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
@@ -24971,37 +25632,84 @@ snapshots:
chai: 5.1.1
tinyrainbow: 1.2.0
- '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
+ '@vitest/expect@2.1.8':
+ dependencies:
+ '@vitest/spy': 2.1.8
+ '@vitest/utils': 2.1.8
+ chai: 5.1.2
+ tinyrainbow: 1.2.0
+
+ '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@vitest/spy': 2.1.3
estree-walker: 3.0.3
magic-string: 0.30.11
optionalDependencies:
- vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
- '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ '@vitest/spy': 2.1.3
+ estree-walker: 3.0.3
+ magic-string: 0.30.11
+ optionalDependencies:
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+
+ '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
dependencies:
'@vitest/spy': 2.1.3
estree-walker: 3.0.3
magic-string: 0.30.11
+ optionalDependencies:
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+
+ '@vitest/mocker@2.1.8(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ '@vitest/spy': 2.1.8
+ estree-walker: 3.0.3
+ magic-string: 0.30.17
optionalDependencies:
vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ '@vitest/mocker@2.1.8(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))':
+ dependencies:
+ '@vitest/spy': 2.1.8
+ estree-walker: 3.0.3
+ magic-string: 0.30.17
+ optionalDependencies:
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ optional: true
+
'@vitest/pretty-format@2.1.3':
dependencies:
tinyrainbow: 1.2.0
+ '@vitest/pretty-format@2.1.8':
+ dependencies:
+ tinyrainbow: 1.2.0
+
'@vitest/runner@2.1.3':
dependencies:
'@vitest/utils': 2.1.3
pathe: 1.1.2
+ '@vitest/runner@2.1.8':
+ dependencies:
+ '@vitest/utils': 2.1.8
+ pathe: 1.1.2
+
'@vitest/snapshot@2.1.3':
dependencies:
'@vitest/pretty-format': 2.1.3
magic-string: 0.30.11
pathe: 1.1.2
+ '@vitest/snapshot@2.1.8':
+ dependencies:
+ '@vitest/pretty-format': 2.1.8
+ magic-string: 0.30.17
+ pathe: 1.1.2
+
'@vitest/spy@1.3.1':
dependencies:
tinyspy: 2.2.1
@@ -25014,6 +25722,10 @@ snapshots:
dependencies:
tinyspy: 3.0.2
+ '@vitest/spy@2.1.8':
+ dependencies:
+ tinyspy: 3.0.2
+
'@vitest/utils@1.3.1':
dependencies:
diff-sequences: 29.6.3
@@ -25034,6 +25746,12 @@ snapshots:
loupe: 3.1.1
tinyrainbow: 1.2.0
+ '@vitest/utils@2.1.8':
+ dependencies:
+ '@vitest/pretty-format': 2.1.8
+ loupe: 3.1.2
+ tinyrainbow: 1.2.0
+
'@volar/language-core@1.11.1':
dependencies:
'@volar/source-map': 1.11.1
@@ -25343,8 +26061,6 @@ snapshots:
ansi-regex@5.0.1: {}
- ansi-regex@6.0.1: {}
-
ansi-regex@6.1.0: {}
ansi-styles@2.2.1: {}
@@ -25671,6 +26387,14 @@ snapshots:
transitivePeerDependencies:
- debug
+ axios@1.7.9:
+ dependencies:
+ follow-redirects: 1.15.6(debug@4.3.2)
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
axobject-query@3.2.1:
dependencies:
dequal: 2.0.3
@@ -26550,6 +27274,14 @@ snapshots:
loupe: 3.1.1
pathval: 2.0.0
+ chai@5.1.2:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.1
+ deep-eql: 5.0.2
+ loupe: 3.1.2
+ pathval: 2.0.0
+
chalk@1.1.3:
dependencies:
ansi-styles: 2.2.1
@@ -26682,12 +27414,6 @@ snapshots:
cli-spinners@2.9.2: {}
- cli-table3@0.6.4:
- dependencies:
- string-width: 4.2.3
- optionalDependencies:
- '@colors/colors': 1.5.0
-
cli-table3@0.6.5:
dependencies:
string-width: 4.2.3
@@ -27111,6 +27837,22 @@ snapshots:
- ts-node
optional: true
+ create-jest@29.7.0(@types/node@22.10.7):
+ dependencies:
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ exit: 0.1.2
+ graceful-fs: 4.2.11
+ jest-config: 29.7.0(@types/node@22.10.7)
+ jest-util: 29.7.0
+ prompts: 2.4.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+ optional: true
+
croner@8.1.2: {}
cross-spawn@5.1.0:
@@ -27345,7 +28087,7 @@ snapshots:
cypress@13.13.2:
dependencies:
- '@cypress/request': 3.0.1
+ '@cypress/request': 3.0.7
'@cypress/xvfb': 1.2.4(supports-color@8.1.1)
'@types/sinonjs__fake-timers': 8.1.1
'@types/sizzle': 2.3.8
@@ -27357,7 +28099,7 @@ snapshots:
chalk: 4.1.2
check-more-types: 2.24.0
cli-cursor: 3.1.0
- cli-table3: 0.6.4
+ cli-table3: 0.6.5
commander: 6.2.1
common-tags: 1.8.2
dayjs: 1.11.10
@@ -27382,7 +28124,7 @@ snapshots:
process: 0.11.10
proxy-from-env: 1.0.0
request-progress: 3.0.0
- semver: 7.6.0
+ semver: 7.6.3
supports-color: 8.1.1
tmp: 0.2.3
untildify: 4.0.0
@@ -28814,6 +29556,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ expect-type@1.1.0: {}
+
expect@26.6.2:
dependencies:
'@jest/types': 26.6.2
@@ -30017,7 +30761,7 @@ snapshots:
jsprim: 1.4.2
sshpk: 1.18.0
- http-signature@1.3.6:
+ http-signature@1.4.0:
dependencies:
assert-plus: 1.0.0
jsprim: 2.0.2
@@ -30804,6 +31548,26 @@ snapshots:
- ts-node
optional: true
+ jest-cli@29.7.0(@types/node@22.10.7):
+ dependencies:
+ '@jest/core': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ create-jest: 29.7.0(@types/node@22.10.7)
+ exit: 0.1.2
+ import-local: 3.1.0
+ jest-config: 29.7.0(@types/node@22.10.7)
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+ optional: true
+
jest-config@26.6.3:
dependencies:
'@babel/core': 7.25.8
@@ -30861,6 +31625,37 @@ snapshots:
- supports-color
optional: true
+ jest-config@29.7.0(@types/node@22.10.7):
+ dependencies:
+ '@babel/core': 7.25.8
+ '@jest/test-sequencer': 29.7.0
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.25.8)
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ deepmerge: 4.3.1
+ glob: 7.1.6
+ graceful-fs: 4.2.11
+ jest-circus: 29.7.0
+ jest-environment-node: 29.7.0
+ jest-get-type: 29.6.3
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-runner: 29.7.0
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ micromatch: 4.0.8
+ parse-json: 5.2.0
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ strip-json-comments: 3.1.1
+ optionalDependencies:
+ '@types/node': 22.10.7
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+ optional: true
+
jest-diff@26.6.2:
dependencies:
chalk: 4.1.2
@@ -31038,7 +31833,7 @@ snapshots:
jest-message-util@26.6.2:
dependencies:
- '@babel/code-frame': 7.24.2
+ '@babel/code-frame': 7.25.7
'@jest/types': 26.6.2
'@types/stack-utils': 2.0.3
chalk: 4.1.2
@@ -31403,6 +32198,19 @@ snapshots:
- ts-node
optional: true
+ jest@29.7.0(@types/node@22.10.7):
+ dependencies:
+ '@jest/core': 29.7.0
+ '@jest/types': 29.6.3
+ import-local: 3.1.0
+ jest-cli: 29.7.0(@types/node@22.10.7)
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+ optional: true
+
jiti@1.21.6: {}
jju@1.4.0: {}
@@ -31415,6 +32223,14 @@ snapshots:
'@sideway/formula': 3.0.1
'@sideway/pinpoint': 2.0.0
+ joi@17.13.3:
+ dependencies:
+ '@hapi/hoek': 9.3.0
+ '@hapi/topo': 5.1.0
+ '@sideway/address': 4.1.5
+ '@sideway/formula': 3.0.1
+ '@sideway/pinpoint': 2.0.0
+
jotai@2.0.3(react@18.2.0):
optionalDependencies:
react: 18.2.0
@@ -31980,7 +32796,7 @@ snapshots:
mlly: 1.7.2
node-forge: 1.3.1
pathe: 1.1.2
- std-env: 3.7.0
+ std-env: 3.8.0
ufo: 1.5.3
untun: 0.1.3
uqr: 0.1.2
@@ -32163,6 +32979,8 @@ snapshots:
dependencies:
get-func-name: 2.0.2
+ loupe@3.1.2: {}
+
lower-case@2.0.2:
dependencies:
tslib: 2.6.2
@@ -32208,6 +33026,10 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
+ magic-string@0.30.17:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.0
+
magic-string@0.30.5:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
@@ -32221,8 +33043,8 @@ snapshots:
magicast@0.3.4:
dependencies:
- '@babel/parser': 7.24.4
- '@babel/types': 7.24.0
+ '@babel/parser': 7.25.8
+ '@babel/types': 7.25.8
source-map-js: 1.2.0
make-dir@2.1.0:
@@ -34116,7 +34938,7 @@ snapshots:
parse-json@5.2.0:
dependencies:
- '@babel/code-frame': 7.24.2
+ '@babel/code-frame': 7.25.7
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
@@ -34613,7 +35435,7 @@ snapshots:
postcss@8.4.38:
dependencies:
nanoid: 3.3.7
- picocolors: 1.0.0
+ picocolors: 1.1.1
source-map-js: 1.2.0
postcss@8.4.47:
@@ -34844,10 +35666,6 @@ snapshots:
q@1.5.1: {}
- qs@6.10.4:
- dependencies:
- side-channel: 1.0.6
-
qs@6.11.0:
dependencies:
side-channel: 1.0.6
@@ -34860,6 +35678,10 @@ snapshots:
dependencies:
side-channel: 1.0.6
+ qs@6.13.1:
+ dependencies:
+ side-channel: 1.0.6
+
qs@6.5.3: {}
query-string@7.1.0:
@@ -35529,6 +36351,16 @@ snapshots:
optionalDependencies:
react-dom: 18.2.0(react@18.2.0)
+ react-router@7.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
+ dependencies:
+ '@types/cookie': 0.6.0
+ cookie: 1.0.1
+ react: 18.2.0
+ set-cookie-parser: 2.6.0
+ turbo-stream: 2.4.0
+ optionalDependencies:
+ react-dom: 18.2.0(react@18.2.0)
+
react-select-async-paginate@0.5.3(react-dom@18.2.0(react@18.2.0))(react-select@4.3.1(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0):
dependencies:
'@babel/runtime': 7.20.6
@@ -36955,6 +37787,8 @@ snapshots:
std-env@3.7.0: {}
+ std-env@3.8.0: {}
+
stdin-discarder@0.1.0:
dependencies:
bl: 5.1.0
@@ -37094,7 +37928,7 @@ snapshots:
strip-ansi@7.1.0:
dependencies:
- ansi-regex: 6.0.1
+ ansi-regex: 6.1.0
strip-bom-buf@1.0.0:
dependencies:
@@ -37518,6 +38352,12 @@ snapshots:
tlds@1.203.1: {}
+ tldts-core@6.1.73: {}
+
+ tldts@6.1.73:
+ dependencies:
+ tldts-core: 6.1.73
+
tmp@0.0.33:
dependencies:
os-tmpdir: 1.0.2
@@ -37580,6 +38420,10 @@ snapshots:
universalify: 0.2.0
url-parse: 1.5.10
+ tough-cookie@5.1.0:
+ dependencies:
+ tldts: 6.1.73
+
tr46@0.0.3: {}
tr46@1.0.1:
@@ -37690,6 +38534,35 @@ snapshots:
- tsx
- yaml
+ tsup@8.3.5(@microsoft/api-extractor@7.43.0(@types/node@22.10.7))(@swc/core@1.4.16)(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.3):
+ dependencies:
+ bundle-require: 5.0.0(esbuild@0.24.0)
+ cac: 6.7.14
+ chokidar: 4.0.1
+ consola: 3.2.3
+ debug: 4.3.7
+ esbuild: 0.24.0
+ joycon: 3.1.1
+ picocolors: 1.1.1
+ postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)
+ resolve-from: 5.0.0
+ rollup: 4.24.0
+ source-map: 0.8.0-beta.0
+ sucrase: 3.35.0
+ tinyexec: 0.3.1
+ tinyglobby: 0.2.10
+ tree-kill: 1.2.2
+ optionalDependencies:
+ '@microsoft/api-extractor': 7.43.0(@types/node@22.10.7)
+ '@swc/core': 1.4.16
+ postcss: 8.4.47
+ typescript: 5.6.3
+ transitivePeerDependencies:
+ - jiti
+ - supports-color
+ - tsx
+ - yaml
+
tsutils@3.21.0(typescript@5.6.3):
dependencies:
tslib: 1.14.1
@@ -37818,6 +38691,8 @@ snapshots:
undici-types@5.26.5: {}
+ undici-types@6.20.0: {}
+
undici@5.28.4:
dependencies:
'@fastify/busboy': 2.1.1
@@ -37888,7 +38763,7 @@ snapshots:
estree-walker: 3.0.3
fast-glob: 3.3.2
local-pkg: 0.5.0
- magic-string: 0.30.11
+ magic-string: 0.30.17
mlly: 1.7.2
pathe: 1.1.2
pkg-types: 1.2.1
@@ -38042,7 +38917,7 @@ snapshots:
destr: 2.0.3
h3: 1.11.1
listhen: 1.7.2
- lru-cache: 10.2.0
+ lru-cache: 10.4.3
mri: 1.2.0
node-fetch-native: 1.6.4
ofetch: 1.3.4
@@ -38063,7 +38938,7 @@ snapshots:
unwasm@0.3.9(webpack-sources@3.2.3):
dependencies:
knitwork: 1.1.0
- magic-string: 0.30.11
+ magic-string: 0.30.17
mlly: 1.7.2
pathe: 1.1.2
pkg-types: 1.2.1
@@ -38290,11 +39165,11 @@ snapshots:
unist-util-stringify-position: 4.0.0
vfile-message: 4.0.2
- vinxi@0.4.3(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3):
+ vinxi@0.4.3(@types/node@22.10.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.28.1)(magicast@0.3.4)(sass@1.75.0)(terser@5.30.3)(webpack-sources@3.2.3):
dependencies:
- '@babel/core': 7.24.4
- '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4)
- '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4)
+ '@babel/core': 7.25.8
+ '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.8)
+ '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.25.8)
'@types/micromatch': 4.0.7
'@vinxi/listhen': 1.5.6
boxen: 7.1.1
@@ -38304,7 +39179,7 @@ snapshots:
crossws: 0.2.4
dax-sh: 0.39.2
defu: 6.1.4
- es-module-lexer: 1.5.0
+ es-module-lexer: 1.6.0
esbuild: 0.20.2
fast-glob: 3.3.2
get-port-please: 3.1.2
@@ -38324,7 +39199,7 @@ snapshots:
unctx: 2.3.1
unenv: 1.9.0
unstorage: 1.10.2(ioredis@5.4.1)
- vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
zod: 3.23.8
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -38376,12 +39251,29 @@ snapshots:
remove-trailing-separator: 1.1.0
replace-ext: 1.0.1
- vite-node@1.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ vite-node@1.5.0(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
dependencies:
cac: 6.7.14
debug: 4.3.4(supports-color@8.1.1)
pathe: 1.1.2
picocolors: 1.1.1
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ vite-node@2.1.3(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.0
+ pathe: 1.1.2
vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- '@types/node'
@@ -38394,12 +39286,12 @@ snapshots:
- supports-color
- terser
- vite-node@2.1.3(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3):
+ vite-node@2.1.3(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3):
dependencies:
cac: 6.7.14
- debug: 4.3.7
+ debug: 4.4.0
pathe: 1.1.2
- vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- '@types/node'
- less
@@ -38411,12 +39303,12 @@ snapshots:
- supports-color
- terser
- vite-node@2.1.3(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ vite-node@2.1.3(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
dependencies:
cac: 6.7.14
- debug: 4.3.7
+ debug: 4.4.0
pathe: 1.1.2
- vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- '@types/node'
- less
@@ -38428,7 +39320,7 @@ snapshots:
- supports-color
- terser
- vite-node@3.0.0-beta.2(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ vite-node@2.1.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
dependencies:
cac: 6.7.14
debug: 4.4.0
@@ -38446,14 +39338,51 @@ snapshots:
- supports-color
- terser
- vite-plugin-babel@1.2.0(@babel/core@7.24.4)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)):
+ vite-node@2.1.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.0
+ es-module-lexer: 1.6.0
+ pathe: 1.1.2
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ optional: true
+
+ vite-node@3.0.0-beta.2(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.0
+ es-module-lexer: 1.6.0
+ pathe: 1.1.2
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ vite-plugin-babel@1.2.0(@babel/core@7.24.4)(vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)):
dependencies:
'@babel/core': 7.24.4
- vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
- vite-plugin-dts@3.8.3(@types/node@20.12.7)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)):
+ vite-plugin-dts@3.8.3(@types/node@22.10.7)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)):
dependencies:
- '@microsoft/api-extractor': 7.43.0(@types/node@20.12.7)
+ '@microsoft/api-extractor': 7.43.0(@types/node@22.10.7)
'@rollup/pluginutils': 5.1.0(rollup@4.24.0)
'@vue/language-core': 1.8.27(typescript@5.6.3)
debug: 4.3.4(supports-color@8.1.1)
@@ -38462,74 +39391,74 @@ snapshots:
typescript: 5.6.3
vue-tsc: 1.8.27(typescript@5.6.3)
optionalDependencies:
- vite: 5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- '@types/node'
- rollup
- supports-color
- vite-tsconfig-paths@4.3.2(typescript@5.6.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)):
+ vite-tsconfig-paths@4.3.2(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)):
dependencies:
debug: 4.3.4(supports-color@8.1.1)
globrex: 0.1.2
tsconfck: 3.0.3(typescript@5.6.3)
optionalDependencies:
- vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
- typescript
- vite-tsconfig-paths@5.1.0(typescript@5.6.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)):
+ vite-tsconfig-paths@5.1.0(typescript@5.6.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)):
dependencies:
debug: 4.3.4(supports-color@8.1.1)
globrex: 0.1.2
tsconfck: 3.0.3(typescript@5.6.3)
optionalDependencies:
- vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
- typescript
- vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ vite@5.2.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
dependencies:
esbuild: 0.20.2
postcss: 8.4.38
rollup: 4.14.3
optionalDependencies:
- '@types/node': 20.12.7
+ '@types/node': 22.10.7
fsevents: 2.3.3
less: 3.11.1
lightningcss: 1.28.1
sass: 1.75.0
terser: 5.30.3
- vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3):
+ vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3):
dependencies:
esbuild: 0.21.5
postcss: 8.4.47
rollup: 4.24.0
optionalDependencies:
- '@types/node': 20.12.7
+ '@types/node': 22.10.7
fsevents: 2.3.3
less: 3.11.1
lightningcss: 1.24.1
sass: 1.75.0
terser: 5.30.3
- vite@5.4.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ vite@5.4.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
dependencies:
esbuild: 0.21.5
postcss: 8.4.47
rollup: 4.24.0
optionalDependencies:
- '@types/node': 20.12.7
+ '@types/node': 22.10.7
fsevents: 2.3.3
less: 3.11.1
lightningcss: 1.28.1
sass: 1.75.0
terser: 5.30.3
- vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3):
+ vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
dependencies:
esbuild: 0.21.5
postcss: 8.4.47
@@ -38538,24 +39467,37 @@ snapshots:
'@types/node': 20.12.7
fsevents: 2.3.3
less: 3.11.1
+ lightningcss: 1.28.1
+ sass: 1.75.0
+ terser: 5.30.3
+
+ vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.4.47
+ rollup: 4.24.0
+ optionalDependencies:
+ '@types/node': 22.10.7
+ fsevents: 2.3.3
+ less: 3.11.1
lightningcss: 1.24.1
sass: 1.75.0
terser: 5.30.3
- vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
dependencies:
esbuild: 0.21.5
postcss: 8.4.47
rollup: 4.24.0
optionalDependencies:
- '@types/node': 20.12.7
+ '@types/node': 22.10.7
fsevents: 2.3.3
less: 3.11.1
lightningcss: 1.28.1
sass: 1.75.0
terser: 5.30.3
- vitest-axe@0.1.0(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)):
+ vitest-axe@0.1.0(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)):
dependencies:
aria-query: 5.3.0
axe-core: 4.8.4
@@ -38563,9 +39505,9 @@ snapshots:
dom-accessibility-api: 0.5.16
lodash-es: 4.17.21
redent: 3.0.0
- vitest: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ vitest: 2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
- vitest-axe@0.1.0(vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)):
+ vitest-axe@0.1.0(vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)):
dependencies:
aria-query: 5.3.0
axe-core: 4.8.4
@@ -38573,9 +39515,19 @@ snapshots:
dom-accessibility-api: 0.5.16
lodash-es: 4.17.21
redent: 3.0.0
- vitest: 2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vitest: 2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
- vitest@2.1.3(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ vitest-axe@0.1.0(vitest@2.1.8(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)):
+ dependencies:
+ aria-query: 5.3.0
+ axe-core: 4.8.4
+ chalk: 5.3.0
+ dom-accessibility-api: 0.5.16
+ lodash-es: 4.17.21
+ redent: 3.0.0
+ vitest: 2.1.8(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+
+ vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
dependencies:
'@vitest/expect': 2.1.3
'@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
@@ -38598,7 +39550,7 @@ snapshots:
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 20.12.7
- jsdom: 16.7.0
+ jsdom: 22.1.0
transitivePeerDependencies:
- less
- lightningcss
@@ -38609,12 +39561,11 @@ snapshots:
- sugarss
- supports-color
- terser
- optional: true
- vitest@2.1.3(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ vitest@2.1.3(@types/node@22.10.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
dependencies:
'@vitest/expect': 2.1.3
- '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
'@vitest/pretty-format': 2.1.3
'@vitest/runner': 2.1.3
'@vitest/snapshot': 2.1.3
@@ -38629,11 +39580,11 @@ snapshots:
tinyexec: 0.3.0
tinypool: 1.0.1
tinyrainbow: 1.2.0
- vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
- vite-node: 2.1.3(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite-node: 2.1.3(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
why-is-node-running: 2.3.0
optionalDependencies:
- '@types/node': 20.12.7
+ '@types/node': 22.10.7
jsdom: 21.1.2
transitivePeerDependencies:
- less
@@ -38646,10 +39597,10 @@ snapshots:
- supports-color
- terser
- vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3):
+ vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3):
dependencies:
'@vitest/expect': 2.1.3
- '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
+ '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))
'@vitest/pretty-format': 2.1.3
'@vitest/runner': 2.1.3
'@vitest/snapshot': 2.1.3
@@ -38664,11 +39615,11 @@ snapshots:
tinyexec: 0.3.0
tinypool: 1.0.1
tinyrainbow: 1.2.0
- vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
- vite-node: 2.1.3(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
+ vite-node: 2.1.3(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)
why-is-node-running: 2.3.0
optionalDependencies:
- '@types/node': 20.12.7
+ '@types/node': 22.10.7
jsdom: 22.1.0
transitivePeerDependencies:
- less
@@ -38681,10 +39632,10 @@ snapshots:
- supports-color
- terser
- vitest@2.1.3(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ vitest@2.1.3(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
dependencies:
'@vitest/expect': 2.1.3
- '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
'@vitest/pretty-format': 2.1.3
'@vitest/runner': 2.1.3
'@vitest/snapshot': 2.1.3
@@ -38699,8 +39650,44 @@ snapshots:
tinyexec: 0.3.0
tinypool: 1.0.1
tinyrainbow: 1.2.0
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite-node: 2.1.3(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 22.10.7
+ jsdom: 22.1.0
+ transitivePeerDependencies:
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ vitest@2.1.8(@types/node@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ dependencies:
+ '@vitest/expect': 2.1.8
+ '@vitest/mocker': 2.1.8(vite@5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@vitest/pretty-format': 2.1.8
+ '@vitest/runner': 2.1.8
+ '@vitest/snapshot': 2.1.8
+ '@vitest/spy': 2.1.8
+ '@vitest/utils': 2.1.8
+ chai: 5.1.2
+ debug: 4.4.0
+ expect-type: 1.1.0
+ magic-string: 0.30.17
+ pathe: 1.1.2
+ std-env: 3.8.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.1
+ tinypool: 1.0.1
+ tinyrainbow: 1.2.0
vite: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
- vite-node: 2.1.3(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite-node: 2.1.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 20.12.7
@@ -38716,6 +39703,80 @@ snapshots:
- supports-color
- terser
+ vitest@2.1.8(@types/node@22.10.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ dependencies:
+ '@vitest/expect': 2.1.8
+ '@vitest/mocker': 2.1.8(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@vitest/pretty-format': 2.1.8
+ '@vitest/runner': 2.1.8
+ '@vitest/snapshot': 2.1.8
+ '@vitest/spy': 2.1.8
+ '@vitest/utils': 2.1.8
+ chai: 5.1.2
+ debug: 4.4.0
+ expect-type: 1.1.0
+ magic-string: 0.30.17
+ pathe: 1.1.2
+ std-env: 3.8.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.1
+ tinypool: 1.0.1
+ tinyrainbow: 1.2.0
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite-node: 2.1.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 22.10.7
+ jsdom: 16.7.0
+ transitivePeerDependencies:
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ optional: true
+
+ vitest@2.1.8(@types/node@22.10.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3):
+ dependencies:
+ '@vitest/expect': 2.1.8
+ '@vitest/mocker': 2.1.8(vite@5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3))
+ '@vitest/pretty-format': 2.1.8
+ '@vitest/runner': 2.1.8
+ '@vitest/snapshot': 2.1.8
+ '@vitest/spy': 2.1.8
+ '@vitest/utils': 2.1.8
+ chai: 5.1.2
+ debug: 4.4.0
+ expect-type: 1.1.0
+ magic-string: 0.30.17
+ pathe: 1.1.2
+ std-env: 3.8.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.1
+ tinypool: 1.0.1
+ tinyrainbow: 1.2.0
+ vite: 5.4.9(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ vite-node: 2.1.8(@types/node@22.10.7)(less@3.11.1)(lightningcss@1.28.1)(sass@1.75.0)(terser@5.30.3)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 22.10.7
+ jsdom: 22.1.0
+ transitivePeerDependencies:
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ optional: true
+
vue-template-compiler@2.7.16:
dependencies:
de-indent: 1.0.2
@@ -38725,7 +39786,7 @@ snapshots:
dependencies:
'@volar/typescript': 1.11.1
'@vue/language-core': 1.8.27(typescript@5.6.3)
- semver: 7.6.0
+ semver: 7.6.3
typescript: 5.6.3
w3c-hr-time@1.0.2:
@@ -38772,6 +39833,16 @@ snapshots:
transitivePeerDependencies:
- debug
+ wait-on@8.0.2:
+ dependencies:
+ axios: 1.7.9
+ joi: 17.13.3
+ lodash: 4.17.21
+ minimist: 1.2.8
+ rxjs: 7.8.1
+ transitivePeerDependencies:
+ - debug
+
walk-up-path@1.0.0: {}
walker@1.0.8: