From a74ec0c818d0218b6d9fb16b09f7372916283516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Mon, 14 Oct 2024 16:11:16 +0200 Subject: [PATCH 01/50] Fix clean make command (#6403) --- Makefile | 2 +- packages/volto/news/6403.internal | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 packages/volto/news/6403.internal diff --git a/Makefile b/Makefile index e7d46cea3c..72656906b6 100644 --- a/Makefile +++ b/Makefile @@ -67,7 +67,7 @@ test: ## Run unit tests .PHONY: clean clean: ## Clean development environment rm -rf node_modules - find ./packages -name node_modules -exec rm -rf {} \; + find ./packages -name node_modules -not -path "./packages/volto/__tests__/*" -exec rm -rf {} \; .PHONY: install install: ## Set up development environment diff --git a/packages/volto/news/6403.internal b/packages/volto/news/6403.internal new file mode 100644 index 0000000000..68fb4d2cab --- /dev/null +++ b/packages/volto/news/6403.internal @@ -0,0 +1 @@ +Fix `clean` make command @sneridagh From 00ade66e25f06681208740c4a4d0918a11b3d4a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Mon, 14 Oct 2024 18:01:43 +0200 Subject: [PATCH 02/50] [components] Fix Select component logic to support `items` use case (#6405) --- apps/nextjs/package.json | 2 +- apps/vite-ssr/package.json | 2 +- apps/vite/package.json | 2 +- packages/components/news/6405.bugfix | 1 + .../src/components/Select/Select.stories.tsx | 16 - .../src/components/Select/Select.tsx | 10 +- pnpm-lock.yaml | 3047 +---------------- 7 files changed, 21 insertions(+), 3059 deletions(-) create mode 100644 packages/components/news/6405.bugfix diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index 6d4a71dc0f..a9d8ea82ba 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -18,7 +18,7 @@ "@tanstack/react-query": "^5.37.1", "next": "14.2.2", "react": "^18", - "react-aria-components": "^1.1.1", + "react-aria-components": "^1.4.0", "react-dom": "^18" }, "devDependencies": { diff --git a/apps/vite-ssr/package.json b/apps/vite-ssr/package.json index 99ff75eb99..97e89107e5 100644 --- a/apps/vite-ssr/package.json +++ b/apps/vite-ssr/package.json @@ -25,7 +25,7 @@ "axios": "^1.6.5", "get-port": "^7.0.0", "react": "^18.2.0", - "react-aria-components": "^1.1.1", + "react-aria-components": "^1.4.0", "react-dom": "^18.2.0", "sirv": "^2.0.4" }, diff --git a/apps/vite/package.json b/apps/vite/package.json index 4bef020587..a29acbb65b 100644 --- a/apps/vite/package.json +++ b/apps/vite/package.json @@ -18,7 +18,7 @@ "@tanstack/react-router": "^1.29.2", "axios": "^1.6.5", "react": "^18.2.0", - "react-aria-components": "^1.2.1", + "react-aria-components": "^1.4.0", "react-dom": "^18.2.0" }, "devDependencies": { diff --git a/packages/components/news/6405.bugfix b/packages/components/news/6405.bugfix new file mode 100644 index 0000000000..c0bf3c8080 --- /dev/null +++ b/packages/components/news/6405.bugfix @@ -0,0 +1 @@ +Fix Select component logic to support `items` use case @sneridagh diff --git a/packages/components/src/components/Select/Select.stories.tsx b/packages/components/src/components/Select/Select.stories.tsx index bec5ec99be..97842eda90 100644 --- a/packages/components/src/components/Select/Select.stories.tsx +++ b/packages/components/src/components/Select/Select.stories.tsx @@ -51,14 +51,6 @@ export const Default: Story = { * Select renders options via render props `(item)=> React.ReactNode` */ export const Items: Story = { - render: (args) => ( - // @ts-ignore I assume this is a storybook bug when passing args - - ), args: { name: 'field-empty', label: 'field 1 title', @@ -81,14 +73,6 @@ export const Items: Story = { }; export const LotsOfItems: Story = { - render: (args) => ( - // @ts-ignore I assume this is a storybook bug when passing args - - ), args: { name: 'field-empty', label: 'field 1 title', diff --git a/packages/components/src/components/Select/Select.tsx b/packages/components/src/components/Select/Select.tsx index fdbe84c784..d57402e238 100644 --- a/packages/components/src/components/Select/Select.tsx +++ b/packages/components/src/components/Select/Select.tsx @@ -69,7 +69,15 @@ export function Select({ {description && {description}} {errorMessage} - {children} + {children ? ( + {children} + ) : ( + + {(item: SelectItemObject) => ( + {item.value} + )} + + )} )} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8403edf75c..9633971212 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^18 version: 18.2.0 react-aria-components: - specifier: ^1.1.1 - version: 1.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: ^1.4.0 + version: 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-dom: specifier: ^18 version: 18.2.0(react@18.2.0) @@ -883,8 +883,8 @@ importers: specifier: ^18.2.0 version: 18.2.0 react-aria-components: - specifier: ^1.2.1 - version: 1.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: ^1.4.0 + version: 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-dom: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) @@ -950,8 +950,8 @@ importers: specifier: ^18.2.0 version: 18.2.0 react-aria-components: - specifier: ^1.1.1 - version: 1.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: ^1.4.0 + version: 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-dom: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) @@ -4144,39 +4144,15 @@ packages: '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} - '@internationalized/date@3.5.2': - resolution: {integrity: sha512-vo1yOMUt2hzp63IutEaTUxROdvQg1qlMRsbCvbay2AK2Gai7wIgCyK5weEX3nHkiLgo4qCXHijFNC/ILhlRpOQ==} - - '@internationalized/date@3.5.4': - resolution: {integrity: sha512-qoVJVro+O0rBaw+8HPjUB1iH8Ihf8oziEnqMnvhJUSuVIrHOuZ6eNLHNvzXJKUvAtaDiqMnRlg8Z2mgh09BlUw==} - '@internationalized/date@3.5.6': resolution: {integrity: sha512-jLxQjefH9VI5P9UQuqB6qNKnvFt1Ky1TPIzHGsIlCi7sZZoMR8SdYbBGRvM0y+Jtb+ez4ieBzmiAUcpmPYpyOw==} - '@internationalized/message@3.1.2': - resolution: {integrity: sha512-MHAWsZWz8jf6jFPZqpTudcCM361YMtPIRu9CXkYmKjJ/0R3pQRScV5C0zS+Qi50O5UAm8ecKhkXx6mWDDcF6/g==} - - '@internationalized/message@3.1.4': - resolution: {integrity: sha512-Dygi9hH1s7V9nha07pggCkvmRfDd3q2lWnMGvrJyrOwYMe1yj4D2T9BoH9I6MGR7xz0biQrtLPsqUkqXzIrBOw==} - '@internationalized/message@3.1.5': resolution: {integrity: sha512-hjEpLKFlYA3m5apldLqzHqw531qqfOEq0HlTWdfyZmcloWiUbWsYXD6YTiUmQmOtarthzhdjCAwMVrB8a4E7uA==} - '@internationalized/number@3.5.1': - resolution: {integrity: sha512-N0fPU/nz15SwR9IbfJ5xaS9Ss/O5h1sVXMZf43vc9mxEG48ovglvvzBjF53aHlq20uoR6c+88CrIXipU/LSzwg==} - - '@internationalized/number@3.5.3': - resolution: {integrity: sha512-rd1wA3ebzlp0Mehj5YTuTI50AQEx80gWFyHcQu+u91/5NgdwBecO8BH6ipPfE+lmQ9d63vpB3H9SHoIUiupllw==} - '@internationalized/number@3.5.4': resolution: {integrity: sha512-h9huwWjNqYyE2FXZZewWqmCdkw1HeFds5q4Siuoms3hUQC5iPJK3aBmkFZoDSLN4UD0Bl8G22L/NdHpeOr+/7A==} - '@internationalized/string@3.2.1': - resolution: {integrity: sha512-vWQOvRIauvFMzOO+h7QrdsJmtN1AXAFVcaLWP9AseRN2o7iHceZ6bIXhBD4teZl8i91A3gxKnWBlGgjCwU6MFQ==} - - '@internationalized/string@3.2.3': - resolution: {integrity: sha512-9kpfLoA8HegiWTeCbR2livhdVeKobCnVv8tlJ6M2jF+4tcMqDo94ezwlnrUANBWPgd8U7OXIHCk2Ov2qhk4KXw==} - '@internationalized/string@3.2.4': resolution: {integrity: sha512-BcyadXPn89Ae190QGZGDUZPqxLj/xsP4U1Br1oSy8yfIjmpJ8cJtGYleaodqW/EmzFjwELtwDojLkf3FhV6SjA==} @@ -5252,16 +5228,6 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/breadcrumbs@3.5.11': - resolution: {integrity: sha512-bQz4g2tKvcWxeqPGj9O0RQf++Ka8f2o/pJMJB+QQ27DVQWhxpQpND//oFku2aFYkxHB/fyD9qVoiqpQR25bidw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/breadcrumbs@3.5.13': - resolution: {integrity: sha512-G1Gqf/P6kVdfs94ovwP18fTWuIxadIQgHsXS08JEVcFVYMjb9YjqnEBaohUxD1tq2WldMbYw53ahQblT4NTG+g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/breadcrumbs@3.5.17': resolution: {integrity: sha512-LJQ+u3TbPmtAWZ3/qC6VfLCzXiwVoB6GmI+HJ2pbjs6H9L8MoiLHsA4mgcz+P0rvx7SCs0Rhvy4JurV6R/R4xw==} peerDependencies: @@ -5272,44 +5238,12 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/button@3.9.3': - resolution: {integrity: sha512-ZXo2VGTxfbaTEnfeIlm5ym4vYpGAy8sGrad8Scv+EyDAJWLMKokqctfaN6YSWbqUApC3FN63IvMqASflbmnYig==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/button@3.9.5': - resolution: {integrity: sha512-dgcYR6j8WDOMLKuVrtxzx4jIC05cVKDzc+HnPO8lNkBAOfjcuN5tkGRtIjLtqjMvpZHhQT5aDbgFpIaZzxgFIg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/calendar@3.5.12': resolution: {integrity: sha512-C8VRjRwEVPaGoCtjOlC0lb3mVSz4ajbal8jfvcbp7LOqCcmOVTUbiM7EPTy60EfZRanFNSp2D1ZstEZDU+cqsg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/calendar@3.5.6': - resolution: {integrity: sha512-PA0Ur5WcODMn7t2gCUvq61YktkB+WlSZjzDr5kcY3sdl53ZjiyqCa2hYgrb6R0J859LVJXAp+5Qaproz8g1oLA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/calendar@3.5.8': - resolution: {integrity: sha512-Whlp4CeAA5/ZkzrAHUv73kgIRYjw088eYGSc+cvSOCxfrc/2XkBm9rNrnSBv0DvhJ8AG0Fjz3vYakTmF3BgZBw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/checkbox@3.14.1': - resolution: {integrity: sha512-b4rtrg5SpRSa9jBOqzJMmprJ+jDi3KyVvUh+DsvISe5Ti7gVAhMBgnca1D0xBp22w2jhk/o4gyu1bYxGLum0GA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/checkbox@3.14.3': - resolution: {integrity: sha512-EtBJL6iu0gvrw3A4R7UeVLR6diaVk/mh4kFBc7c8hQjpEJweRr4hmJT3hrNg3MBcTWLxFiMEXPGgWEwXDBygtA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/checkbox@3.14.7': resolution: {integrity: sha512-aqVxXcr/8P7pQ7R34DlJX2SdBvWtHof9lLTVBY/9tgMplcKIoVBdlVUYPtqWxT3tGan+rruPQHbzTx8zJRFJyg==} peerDependencies: @@ -5327,60 +5261,18 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/color@3.0.0-beta.33': - resolution: {integrity: sha512-nhqnIHYm5p6MbuF3cC6lnqzG7MjwBsBd0DtpO+ByFYO+zxpMMbeC5R+1SFxvapR4uqmAzTotbtiUCGsG+SUaIg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/combobox@3.10.4': resolution: {integrity: sha512-jzLyRwpwH5SCfQl5giLSwLaw9EKlRiMG39kDZLRB4MQ1MN4sIdIP2TXBbdYcSLtYjduJm2JfRvs2ezI+QI+umA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/combobox@3.8.4': - resolution: {integrity: sha512-HyTWIo2B/0xq0Of+sDEZCfJyf4BvCvDYIWG4UhjqL1kHIHIGQyyr+SldbVUjXVYnk8pP1eGB3ttiREujjjALPQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/combobox@3.9.1': - resolution: {integrity: sha512-SpK92dCmT8qn8aEcUAihRQrBb5LZUhwIbDExFII8PvUvEFy/PoQHXIo3j1V29WkutDBDpMvBv/6XRCHGXPqrhQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/datepicker@3.10.1': - resolution: {integrity: sha512-4HZL593nrNMa1GjBmWEN/OTvNS6d3/16G1YJWlqiUlv11ADulSbqBIjMmkgwrJVFcjrgqtXFy+yyrTA/oq94Zw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/datepicker@3.11.3': resolution: {integrity: sha512-HwGxDctFry5ew3Cu7gWpUVodaCg//V6NCihSRjLvnW/TWG+UFLzTafxTqqm8eRbicT3DJlXCLOUPk8Ek0txW6A==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/datepicker@3.9.3': - resolution: {integrity: sha512-1AjCAizd88ACKjVNhFazX4HZZFwWi2rsSlGCTm66Nx6wm5N/Cpbm466dpYEFyQUsKSOG4CC65G1zfYoMPe48MQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/dialog@3.5.12': - resolution: {integrity: sha512-7UJR/h/Y364u6Ltpw0bT51B48FybTuIBacGpEJN5IxZlpxvQt0KQcBDiOWfAa/GQogw4B5hH6agaOO0nJcP49Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/dialog@3.5.14': - resolution: {integrity: sha512-oqDCjQ8hxe3GStf48XWBf2CliEnxlR9GgSYPHJPUc69WBj68D9rVcCW3kogJnLAnwIyf3FnzbX4wSjvUa88sAQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/dialog@3.5.18': resolution: {integrity: sha512-j0x0OwDZKyW2GqBZl2Dw/pHl0uSCzhHOg5jNeulkZC8xQa8COuksQf5NFzPmgRPnzqpbgvSzCSs41ymS8spmFg==} peerDependencies: @@ -5393,49 +5285,17 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/dnd@3.5.3': - resolution: {integrity: sha512-0gi6sRnr97fSQnGy+CMt+99/+vVqr+qv2T9Ts8X9TAzxHNokz5QfSL88QSlTU36EnAVLxPY18iZQWCExSjKpEQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/dnd@3.6.1': - resolution: {integrity: sha512-6WnujUTD+cIYZVF/B+uXdHyJ+WSpbYa8jH282epvY4FUAq1qLmen12/HHcoj/5dswKQe8X6EM3OhkQM89d9vFw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/dnd@3.7.3': resolution: {integrity: sha512-SF7v1AzpXr4CSf98pSzjcSBCaezpP6rsSnSJTz0j2jrYfdQhX0MPA2lyxS+kgU1AEzkK19THQeHuj8hxQc0bVw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/focus@3.16.2': - resolution: {integrity: sha512-Rqo9ummmgotESfypzFjI3uh58yMpL+E+lJBbQuXkBM0u0cU2YYzu0uOrFrq3zcHk997udZvq1pGK/R+2xk9B7g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/focus@3.17.1': - resolution: {integrity: sha512-FLTySoSNqX++u0nWZJPPN5etXY0WBxaIe/YuL/GTEeuqUIuC/2bJSaw5hlsM6T2yjy6Y/VAxBcKSdAFUlU6njQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/focus@3.18.3': resolution: {integrity: sha512-WKUElg+5zS0D3xlVn8MntNnkzJql2J6MuzAMP8Sv5WTgFDse/XGR842dsxPTIyKKdrWVCRegCuwa4m3n/GzgJw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/form@3.0.3': - resolution: {integrity: sha512-5Q2BHE4TTPDzGY2npCzpRRYshwWUb3SMUA/Cbz7QfEtBk+NYuVaq3KjvqLqgUUdyKtqLZ9Far0kIAexloOC4jw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/form@3.0.5': - resolution: {integrity: sha512-n290jRwrrRXO3fS82MyWR+OKN7yznVesy5Q10IclSTVYHHI3VI53xtAPr/WzNjJR1um8aLhOcDNFKwnNIUUCsQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/form@3.0.9': resolution: {integrity: sha512-9M6IfC5t47G19c8roHWnkKd275BrECTzyTsc4rzf5OepJfHfG4evST6x+4gGOFYi8soC9XoQdJl4TRh/mft+gw==} peerDependencies: @@ -5447,61 +5307,17 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/grid@3.8.8': - resolution: {integrity: sha512-7Bzbya4tO0oIgqexwRb8D6ZdC0GASYq9f/pnkrqocgvG9e1SCld4zOioKbYQDvAK/NnbCgXmmdqFAcLM/iazaA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/grid@3.9.1': - resolution: {integrity: sha512-fGEZqAEaS8mqzV/II3N4ndoNWegIcbh+L3PmKbXdpKKUP8VgMs/WY5rYl5WAF0f5RoFwXqx3ibDLeR9tKj/bOg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/gridlist@3.7.5': - resolution: {integrity: sha512-RmHEJ++vngHYEWbUCtLLmGh7H3vNd2Y9S0q/9SgHFPbqPZycT5mxDZ2arqpOXeHRVRvPBaW9ZlMxI2bPOePrYw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/gridlist@3.8.1': - resolution: {integrity: sha512-vVPkkA+Ct0NDcpnNm/tnYaBumg0fP9pXxsPLqL1rxvsTyj1PaIpFTZ4corabPTbTDExZwUSTS3LG1n+o1OvBtQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/gridlist@3.9.4': resolution: {integrity: sha512-gGzS4ToSynn2KBycf9UCsWIJIbVl4RjoCjPF4NnukwzHmrXwbtZnlF0xsORQ5QxfqHH9UehTAHWFvOOHJSZZ2w==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/i18n@3.10.2': - resolution: {integrity: sha512-Z1ormoIvMOI4mEdcFLYsoJy9w/EzBdBmgfLP+S/Ah+1xwQOXpgwZxiKOhYHpWa0lf6hkKJL34N9MHJvCJ5Crvw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/i18n@3.11.1': - resolution: {integrity: sha512-vuiBHw1kZruNMYeKkTGGnmPyMnM5T+gT8bz97H1FqIq1hQ6OPzmtBZ6W6l6OIMjeHI5oJo4utTwfZl495GALFQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/i18n@3.12.3': resolution: {integrity: sha512-0Tp/4JwnCVNKDfuknPF+/xf3/woOc8gUjTU2nCjO3mCVb4FU7KFtjxQ2rrx+6hpIVG6g+N9qfMjRa/ggVH0CJg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/interactions@3.21.1': - resolution: {integrity: sha512-AlHf5SOzsShkHfV8GLLk3v9lEmYqYHURKcXWue0JdYbmquMRkUsf/+Tjl1+zHVAQ8lKqRnPYbTmc4AcZbqxltw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/interactions@3.21.3': - resolution: {integrity: sha512-BWIuf4qCs5FreDJ9AguawLVS0lV9UU+sK4CCnbCNNmYqOWY+1+gRXCsnOM32K+oMESBxilAjdHW5n1hsMqYMpA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/interactions@3.22.3': resolution: {integrity: sha512-RRUb/aG+P0IKTIWikY/SylB6bIbLZeztnZY2vbe7RAG5MgVaCgn5HQ45SI15GlTmhsFG8CnF6slJsUFJiNHpbQ==} peerDependencies: @@ -5512,167 +5328,53 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/label@3.7.6': - resolution: {integrity: sha512-ap9iFS+6RUOqeW/F2JoNpERqMn1PvVIo3tTMrJ1TY1tIwyJOxdCBRgx9yjnPBnr+Ywguep+fkPNNi/m74+tXVQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/label@3.7.8': - resolution: {integrity: sha512-MzgTm5+suPA3KX7Ug6ZBK2NX9cin/RFLsv1BdafJ6CZpmUSpWnGE/yQfYUB7csN7j31OsZrD3/P56eShYWAQfg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/link@3.6.5': - resolution: {integrity: sha512-kg8CxKqkciQFzODvLAfxEs8gbqNXFZCW/ISOE2LHYKbh9pA144LVo71qO3SPeYVVzIjmZeW4vEMdZwqkNozecw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/link@3.7.1': - resolution: {integrity: sha512-a4IaV50P3fXc7DQvEIPYkJJv26JknFbRzFT5MJOMgtzuhyJoQdILEUK6XHYjcSSNCA7uLgzpojArVk5Hz3lCpw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/link@3.7.5': resolution: {integrity: sha512-j0F1BIdNoE7Tl+0KzzjbrmYuxt4aWAmDZDHvJKiYg71Jb1BAPz71eE1O1ybMoO04+OG/6HrRZTragfSQLAJ58A==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/listbox@3.11.5': - resolution: {integrity: sha512-y3a3zQYjT+JKgugCMMKS7K9sRoCoP1Z6Fiiyfd77OHXWzh9RlnvWGsseljynmbxLzSuPwFtCYkU1Jz4QwsPUIg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/listbox@3.12.1': - resolution: {integrity: sha512-7JiUp0NGykbv/HgSpmTY1wqhuf/RmjFxs1HZcNaTv8A+DlzgJYc7yQqFjP3ZA/z5RvJFuuIxggIYmgIFjaRYdA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/listbox@3.13.4': resolution: {integrity: sha512-2aG4jzlB+srYBeM9ap/BNZe0E04yMjY2dPGXcigkaSJt6/yYAHCygXuouf2MzvBfkdV4QWyHIIgWZmAXXl6reg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/live-announcer@3.3.2': - resolution: {integrity: sha512-aOyPcsfyY9tLCBhuUaYCruwcd1IrYLc47Ou+J7wMzjeN9v4lsaEfiN12WFl8pDqOwfy6/7It2wmlm5hOuZY8wQ==} - - '@react-aria/live-announcer@3.3.4': - resolution: {integrity: sha512-w8lxs35QrRrn6pBNzVfyGOeqWdxeVKf9U6bXIVwhq7rrTqRULL8jqy8RJIMfIs1s8G5FpwWYjyBOjl2g5Cu1iA==} - '@react-aria/live-announcer@3.4.0': resolution: {integrity: sha512-VBxEdMq2SbtRbNTQNcDR2G6E3lEl5cJSBiHTTO8Ln1AL76LiazrylIXGgoktqzCfRQmyq0v8CHk1cNKDU9mvJg==} - '@react-aria/menu@3.13.1': - resolution: {integrity: sha512-jF80YIcvD16Fgwm5pj7ViUE3Dj7z5iewQixLaFVdvpgfyE58SD/ZVU9/JkK5g/03DYM0sjpUKZGkdFxxw8eKnw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/menu@3.14.1': - resolution: {integrity: sha512-BYliRb38uAzq05UOFcD5XkjA5foQoXRbcH3ZufBsc4kvh79BcP1PMW6KsXKGJ7dC/PJWUwCui6QL1kUg8PqMHA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/menu@3.15.4': resolution: {integrity: sha512-4wfq8Lb7AltgSzBHdtypiPOnsRm8hHv7PUuHhlq/VT9yAkEFk4Flc7vKVF6VSFqrnCfyCf66B5aeapjNInAONg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/meter@3.4.11': - resolution: {integrity: sha512-P1G3Jdh0f/uieUDqvc3Ee4wzqBJa7H077BVSC3KPRqEp6YY7JimZGWjOwbFlO2PXhryXm/dI8EzUmh+4ZXjq/g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/meter@3.4.13': - resolution: {integrity: sha512-oG6KvHQM3ri93XkYQkgEaMKSMO9KNDVpcW1MUqFfqyUXHFBRZRrJB4BTXMZ4nyjheFVQjVboU51fRwoLjOzThg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/meter@3.4.17': resolution: {integrity: sha512-08wbQhfvVWzpWilhn/WD7cQ7TqafS/66umTk7+X6BW6TrS1//6loNNJV62IC3F7sskel4iEAtl2gW0WpW8zEdg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/numberfield@3.11.1': - resolution: {integrity: sha512-JQ1Z+Ho5H+jeav7jt9A4vBsIQR/Dd2CFbObrULjGkqSrnWjARFZBv3gZwmfGCtplEPeAv9buYKHAqebPtJNUww==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/numberfield@3.11.3': - resolution: {integrity: sha512-QQ9ZTzBbRI8d9ksaBWm6YVXbgv+5zzUsdxVxwzJVXLznvivoORB8rpdFJzUEWVCo25lzoBxluCEPYtLOxP1B0w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/numberfield@3.11.7': resolution: {integrity: sha512-9bqg4sKqc5XLppHzJFRhgtkoeMu0N6Zg0AuVSiE/3CxE5Ad+y8tKpFEx9zh4o5BItyOWy18w5ZXnKjJGjd7waQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/overlays@3.21.1': - resolution: {integrity: sha512-djEBDF+TbIIOHWWNpdm19+z8xtY8U+T+wKVQg/UZ6oWnclSqSWeGl70vu73Cg4HVBJ4hKf1SRx4Z/RN6VvH4Yw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/overlays@3.22.1': - resolution: {integrity: sha512-GHiFMWO4EQ6+j6b5QCnNoOYiyx1Gk8ZiwLzzglCI4q1NY5AG2EAmfU4Z1+Gtrf2S5Y0zHbumC7rs9GnPoGLUYg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/overlays@3.23.3': resolution: {integrity: sha512-vRW4DL466a27BBIP6dQqmmei4nX/nsur6DyF0Hmd46ygwOdvdA+5MwvXZUz9yUamB79UeS9BMQZuBVwhjoMwBQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/progress@3.4.11': - resolution: {integrity: sha512-RePHbS15/KYFiApYLdwazwvWKsB9q0Kn5DGCSb0hqCC+k2Eui8iVVOsegswiP+xqkk/TiUCIkBEw22W3Az4kTg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/progress@3.4.13': - resolution: {integrity: sha512-YBV9bOO5JzKvG8QCI0IAA00o6FczMgIDiK8Q9p5gKorFMatFUdRayxlbIPoYHMi+PguLil0jHgC7eOyaUcrZ0g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/progress@3.4.17': resolution: {integrity: sha512-5+01WNibLoNS5KcfU5p6vg7Lhz17plqqzv/uITx28zzj3saaj0VLR7n57Ig2fXe8ZEQoUS89BS3sIEsIf96S1A==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/radio@3.10.2': - resolution: {integrity: sha512-CTUTR+qt3BLjmyQvKHZuVm+1kyvT72ZptOty++sowKXgJApTLdjq8so1IpaLAr8JIfzqD5I4tovsYwIQOX8log==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/radio@3.10.4': - resolution: {integrity: sha512-3fmoMcQtCpgjTwJReFjnvIE/C7zOZeCeWUn4JKDqz9s1ILYsC3Rk5zZ4q66tFn6v+IQnecrKT52wH6+hlVLwTA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/radio@3.10.8': resolution: {integrity: sha512-/vKQhKqpoCB/VqHuc46OOU+31HFtg6svcYzHBbz0wN/DSVCygYeTfB/36kY7x2GWWkT0pCsB4OcHJ+/0G3EfkQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/searchfield@3.7.3': - resolution: {integrity: sha512-mnYI969R7tU3yMRIGmY1+peq7tmEW0W3MB/J2ImK36Obz/91tTtspHHEeFtPlQDLIyvVPB0Ucam4LIxCKPJm/Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/searchfield@3.7.5': - resolution: {integrity: sha512-h1sMUOWjhevaKKUHab/luHbM6yiyeN57L4RxZU0IIc9Ww0h5Rp2GUuKZA3pcdPiExHje0aijcImL3wBHEbKAzw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/searchfield@3.7.9': resolution: {integrity: sha512-EHODG7HDFthwG5tx4fh+WP2hjNOp/rPAqdNScKBAN73nEf0F/qQpIwmdZF0EycCOzGSM5hhihjm0yMtTFYuzOQ==} peerDependencies: @@ -5684,46 +5386,12 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/select@3.14.3': - resolution: {integrity: sha512-9KCxI41FI+jTxEfUzRsMdJsZvjkCuuhL4UHig8MZXtXs0nsi7Ir3ezUDQ9m5MSG+ooBYM/CA9DyLDvo5Ioef+g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/select@3.14.5': - resolution: {integrity: sha512-s8jixBuTUNdKWRHe2tIJqp55ORHeUObGMw1s7PQRRVrrHPdNSYseAOI9B2W7qpl3hKhvjJg40UW+45mcb1WKbw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/selection@3.17.5': - resolution: {integrity: sha512-gO5jBUkc7WdkiFMlWt3x9pTSuj3Yeegsxfo44qU5NPlKrnGtPRZDWrlACNgkDHu645RNNPhlyoX0C+G8mUg1xA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/selection@3.18.1': - resolution: {integrity: sha512-GSqN2jX6lh7v+ldqhVjAXDcrWS3N4IsKXxO6L6Ygsye86Q9q9Mq9twWDWWu5IjHD6LoVZLUBCMO+ENGbOkyqeQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/selection@3.20.0': resolution: {integrity: sha512-h3giMcXo4SMZRL5HrqZvOLNTsdh5jCXwLUx0wpj/2EF0tcYQL6WDfn1iJ+rHARkUIs7X70fUV8iwlbUySZy1xg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/separator@3.3.11': - resolution: {integrity: sha512-UTla+3P2pELpP73WSfbwZgP1y1wODFBQbEOHnUxxO8ocyaUyQLJdvc07bBLLpPoyutlggRG0v9ACo0Rui7AjOg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/separator@3.3.13': - resolution: {integrity: sha512-hofA6JCPnAOqSE9vxnq7Dkazr7Kb2A0I5sR16fOG7ddjYRc/YEY5Nv7MWfKUGU0kNFHkgNjsDAILERtLechzeA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/separator@3.4.3': resolution: {integrity: sha512-L+eCmSGfRJ9jScHZqBkmOkp44LBARisDjRdYbGrLlsAEcOiHUXufnfpxz2rgkUGBdUgnI9hIk12q5kdy0UxGjg==} peerDependencies: @@ -5734,203 +5402,67 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/slider@3.7.6': - resolution: {integrity: sha512-ZeZhyHzhk9gxGuThPKgX2K3RKsxPxsFig1iYoJvqP8485NtHYQIPht2YcpEKA9siLxGF0DR9VCfouVhSoW0AEA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/slider@3.7.8': - resolution: {integrity: sha512-MYvPcM0K8jxEJJicUK2+WxUkBIM/mquBxOTOSSIL3CszA80nXIGVnLlCUnQV3LOUzpWtabbWaZokSPtGgOgQOw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/spinbutton@3.6.3': - resolution: {integrity: sha512-IlfhRu/pc9zOt2C5zSEB7NmmzddvWisGx2iGzw8BwIKMD+cN3uy+Qwp+sG6Z/JzFEBN0F6Mxm3l5lhbiqjpICQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/spinbutton@3.6.5': - resolution: {integrity: sha512-0aACBarF/Xr/7ixzjVBTQ0NBwwwsoGkf5v6AVFVMTC0uYMXHTALvRs+ULHjHMa5e/cX/aPlEvaVT7jfSs+Xy9Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/spinbutton@3.6.9': resolution: {integrity: sha512-m+uVJdiIc2LrLVDGjU7p8P2O2gUvTN26GR+NgH4rl+tUSuAB0+T1rjls/C+oXEqQjCpQihEB9Bt4M+VHpzmyjA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/ssr@3.9.2': - resolution: {integrity: sha512-0gKkgDYdnq1w+ey8KzG9l+H5Z821qh9vVjztk55rUg71vTk/Eaebeir+WtzcLLwTjw3m/asIjx8Y59y1lJZhBw==} - engines: {node: '>= 12'} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/ssr@3.9.4': - resolution: {integrity: sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==} - engines: {node: '>= 12'} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/ssr@3.9.6': resolution: {integrity: sha512-iLo82l82ilMiVGy342SELjshuWottlb5+VefO3jOQqQRNYnJBFpUSadswDPbRimSgJUZuFwIEYs6AabkP038fA==} engines: {node: '>= 12'} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/switch@3.6.2': - resolution: {integrity: sha512-X5m/omyhXK+V/vhJFsHuRs2zmt9Asa/RuzlldbXnWohLdeuHMPgQnV8C9hg3f+sRi3sh9UUZ64H61pCtRoZNwg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/switch@3.6.4': - resolution: {integrity: sha512-2nVqz4ZuJyof47IpGSt3oZRmp+EdS8wzeDYgf42WHQXrx4uEOk1mdLJ20+NnsYhj/2NHZsvXVrjBeKMjlMs+0w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/switch@3.6.8': resolution: {integrity: sha512-6Q0w7o+liB0ztKPL9UaRfX+hPPuy71AL3SuVCMK7RKfPqZwcmlwUDp2gr3j5fvs8gLev0r42XtEBqmGwkHTkEw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/table@3.13.5': - resolution: {integrity: sha512-P2nHEDk2CCoEbMFKNCyBC9qvmv7F/IXARDt/7z/J4mKFgU2iNSK+/zw6yrb38q33Zlk8hDaqSYNxHlMrh+/1MQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/table@3.14.1': - resolution: {integrity: sha512-WaPgQe4zQF5OaluO5rm+Y2nEoFR63vsLd4BT4yjK1uaFhKhDY2Zk+1SCVQvBLLKS4WK9dhP05nrNzT0vp/ZPOw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/table@3.15.4': resolution: {integrity: sha512-t4+vtUF63i6OrXmZ0AA/RmWyIt8cieUm7cSXhQMooAgUjkvVqTNkQQRsntVOb+UNI5KmiGSe4jB3H4GVXz2X9w==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/tabs@3.8.5': - resolution: {integrity: sha512-Jvt33/W+66n5oCxVwHAYarJ3Fit61vULiPcG7uTez0Mf11cq/C72wOrj+ZuNz6PTLTi2veBNQ7MauY72SnOjRg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/tabs@3.9.1': - resolution: {integrity: sha512-S5v/0sRcOaSXaJYZuuy1ZVzYc7JD4sDyseG1133GjyuNjJOFHgoWMb+b4uxNIJbZxnLgynn/ZDBZSO+qU+fIxw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/tabs@3.9.6': resolution: {integrity: sha512-iPQ2Im+srnSB06xIdVNHZZDJnZmUR0IG0MZAp6FXmbkCeLAd9tZQHgSFYwswBfgAStNnyFQHP5aSBJOJMRCACg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/tag@3.3.3': - resolution: {integrity: sha512-tlJD9qj1XcsPIZD7DVJ6tWv8t7Z87/8qkbRDx7ugNqeHso9z0WqH9ZkSt17OFUWE2IQIk3V8D3iBSOtmhXcZGQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/tag@3.4.1': - resolution: {integrity: sha512-gcIGPYZ2OBwMT4IHnlczEezKlxr0KRPL/mSfm2Q91GE027ZGOJnqusH9az6DX1qxrQx8x3vRdqYT2KmuefkrBQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/tag@3.4.6': resolution: {integrity: sha512-Uf1sPabwJx99diyXJTaVguiYozS49opjQxmK1PPbb87ipNN1YlSDVbP05IelVMbnbxXHudsRmzPOBmmblcj1GQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/textfield@3.14.3': - resolution: {integrity: sha512-wPSjj/mTABspYQdahg+l5YMtEQ3m5iPCTtb5g6nR1U1rzJkvS4i5Pug6PUXeLeMz2H3ToflPWGlNOqBioAFaOQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/textfield@3.14.5': - resolution: {integrity: sha512-hj7H+66BjB1iTKKaFXwSZBZg88YT+wZboEXZ0DNdQB2ytzoz/g045wBItUuNi4ZjXI3P+0AOZznVMYadWBAmiA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/textfield@3.14.9': resolution: {integrity: sha512-LPwZhthDVLyvnzXWco4eyYCD2pFmQ4Vw9ha9tb3QkZUIP6j8E52y76j0c59Nq7XYus3IHatVe7yYQk7kbo8Zrg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/toggle@3.10.2': - resolution: {integrity: sha512-DgitscHWgI6IFgnvp2HcMpLGX/cAn+XX9kF5RJQbRQ9NqUgruU5cEEGSOLMrEJ6zXDa2xmOiQ+kINcyNhA+JLg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/toggle@3.10.4': - resolution: {integrity: sha512-bRk+CdB8QzrSyGNjENXiTWxfzYKRw753iwQXsEAU7agPCUdB8cZJyrhbaUoD0rwczzTp2zDbZ9rRbUPdsBE2YQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/toggle@3.10.8': resolution: {integrity: sha512-N6WTgE8ByMYY+ZygUUPGON2vW5NrxwU91H98+Nozl+Rq6ZYR2fD9i8oRtLtrYPxjU2HmaFwDyQdWvmMJZuDxig==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/toolbar@3.0.0-beta.3': - resolution: {integrity: sha512-tPIEPRsZI/6Mb0tAW/GBTt3wBk7dfJg/eUnTloY8NHialvDa+cMUQyUVzPyLWGpErhYeBeutBmw1e2seMjmu+A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/toolbar@3.0.0-beta.5': - resolution: {integrity: sha512-c8spY7aeLI6L+ygdXvEbAzaT41vExsxZ1Ld0t7BB+6iEF3nyBNJHshjkgdR7nv8FLgNk0no4tj0GTq4Jj4UqHQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/toolbar@3.0.0-beta.9': resolution: {integrity: sha512-P80zgbPb0aIg22fHlgHRXXUSpNSAOnh1ljsLiSHAGdXPrC5nRijYwwKi7DNRsXqD+ljEJwF6ekZPo95dXXeYAA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/tooltip@3.7.2': - resolution: {integrity: sha512-6jXOSGPao3gPgUQWLbH2r/jxGMqIaIKrJgfwu9TQrh+UkwwiTYW20EpEDCYY2nRFlcoi7EYAiPDSEbHCwXS7Lg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/tooltip@3.7.4': - resolution: {integrity: sha512-+XRx4HlLYqWY3fB8Z60bQi/rbWDIGlFUtXYbtoa1J+EyRWfhpvsYImP8qeeNO/vgjUtDy1j9oKa8p6App9mBMQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/tooltip@3.7.8': resolution: {integrity: sha512-dlWfS3w8E6dw5Xoist4cVX2GQE5oh3VQr88dRyLto7BAPLFrp3I+8c9mZCVUobLS/f5QcQzLkqw750s4ENCyiw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/tree@3.0.0-alpha.1': - resolution: {integrity: sha512-CucyeJ4VeAvWO5UJHt/l9JO65CVtsOVUctMOVNCQS77Isqp3olX9pvfD3LXt8fD5Ph2g0Q/b7siVpX5ieVB32g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/tree@3.0.0-beta.0': resolution: {integrity: sha512-bF9sp7x+Ciy0N2KJwy8epmDoNblyVmeB4vR/KWLVIKMjANCpzTbvhWZUBpQxkpO0eupInU2uN+FMNr0WKMyd7Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/utils@3.23.2': - resolution: {integrity: sha512-yznR9jJ0GG+YJvTMZxijQwVp+ahP66DY0apZf7X+dllyN+ByEDW+yaL1ewYPIpugxVzH5P8jhnBXsIyHKN411g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/utils@3.24.1': - resolution: {integrity: sha512-O3s9qhPMd6n42x9sKeJ3lhu5V1Tlnzhu6Yk8QOvDuXf7UGuUjXf9mzfHJt1dYzID4l9Fwm8toczBzPM9t0jc8Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/utils@3.25.3': resolution: {integrity: sha512-PR5H/2vaD8fSq0H/UB9inNbc8KDcVmW6fYAfSWkkn+OAdhTTMVKqXXrZuZBWyFfSD5Ze7VN6acr4hrOQm2bmrA==} peerDependencies: @@ -5942,16 +5474,6 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-aria/visually-hidden@3.8.10': - resolution: {integrity: sha512-np8c4wxdbE7ZrMv/bnjwEfpX0/nkWy9sELEb0sK8n4+HJ+WycoXXrVxBUb9tXgL/GCx5ReeDQChjQWwajm/z3A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-aria/visually-hidden@3.8.12': - resolution: {integrity: sha512-Bawm+2Cmw3Xrlr7ARzl2RLtKh0lNUdJ0eNqzWcyx4c0VHUAWtThmH5l+HRqFUGzzutFZVo89SAy40BAbd0gjVw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-aria/visually-hidden@3.8.16': resolution: {integrity: sha512-3zThVIzEprez4A/GajOut6/JQ4WCu2ROHGZ1xH1+2GFjBJQaTfPBIjg6UIwaT7sgHRQIik8QidogLqXHbp81yA==} peerDependencies: @@ -5962,56 +5484,21 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/calendar@3.4.4': - resolution: {integrity: sha512-f9ZOd096gGGD+3LmU1gkmfqytGyQtrgi+Qjn+70GbM2Jy65pwOR4I9YrobbmeAFov5Tff13mQEa0yqWvbcDLZQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/calendar@3.5.1': - resolution: {integrity: sha512-7l7QhqGUJ5AzWHfvZzbTe3J4t72Ht5BmhW4hlVI7flQXtfrmYkVtl3ZdytEZkkHmWGYZRW9b4IQTQGZxhtlElA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/calendar@3.5.5': resolution: {integrity: sha512-HzaiDRhrmaYIly8hRsjjIrydLkldiw1Ws6T/130NLQOt+VPwRW/x0R+nil42mA9LZ6oV0XN0NpmG5tn7TaKRGw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/checkbox@3.6.3': - resolution: {integrity: sha512-hWp0GXVbMI4sS2NbBjWgOnHNrRqSV4jeftP8zc5JsIYRmrWBUZitxluB34QuVPzrBO29bGsF0GTArSiQZt6BWw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/checkbox@3.6.5': - resolution: {integrity: sha512-IXV3f9k+LtmfQLE+DKIN41Q5QB/YBLDCB1YVx5PEdRp52S9+EACD5683rjVm8NVRDwjMi2SP6RnFRk7fVb5Azg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/checkbox@3.6.9': resolution: {integrity: sha512-JrY3ecnK/SSJPxw+qhGhg3YV4e0CpUcPDrVwY3mSiAE932DPd19xr+qVCknJ34H7JYYt/q0l2z0lmgPnl96RTg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/collections@3.10.5': - resolution: {integrity: sha512-k8Q29Nnvb7iAia1QvTanZsrWP2aqVNBy/1SlE6kLL6vDqtKZC+Esd1SDLHRmIcYIp5aTdfwIGd0NuiRQA7a81Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/collections@3.10.7': - resolution: {integrity: sha512-KRo5O2MWVL8n3aiqb+XR3vP6akmHLhLWYZEmPKjIv0ghQaEebBTrN3wiEjtd6dzllv0QqcWvDLM1LntNfJ2TsA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/collections@3.11.0': resolution: {integrity: sha512-TiJeJjHMPSbbeAhmCXLJNSCk0fa5XnCvEuYw6HtQzDnYiq1AD7KAwkpjC5NfKkjqF3FLXs/v9RDm/P69q6rYzw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/color@3.6.1': - resolution: {integrity: sha512-iW0nAhl3+fUBegHMw5EcAbFVDpgwHBrivfC85pVoTM3pyzp66hqNN6R6xWxW6ETyljS8UOer59+/w4GDVGdPig==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/color@3.8.0': resolution: {integrity: sha512-lBH91HEStZeayhE/FkDMt9WC0UISQiAn8DoD2hfpTGeeWscX/soyxZA7oVL7zBOG9RfDBMNzF+CybVROrWSKAQ==} peerDependencies: @@ -6022,26 +5509,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/combobox@3.8.2': - resolution: {integrity: sha512-f+IHuFW848VoMbvTfSakn2WIh2urDxO355LrKxnisXPCkpQHpq3lvT2mJtKJwkPxjAy7xPjpV8ejgga2R6p53Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/combobox@3.8.4': - resolution: {integrity: sha512-iLVGvKRRz0TeJXZhZyK783hveHpYA6xovOSdzSD+WGYpiPXo1QrcrNoH3AE0Z2sHtorU+8nc0j58vh5PB+m2AA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/data@3.11.2': - resolution: {integrity: sha512-yhK2upk2WbJeiLBRWHrh/4G2CvmmozCzoivLaRAPYu53m1J3MyzVGCLJgnZMbMZvAbNcYWZK6IzO6VqZ2y1fOw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/data@3.11.4': - resolution: {integrity: sha512-PbnUQxeE6AznSuEWYnRmrYQ9t5z1Asx98Jtrl96EeA6Iapt9kOjTN9ySqCxtPxMKleb1NIqG3+uHU3veIqmLsg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/data@3.11.7': resolution: {integrity: sha512-2YJ+Lmca18f/h7jiZiU9j2IhBJl6BFO1BWlwvcCAH/eCWTdveX8gzsUdW++0szzpJaoCilTCYoi8z7QWyVH9jQ==} peerDependencies: @@ -6052,70 +5519,24 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/datepicker@3.9.2': - resolution: {integrity: sha512-Z6FrK6Af7R5BizqHhJFCj3Hn32mg5iLSDdEgFQAuO043guOXUKFUAnbxfbQUjL6PGE6QwWMfQD7PPGebHn9Ifw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/datepicker@3.9.4': - resolution: {integrity: sha512-yBdX01jn6gq4NIVvHIqdjBUPo+WN8Bujc4OnPw+ZnfA4jI0eIgq04pfZ84cp1LVXW0IB0VaCu1AlQ/kvtZjfGA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/disclosure@3.0.0-alpha.0': resolution: {integrity: sha512-CbFUrEwhsP5+44PMHipn/Cd61VTvqyKmx1yeNDyvj/4bYhmxYLgQp/Ma+iEqe23JkXJh2JO/ws3l9FnebScCJQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/dnd@3.2.8': - resolution: {integrity: sha512-oSo+2Bzum3Q1/d+3FuaDmpVHqqBB004tycuQDDFtad3N1BKm+fNfmslRK1ioLkPLK4sm1130V+BZBY3JXLe80A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/dnd@3.3.1': - resolution: {integrity: sha512-I/Ci5xB8hSgAXzoWYWScfMM9UK1MX/eTlARBhiSlfudewweOtNJAI+cXJgU7uiUnGjh4B4v3qDBtlAH1dWDCsw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/dnd@3.4.3': resolution: {integrity: sha512-sUvhmMxFEw6P2MW7walx0ntakIihxdPxA06K9YZ3+ReaUvzQuRw5cFDaTTHrlegWRMYD0CyQaKlGIaTQihhvVA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/flags@3.0.1': - resolution: {integrity: sha512-h5PcDMj54aipQNO18ig/IMI1kzPwcvSwVq5M6Ib6XE1WIkOH0dIuW2eADdAOhcGi3KXJtXVdD29zh0Eox1TKgQ==} - - '@react-stately/flags@3.0.3': - resolution: {integrity: sha512-/ha7XFA0RZTQsbzSPwu3KkbNMgbvuM0GuMTYLTBWpgBrovBNTM+QqI/PfZTdHg8PwCYF4H5Y8gjdSpdulCvJFw==} - '@react-stately/flags@3.0.4': resolution: {integrity: sha512-RNJEkOALwKg+JeYsfNlfPc4GXm7hiBLX0yuHOkRapWEyDOfi0cinkV/TZG4goOZdQ5tBpHmemf2qqiHAxqHlzQ==} - '@react-stately/form@3.0.1': - resolution: {integrity: sha512-T1Ul2Ou0uE/S4ECLcGKa0OfXjffdjEHfUFZAk7OZl0Mqq/F7dl5WpoLWJ4d4IyvZzGO6anFNenP+vODWbrF3NA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/form@3.0.3': - resolution: {integrity: sha512-92YYBvlHEWUGUpXgIaQ48J50jU9XrxfjYIN8BTvvhBHdD63oWgm8DzQnyT/NIAMzdLnhkg7vP+fjG8LjHeyIAg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/form@3.0.6': resolution: {integrity: sha512-KMsxm3/V0iCv/6ikt4JEjVM3LW2AgCzo7aNotMzRobtwIo0RwaUo7DQNY00rGgFQ3/IjzI6DcVo13D+AVE/zXg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/grid@3.8.5': - resolution: {integrity: sha512-KCzi0x0p1ZKK+OptonvJqMbn6Vlgo6GfOIlgcDd0dNYDP8TJ+3QFJAFre5mCr7Fubx7LcAOio4Rij0l/R8fkXQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/grid@3.8.7': - resolution: {integrity: sha512-he3TXCLAhF5C5z1/G4ySzcwyt7PEiWcVIupxebJQqRyFrNWemSuv+7tolnStmG8maMVIyV3P/3j4eRBbdSlOIg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/grid@3.9.3': resolution: {integrity: sha512-P5KgCNYwm/n8bbLx6527li89RQWoESikrsg2MMyUpUd6IJ321t2pGONGRRQzxE0SBMolPRDJKV0Do2OlsjYKhQ==} peerDependencies: @@ -6126,46 +5547,16 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/list@3.10.3': - resolution: {integrity: sha512-Ul8el0tQy2Ucl3qMQ0fiqdJ874W1ZNjURVSgSxN+pGwVLNBVRjd6Fl7YwZFCXER2YOlzkwg+Zqozf/ZlS0EdXA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/list@3.10.5': - resolution: {integrity: sha512-fV9plO+6QDHiewsYIhboxcDhF17GO95xepC5ki0bKXo44gr14g/LSo/BMmsaMnV+1BuGdBunB05bO4QOIaigXA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/list@3.11.0': resolution: {integrity: sha512-O+BxXcbtoLZWn4QIT54RoFUaM+QaJQm6s0ZBJ3Jv4ILIhukVOc55ra+aWMVlXFQSpbf6I3hyVP6cz1yyvd5Rtw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/menu@3.6.1': - resolution: {integrity: sha512-3v0vkTm/kInuuG8jG7jbxXDBnMQcoDZKWvYsBQq7+POt0LmijbLdbdZPBoz9TkZ3eo/OoP194LLHOaFTQyHhlw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/menu@3.7.1': - resolution: {integrity: sha512-mX1w9HHzt+xal1WIT2xGrTQsoLvDwuB2R1Er1MBABs//MsJzccycatcgV/J/28m6tO5M9iuFQQvLV+i1dCtodg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/menu@3.8.3': resolution: {integrity: sha512-sV63V+cMgzipx/N7dq5GaXoItfXIfFEpCtlk3PM2vKstlCJalszXrdo+x996bkeU96h0plB7znAlhlXOeTKzUg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/numberfield@3.9.1': - resolution: {integrity: sha512-btBIcBEfSVCUm6NwJrMrMygoIu/fQGazzD0RhF7PNsfvkFiWn+TSOyQqSXcsUJVOnBfoS/dVWj6r57KA7zl3FA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/numberfield@3.9.3': - resolution: {integrity: sha512-UlPTLSabhLEuHtgzM0PgfhtEaHy3yttbzcRb8yHNvGo4KbCHeHpTHd3QghKfTFm024Mug7+mVlWCmMtW0f5ttg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/numberfield@3.9.7': resolution: {integrity: sha512-PjSgCCpYasGCEAznFQNqa2JhhEQ5+/2eMiV7ZI5j76q3edTNF8G5OOCl2RazDbzFp6vDAnRVT7Kctx5Tl5R/Zw==} peerDependencies: @@ -6176,101 +5567,31 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/overlays@3.6.5': - resolution: {integrity: sha512-U4rCFj6TPJPXLUvYXAcvh+yP/CO2W+7f0IuqP7ZZGE+Osk9qFkT+zRK5/6ayhBDFpmueNfjIEAzT9gYPQwNHFw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/overlays@3.6.7': - resolution: {integrity: sha512-6zp8v/iNUm6YQap0loaFx6PlvN8C0DgWHNlrlzMtMmNuvjhjR0wYXVaTfNoUZBWj25tlDM81ukXOjpRXg9rLrw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/radio@3.10.2': - resolution: {integrity: sha512-JW5ZWiNMKcZvMTsuPeWJQLHXD5rlqy7Qk6fwUx/ZgeibvMBW/NnW19mm2+IMinzmbtERXvR6nsiA837qI+4dew==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/radio@3.10.4': - resolution: {integrity: sha512-kCIc7tAl4L7Hu4Wt9l2jaa+MzYmAJm0qmC8G8yPMbExpWbLRu6J8Un80GZu+JxvzgDlqDyrVvyv9zFifwH/NkQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/radio@3.10.8': resolution: {integrity: sha512-VRq6Gzsbk3jzX6hdrSoDoSra9vLRsOi2pLkvW/CMrJ0GSgMwr8jjvJKnNFvYJ3eYQb20EwkarsOAfk7vPSIt/Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/searchfield@3.5.1': - resolution: {integrity: sha512-9A8Wghx1avRHhMpNH1Nj+jFfiF1bhsff2GEC5PZgWYzhCykw3G5bywn3JAuUS4kh7Vpqhbu4KpHAhmWPSv4B/Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/searchfield@3.5.3': - resolution: {integrity: sha512-H0OvlgwPIFdc471ypw79MDjz3WXaVq9+THaY6JM4DIohEJNN5Dwei7O9g6r6m/GqPXJIn5TT3b74kJ2Osc00YQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/searchfield@3.5.7': resolution: {integrity: sha512-VxEG4tWDypdXQ8f7clZBu5Qmc4osqDBeA/gNMA2i1j/h2zRVcCJ0fRCHuDeXLSWBqF1XXAI4TWV53fBBwJusbg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/select@3.6.2': - resolution: {integrity: sha512-duOxdHKol93h6Ew6fap6Amz+zngoERKZLSKVm/8I8uaBgkoBhEeTFv7mlpHTgINxymMw3mMrvy6GL/gfKFwkqg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/select@3.6.4': - resolution: {integrity: sha512-whZgF1N53D0/dS8tOFdrswB0alsk5Q5620HC3z+5f2Hpi8gwgAZ8TYa+2IcmMYRiT+bxVuvEc/NirU9yPmqGbA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/select@3.6.8': resolution: {integrity: sha512-fLAVzGeYSdYdBdrEVws6Pb1ywFPdapA0eWphoW5s3fS0/pKcVWwbCHeHlaBEi1ISyqEubQZFGQdeFKm/M46Hew==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/selection@3.14.3': - resolution: {integrity: sha512-d/t0rIWieqQ7wjLoMoWnuHEUSMoVXxkPBFuSlJF3F16289FiQ+b8aeKFDzFTYN7fFD8rkZTnpuE4Tcxg3TmA+w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/selection@3.15.1': - resolution: {integrity: sha512-6TQnN9L0UY9w19B7xzb1P6mbUVBtW840Cw1SjgNXCB3NPaCf59SwqClYzoj8O2ZFzMe8F/nUJtfU1NS65/OLlw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/selection@3.17.0': resolution: {integrity: sha512-It3LRTaFOavybuDBvBH2mvCh73OL4awqvN4tZ0JzLzMtaYSBe9+YmFasYrzB0o7ca17B2q1tpUmsNWaAgIqbLA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/slider@3.5.2': - resolution: {integrity: sha512-ntH3NLRG+AwVC7q4Dx9DcmMkMh9vmHjHNXAgaoqNjhvwfSIae7sQ69CkVe6XeJjIBy6LlH81Kgapz+ABe5a1ZA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/slider@3.5.4': - resolution: {integrity: sha512-Jsf7K17dr93lkNKL9ij8HUcoM1sPbq8TvmibD6DhrK9If2lje+OOL8y4n4qreUnfMT56HCAeS9wCO3fg3eMyrw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/slider@3.5.8': resolution: {integrity: sha512-EDgbrxMq1w3+XTN72MGl3YtAG/j65EYX1Uc3Fh56K00+inJbTdRWyYTrb3NA310fXCd0WFBbzExuH2ohlKQycg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/table@3.11.6': - resolution: {integrity: sha512-34YsfOILXusj3p6QNcKEaDWVORhM6WEhwPSLCZlkwAJvkxuRQFdih5rQKoIDc0uV5aZsB6bYBqiFhnjY0VERhw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/table@3.11.8': - resolution: {integrity: sha512-EdyRW3lT1/kAVDp5FkEIi1BQ7tvmD2YgniGdLuW/l9LADo0T+oxZqruv60qpUS6sQap+59Riaxl91ClDxrJnpg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/table@3.12.3': resolution: {integrity: sha512-8uGrLcNJYeMbFtzRQZFWCBj5kV+7v3jzwoKIL1j9TmYUKow1PTDMQbPJpAZLQhnC2wVMlaFVgDbedSlbBij7Zg==} peerDependencies: @@ -6281,26 +5602,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/tabs@3.6.4': - resolution: {integrity: sha512-WZJgMBqzLgN88RN8AxhY4aH1+I+4w1qQA0Lh3LRSDegaytd+NHixCWaP3IPjePgCB5N1UsPe96Xglw75zjHmDg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/tabs@3.6.6': - resolution: {integrity: sha512-sOLxorH2uqjAA+v1ppkMCc2YyjgqvSGeBDgtR/lyPSDd4CVMoTExszROX2dqG0c8il9RQvzFuufUtQWMY6PgSA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/toggle@3.7.2': - resolution: {integrity: sha512-SHCF2btcoK57c4lyhucRbyPBAFpp0Pdp0vcPdn3hUgqbu6e5gE0CwG/mgFmZRAQoc7PRc7XifL0uNw8diJJI0Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/toggle@3.7.4': - resolution: {integrity: sha512-CoYFe9WrhLkDP4HGDpJYQKwfiYCRBAeoBQHv+JWl5eyK61S8xSwoHsveYuEZ3bowx71zyCnNAqWRrmNOxJ4CKA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/toggle@3.7.8': resolution: {integrity: sha512-ySOtkByvIY54yIu8IZ4lnvomQA0H+/mkZnd6T5fKN3tjvIzHmkUk3TAPmNInUxHX148tSW6mWwec0xvjYqEd6w==} peerDependencies: @@ -6311,56 +5612,16 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/tooltip@3.4.7': - resolution: {integrity: sha512-ACtRgBQ8rphBtsUaaxvEAM0HHN9PvMuyvL0vUHd7jvBDCVZJ6it1BKu9SBKjekBkoBOw9nemtkplh9R2CA6V8Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/tooltip@3.4.9': - resolution: {integrity: sha512-P7CDJsdoKarz32qFwf3VNS01lyC+63gXpDZG31pUu+EO5BeQd4WKN/AH1Beuswpr4GWzxzFc1aXQgERFGVzraA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/tree@3.7.6': - resolution: {integrity: sha512-y8KvEoZX6+YvqjNCVGS3zA/BKw4D3XrUtUKIDme3gu5Mn6z97u+hUXKdXVCniZR7yvV3fHAIXwE5V2K8Oit4aw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/tree@3.8.1': - resolution: {integrity: sha512-LOdkkruJWch3W89h4B/bXhfr0t0t1aRfEp+IMrrwdRAl23NaPqwl5ILHs4Xu5XDHqqhg8co73pHrJwUyiTWEjw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/tree@3.8.5': resolution: {integrity: sha512-0/tYhsKWQQJTOZFDwh8hY3Qk6ejNFRldGrLeK5kS22UZdvsMFyh7WAi40FTCJy561/VoB0WqQI4oyNPOa9lYWg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/utils@3.10.1': - resolution: {integrity: sha512-VS/EHRyicef25zDZcM/ClpzYMC5i2YGN6uegOeQawmgfGjb02yaCX0F0zR69Pod9m2Hr3wunTbtpgVXvYbZItg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/utils@3.10.4': resolution: {integrity: sha512-gBEQEIMRh5f60KCm7QKQ2WfvhB2gLUr9b72sqUdIZ2EG+xuPgaIlCBeSicvjmjBvYZwOjoOEnmIkcx2GHp/HWw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-stately/utils@3.9.1': - resolution: {integrity: sha512-yzw75GE0iUWiyps02BOAPTrybcsMIxEJlzXqtvllAb01O9uX5n0i3X+u2eCpj2UoDF4zS08Ps0jPgWxg8xEYtA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/virtualizer@3.6.8': - resolution: {integrity: sha512-Pf06ihTwExRJltGhi72tmLIo0pcjkL55nu7ifMafAAdxZK4ONxRLSuUjjpvYf/0Rs92xRZy2t/XmHREnfirdkQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-stately/virtualizer@3.7.1': - resolution: {integrity: sha512-voHgE6EQ+oZaLv6u2umKxakvIKNkCQuUihqKACTjdslp7SJh4Mvs3oLBI0hf0JOh+rCcFIKDvQtFwy1fXFRYBA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-stately/virtualizer@4.1.0': resolution: {integrity: sha512-MOaqpY3NloXrpCBvVUb3HL1p3Bh4YRtUq8D2ufC909u5vM6n6G5Swk1XPJ9KHfaftGhb5serwLkm2/Aha5CTbA==} peerDependencies: @@ -6371,16 +5632,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/breadcrumbs@3.7.3': - resolution: {integrity: sha512-eFto/+6J+JR58vThNcALZRA1OlqlG3GzQ/bq3q8IrrkOZcrfbEJJCWit/+53Ia98siJKuF4OJHnotxIVIz5I3w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/breadcrumbs@3.7.5': - resolution: {integrity: sha512-lV9IDYsMiu2TgdMIjEmsOE0YWwjb3jhUNK1DCZZfq6uWuiHLgyx2EncazJBUWSjHJ4ta32j7xTuXch+8Ai6u/A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/breadcrumbs@3.7.8': resolution: {integrity: sha512-+BW2a+PrY8ArZ+pKecz13oJFrUAhthvXx17o3x0BhWUhRpAdtmTYt2hjw8zNanm2j0Kvgo1HYKgvtskCRxYcOA==} peerDependencies: @@ -6391,41 +5642,11 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/button@3.9.2': - resolution: {integrity: sha512-EnPTkGHZRtiwAoJy5q9lDjoG30bEzA/qnvKG29VVXKYAGeqY2IlFs1ypmU+z1X/CpJgPcG3I5cakM7yTVm3pSg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/button@3.9.4': - resolution: {integrity: sha512-raeQBJUxBp0axNF74TXB8/H50GY8Q3eV6cEKMbZFP1+Dzr09Ngv0tJBeW0ewAxAguNH5DRoMUAUGIXtSXskVdA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/calendar@3.4.10': resolution: {integrity: sha512-PyjqxwJxSW2IpQx6y0D9O34fRCWn1gv9q0qFhgaIigIQrPg8zTE/CC7owHLxAtgCnnCt8exJ5rqi414csaHKlA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/calendar@3.4.4': - resolution: {integrity: sha512-hV1Thmb/AES5OmfPvvmyjSkmsEULjiDfA7Yyy70L/YKuSNKb7Su+Bf2VnZuDW3ec+GxO4JJNlpJ0AkbphWBvcg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/calendar@3.4.6': - resolution: {integrity: sha512-WSntZPwtvsIYWvBQRAPvuCn55UTJBZroTvX0vQvWykJRQnPAI20G1hMQ3dNsnAL+gLZUYxBXn66vphmjUuSYew==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/checkbox@3.7.1': - resolution: {integrity: sha512-kuGqjQFex0As/3gfWyk+e9njCcad/ZdnYLLiNvhlk15730xfa0MmnOdpqo9jfuFSXBjOcpxoofvEhvrRMtEdUA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/checkbox@3.8.1': - resolution: {integrity: sha512-5/oVByPw4MbR/8QSdHCaalmyWC71H/QGgd4aduTJSaNi825o+v/hsN2/CH7Fq9atkLKsC8fvKD00Bj2VGaKriQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/checkbox@3.8.4': resolution: {integrity: sha512-fvZrlQmlFNsYHZpl7GVmyYQlKdUtO5MczMSf8z3TlSiCb5Kl3ha9PsZgLhJqGuVnzB2ArIBz0eZrYa3k0PhcpA==} peerDependencies: @@ -6436,111 +5657,36 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/color@3.0.0-beta.25': - resolution: {integrity: sha512-D24ASvLeSWouBwOBi4ftUe4/BhrZj5AiHV7tXwrVeMGOy9Z9jyeK65Xysq+R3ecaSONLXsgai5CQMvj13cOacA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/combobox@3.10.1': - resolution: {integrity: sha512-XMno1rgVRNta49vf5nV7VJpVSVAV20tt79t618gG1qRKH5Kt2Cy8lz2fQ5vHG6UTv/6jUOvU8g5Pc93sLaTmoA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/combobox@3.11.1': - resolution: {integrity: sha512-UNc3OHt5cUt5gCTHqhQIqhaWwKCpaNciD8R7eQazmHiA9fq8ROlV+7l3gdNgdhJbTf5Bu/V5ISnN7Y1xwL3zqQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/combobox@3.13.0': resolution: {integrity: sha512-kH/a+Fjpr54M2JbHg9RXwMjZ9O+XVsdOuE5JCpWRibJP1Mfl1md8gY6y6zstmVY8COrSqFvMZWB+PzwaTWjTGw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/datepicker@3.7.2': - resolution: {integrity: sha512-zThqFAdhQL1dqyVDsDSSTdfCjoD6634eyg/B0ZJfQxcLUR/5pch3v/gxBhbyCVDGMNHRWUWIJvY9DVOepuoSug==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/datepicker@3.7.4': - resolution: {integrity: sha512-ZfvgscvNzBJpYyVWg3nstJtA/VlWLwErwSkd1ivZYam859N30w8yH+4qoYLa6FzWLCFlrsRHyvtxlEM7lUAt5A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/datepicker@3.8.3': resolution: {integrity: sha512-Y4qfPRBB6uzocosCOWSYMuwiZ3YXwLWQYiFB4KCglkvHyltbNz76LgoBEnclYA5HjwosIk4XywiXvHSYry8JnQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/dialog@3.5.10': - resolution: {integrity: sha512-S9ga+edOLNLZw7/zVOnZdT5T40etpzUYBXEKdFPbxyPYnERvRxJAsC1/ASuBU9fQAXMRgLZzADWV+wJoGS/X9g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/dialog@3.5.13': resolution: {integrity: sha512-9k8daVcAqQsySkzDY6NIVlyGxtpEip4TKuLyzAehthbv78GQardD5fHdjQ6eXPRS4I2qZrmytrFFrlOnwWVGHw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/dialog@3.5.8': - resolution: {integrity: sha512-RX8JsMvty8ADHRqVEkppoynXLtN4IzUh8d5z88UEBbcvWKlHfd6bOBQjQcBH3AUue5wjfpPIt6brw2VzgBY/3Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/form@3.7.2': - resolution: {integrity: sha512-6/isEJY4PsYoHdMaGQtqQyquXGTwB1FqCBOPKQjI/vBGWG3fL7FGfWm4Z62eTbCH4Xyv3FZuNywlT8UjPMQyKA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/form@3.7.4': - resolution: {integrity: sha512-HZojAWrb6feYnhDEOy3vBamDVAHDl0l2JQZ7aIDLHmeTAGQC3JNZcm2fLTxqLye46zz8w8l8OHgI+NdD4PHdOw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/form@3.7.7': resolution: {integrity: sha512-CVRjCawPhYRHi/LuikOC2kz5vgvmjjKmF4/wUgR2QzD1Ok4wY1ZGSx9M9EZptCIZAt2mToR6woyLUdtzy+foeQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/grid@3.2.4': - resolution: {integrity: sha512-sDVoyQcH7MoGdx5nBi5ZOU/mVFBt9YTxhvr0PZ97dMdEHZtJC1w9SuezwWS34f50yb8YAXQRTICbZYcK4bAlDA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/grid@3.2.6': - resolution: {integrity: sha512-XfHenL2jEBUYrhKiPdeM24mbLRXUn79wVzzMhrNYh24nBwhsPPpxF+gjFddT3Cy8dt6tRInfT6pMEu9nsXwaHw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/grid@3.2.9': resolution: {integrity: sha512-eMw0d2UIZ4QTzGgD1wGGPw0cv67KjAOCp4TcwWjgDV7Wa5SVV/UvOmpnIVDyfhkG/4KRI5OR9h+isy76B726qA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/link@3.5.3': - resolution: {integrity: sha512-yVafjW3IejyVnK3oMBNjFABCGG6J27EUG8rvkaGaI1uB6srGUEhpJ97XLv11aj1QkXHBy3VGXqxEV3S7wn4HTw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/link@3.5.5': - resolution: {integrity: sha512-G6P5WagHDR87npN7sEuC5IIgL1GsoY4WFWKO4734i2CXRYx24G9P0Su3AX4GA3qpspz8sK1AWkaCzBMmvnunfw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/link@3.5.8': resolution: {integrity: sha512-l/YGXddgAbLnIT7ekftXrK1D4n8NlLQwx0d4usyZpaxP1KwPzuwng20DxynamLc1atoKBqbUtZAnz32pe7vYgw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/listbox@3.4.7': - resolution: {integrity: sha512-68y5H9CVSPFiwO6MOFxTbry9JQMK/Lb1M9i3M8TDyq1AbJxBPpgAvJ9RaqIMCucsnqCzpY/zA3D/X417zByL1w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/listbox@3.4.9': - resolution: {integrity: sha512-S5G+WmNKUIOPZxZ4svWwWQupP3C6LmVfnf8QQmPDvwYXGzVc0WovkqUWyhhjJirFDswTXRCO9p0yaTHHIlkdwQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/listbox@3.5.2': resolution: {integrity: sha512-ML/Bt/MeO0FiixcuFQ+smpu1WguxTOqHDjSnhc1vcNxVQFWQOhyVy01LAY2J/T9TjfjyYGD41vyMTI0f6fcLEQ==} peerDependencies: @@ -6551,41 +5697,11 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/menu@3.9.7': - resolution: {integrity: sha512-K6KhloJVoGsqwkdeez72fkNI9dfrmLI/sNrB4XuOKo2crDQ/eyZYWyJmzz8giz/tHME9w774k487rVoefoFh5w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/menu@3.9.9': - resolution: {integrity: sha512-FamUaPVs1Fxr4KOMI0YcR2rYZHoN7ypGtgiEiJ11v/tEPjPPGgeKDxii0McCrdOkjheatLN1yd2jmMwYj6hTDg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/meter@3.3.7': - resolution: {integrity: sha512-p+YJ0+Lpn5MLmlbFZbDH1P0ILv1+AuMcUbxLcXMIVMGn7o0FO7eVZnFuq76D+qTDm9all+TRLJix7bctOrP+5Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/meter@3.4.1': - resolution: {integrity: sha512-AIJV4NDFAqKH94s02c5Da4TH2qgJjfrw978zuFM0KUBFD85WRPKh7MvgWpomvUgmzqE6lMCzIdi1KPKqrRabdw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/meter@3.4.4': resolution: {integrity: sha512-0SEmPkShByC1gYkW7l+iJPg8QfEe2VrgwTciAtTfC4KIqAYmJVQtq6L+4d72EMxOh8RpQHePaY/RFHEJXAh72A==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/numberfield@3.8.1': - resolution: {integrity: sha512-GaCjLQgXUGCt40SLjKk3/COMWFlN2vV/3Xs3VSLAEdFZpk99b+Ik1oR21+7ZP5/iMHuQDc1MJRWdFfIjxCvVDQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/numberfield@3.8.3': - resolution: {integrity: sha512-z5fGfVj3oh5bmkw9zDvClA1nDBSFL9affOuyk2qZ/M2SRUmykDAPCksbfcMndft0XULWKbF4s2CYbVI+E/yrUA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/numberfield@3.8.6': resolution: {integrity: sha512-VtWEMAXUO1S9EEZI8whc7xv6DVccxhbWsRthMCg/LxiwU3U5KAveadNc2c5rtXkRpd3cnD5xFzz3dExXdmHkAg==} peerDependencies: @@ -6596,71 +5712,21 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/overlays@3.8.5': - resolution: {integrity: sha512-4D7EEBQigD/m8hE68Ys8eloyyZFHHduqykSIgINJ0edmo0jygRbWlTwuhWFR9USgSP4dK54duN0Mvq0m4HEVEw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/overlays@3.8.7': - resolution: {integrity: sha512-zCOYvI4at2DkhVpviIClJ7bRrLXYhSg3Z3v9xymuPH3mkiuuP/dm8mUCtkyY4UhVeUTHmrQh1bzaOP00A+SSQA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/progress@3.5.2': - resolution: {integrity: sha512-aQql22kusEudsHwDEzq6y/Mh29AM+ftRDKdS5E5g4MkCY5J4FMbOYco1T5So83NIvvG9+eKcxPoJUMjQQACAyA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/progress@3.5.4': - resolution: {integrity: sha512-JNc246sTjasPyx5Dp7/s0rp3Bz4qlu4LrZTulZlxWyb53WgBNL7axc26CCi+I20rWL9+c7JjhrRxnLl/1cLN5g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/progress@3.5.7': - resolution: {integrity: sha512-EqMDHmlpoZUZzTjdejGIkSM0pS2LBI9NdadHf3bDNTycHv+5L1xpMHUg8RGOW8a3sRVLRvfN1aO9l75QZkyj+w==} + '@react-types/progress@3.5.7': + resolution: {integrity: sha512-EqMDHmlpoZUZzTjdejGIkSM0pS2LBI9NdadHf3bDNTycHv+5L1xpMHUg8RGOW8a3sRVLRvfN1aO9l75QZkyj+w==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/radio@3.7.1': - resolution: {integrity: sha512-Zut3rN1odIUBLZdijeyou+UqsLeRE76d9A+npykYGu29ndqmo3w4sLn8QeQcdj1IR71ZnG0pW2Y2BazhK5XrrQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/radio@3.8.1': - resolution: {integrity: sha512-bK0gio/qj1+0Ldu/3k/s9BaOZvnnRgvFtL3u5ky479+aLG5qf1CmYed3SKz8ErZ70JkpuCSrSwSCFf0t1IHovw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/radio@3.8.4': resolution: {integrity: sha512-GCuOwQL19iwKa74NAIk9hv4ivyI8oW1+ZCuc2fzyDdeQjzTIlv3qrIyShwpVy1IoI7/4DYTMZm/YXPoKhu5TTA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/searchfield@3.5.3': - resolution: {integrity: sha512-gBfsT1WpY8UIb74yyYmnjiHpVasph2mdmGj9i8cGF2HUYwx5p+Fr85mtCGDph0uirvRoM5ExMp4snD+ueNAVCg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/searchfield@3.5.5': - resolution: {integrity: sha512-T/NHg12+w23TxlXMdetogLDUldk1z5dDavzbnjKrLkajLb221bp8brlR/+O6C1CtFpuJGALqYHgTasU1qkQFSA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/searchfield@3.5.9': resolution: {integrity: sha512-c/x8BWpH1Zq+fWpeBtzw2AhQhGi7ahWPicV7PlnqwIGO0MrH/QCjX0dj+I+1xpcAh8Eq6ECa79HE74Rw6aJmFg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/select@3.9.2': - resolution: {integrity: sha512-fGFrunednY3Pq/BBwVOf87Fsuyo/SlevL0wFIE9OOl2V5NXVaTY7/7RYA8hIOHPzmvsMbndy419BEudiNGhv4A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/select@3.9.4': - resolution: {integrity: sha512-xI7dnOW2st91fPPcv6hdtrTdcfetYiqZuuVPZ5TRobY7Q10/Zqqe/KqtOw1zFKUj9xqNJe4Ov3xP5GSdcO60Eg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/select@3.9.7': resolution: {integrity: sha512-Jva4ixfB4EEdy+WmZkUoLiQI7vVfHPxM73VuL7XDxvAO+YKiIztDTcU720QVNhxTMmQvCxfRBXWar8aodCjLiw==} peerDependencies: @@ -6671,41 +5737,16 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/shared@3.23.1': - resolution: {integrity: sha512-5d+3HbFDxGZjhbMBeFHRQhexMFt4pUce3okyRtUVKbbedQFUrtXSBg9VszgF2RTeQDKDkMCIQDtz5ccP/Lk1gw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/shared@3.25.0': resolution: {integrity: sha512-OZSyhzU6vTdW3eV/mz5i6hQwQUhkRs7xwY2d1aqPvTdMe0+2cY7Fwp45PAiwYLEj73i9ro2FxF9qC4DvHGSCgQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/slider@3.7.1': - resolution: {integrity: sha512-FKO3YZYdrBs00XbBW5acP+0L1cCdevl/uRJiXbnLpGysO5PrSFIRS7Wlv4M7ztf6gT7b1Ao4FNC9crbxBr6BzA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/slider@3.7.3': - resolution: {integrity: sha512-F8qFQaD2mqug2D0XeWMmjGBikiwbdERFlhFzdvNGbypPLz3AZICBKp1ZLPWdl0DMuy03G/jy6Gl4mDobl7RT2g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/slider@3.7.6': resolution: {integrity: sha512-z72wnEzSge6qTD9TUoUPp1A4j4jXk/MVii6rGE78XeE/Pq7HyyjU5bCagryMr9PC9MKa/oTiHcshKqWBDf57GA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/switch@3.5.1': - resolution: {integrity: sha512-2LFEKMGeufqyYmeN/5dtkDkCPG6x9O4eu6aaBaJmPGon7C/l3yiFEgRue6oCUYc1HixR7Qlp0sPxk0tQeWzrSg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/switch@3.5.3': - resolution: {integrity: sha512-Nb6+J5MrPaFa8ZNFKGMzAsen/NNzl5UG/BbC65SLGPy7O0VDa/sUpn7dcu8V2xRpRwwIN/Oso4v63bt2sgdkgA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/switch@3.5.6': resolution: {integrity: sha512-gJ8t2yTCgcitz4ON4ELcLLmtlDkn2MUjjfu3ez/cwA1X/NUluPYkhXj5Z6H+KOlnveqrKCZDRoTgK74cQ6Cvfg==} peerDependencies: @@ -6716,41 +5757,11 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/table@3.9.3': - resolution: {integrity: sha512-Hs/pMbxJdga2zBol4H5pV1FVIiRjCuSTXst6idJjkctanTexR4xkyrtBwl+rdLNoGwQ2pGii49vgklc5bFK7zA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/table@3.9.5': - resolution: {integrity: sha512-fgM2j9F/UR4Anmd28CueghCgBwOZoCVyN8fjaIFPd2MN4gCwUUfANwxLav65gZk4BpwUXGoQdsW+X50L3555mg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/tabs@3.3.10': resolution: {integrity: sha512-s/Bw/HCIdWJPBw4O703ghKqhjGsIerRMIDxA88hbQYzfTDD6bkFDjCnsP2Tyy1G8Dg2rSPFUEE+k+PpLzqeEfQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/tabs@3.3.5': - resolution: {integrity: sha512-6NTSZBOWekCtApdZrhu5tHhE/8q52oVohQN+J5T7shAXd6ZAtu8PABVR/nH4BWucc8FL0OUajRqunqzQMU13gA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/tabs@3.3.7': - resolution: {integrity: sha512-ZdLe5xOcFX6+/ni45Dl2jO0jFATpTnoSqj6kLIS/BYv8oh0n817OjJkLf+DS3CLfNjApJWrHqAk34xNh6nRnEg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/textfield@3.9.1': - resolution: {integrity: sha512-JBHY9M2CkL6xFaGSfWmUJVu3tEK09FaeB1dU3IEh6P41xxbFnPakYHSSAdnwMXBtXPoSHIVsUBickW/pjgfe5g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/textfield@3.9.3': - resolution: {integrity: sha512-DoAY6cYOL0pJhgNGI1Rosni7g72GAt4OVr2ltEx2S9ARmFZ0DBvdhA9lL2nywcnKMf27PEJcKMXzXc10qaHsJw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@react-types/textfield@3.9.7': resolution: {integrity: sha512-vU5+QCOF9HgWGjAmmy+cpJibVW5voFomC5POmYHokm7kivYcMMjlonsgWwg/0xXrqE2qosH3tpz4jFoEuig1NQ==} peerDependencies: @@ -6761,16 +5772,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - '@react-types/tooltip@3.4.7': - resolution: {integrity: sha512-rV4HZRQxLRNhe24yATOxnFQtGRUmsR7mqxMupXCmd1vrw8h+rdKlQv1zW2q8nALAKNmnRXZJHxYQ1SFzb98fgg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - '@react-types/tooltip@3.4.9': - resolution: {integrity: sha512-wZ+uF1+Zc43qG+cOJzioBmLUNjRa7ApdcT0LI1VvaYvH5GdfjzUJOorLX9V/vAci0XMJ50UZ+qsh79aUlw2yqg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - '@redux-devtools/extension@3.3.0': resolution: {integrity: sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==} peerDependencies: @@ -7662,12 +6663,6 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.4.14': - resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} - - '@swc/helpers@0.4.36': - resolution: {integrity: sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==} - '@swc/helpers@0.5.10': resolution: {integrity: sha512-CU+RF9FySljn7HVSkkjiB84hWkvTaI3rtLvF433+jRSBL2hMu3zX5bGhHS8C80SM++h4xy8hBSnUHFQHmRXSBw==} @@ -16449,36 +15444,12 @@ packages: react: '>=15.6.2' react-dom: '>=15.6.2' - react-aria-components@1.1.1: - resolution: {integrity: sha512-XdgqSbrlh9V1vJEvTwrnr+YGndQWYcVEAbN+Rx104o9g88cAAabclgetU2OUJ9Gbht6+gwnvnA0ksgXzVZog2Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - react-aria-components@1.2.1: - resolution: {integrity: sha512-iGIdDjbTyLLn0/tGUyBQxxu+E1bw4/H4AU89d0cRcu8yIdw6MXG29YElmRHn0ugiyrERrk/YQALihstnns5kRQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-aria-components@1.4.0: resolution: {integrity: sha512-CpeSeGI2FVT3hOzA28fhIGkrPPQPtz3gVHBfMWkXSuLUBaKFZQhdCLBXlpO5MoZV1RrC+e7mhOVREkw6DvlxKw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - react-aria@3.32.1: - resolution: {integrity: sha512-7KCJg4K5vlRqiXdGjgCT05Du8RhGBYC+2ok4GOh/Znmg8aMwOk7t0YwxaT5i1z30+fmDcJS/pk/ipUPUg28CXg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - react-aria@3.33.1: - resolution: {integrity: sha512-hFC3K/UA+90Krlx2IgRTgzFbC6FSPi4pUwHT+STperPLK+cTEHkI+3Lu0YYwQSBatkgxnIv9+GtFuVbps2kROw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-aria@3.35.0: resolution: {integrity: sha512-cbbd3iIveLDRnpVrpc1iuz8OMlDdH6u8EjncW3MQuYOiEGaho9xcDtWMKiSEIZASEnd7LK4Rgm5iVPr2O+cssw==} peerDependencies: @@ -16776,16 +15747,6 @@ packages: react: ^16.3.0 || ^17.0.0 react-dom: ^16.3.0 || ^17.0.0 - react-stately@3.30.1: - resolution: {integrity: sha512-IEhKHMT7wijtczA5vtw/kdq9CZuOIF+ReoSimydTFiABRQxWO9ESAl/fToXOUM9qmCdhdqjGJgMAhqTnmheh8g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - - react-stately@3.31.1: - resolution: {integrity: sha512-wuq673NHkYSdoceGryjtMJJvB9iQgyDkQDsnTN0t2v91pXjGDsN/EcOvnUrxXSBtY9eLdIw74R54z9GX5cJNEg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-stately@3.33.0: resolution: {integrity: sha512-DNPOxYAPuhuXwSuE1s1K7iSgqG2QOBUZq3bsLAd4gUUZje6Qepkhe7TzK2LWarQYAZ3gC9Xhmnz8ie1fdCo0GA==} peerDependencies: @@ -21497,53 +20458,19 @@ snapshots: '@iarna/toml@2.2.5': {} - '@internationalized/date@3.5.2': - dependencies: - '@swc/helpers': 0.5.10 - - '@internationalized/date@3.5.4': - dependencies: - '@swc/helpers': 0.5.10 - '@internationalized/date@3.5.6': dependencies: '@swc/helpers': 0.5.10 - '@internationalized/message@3.1.2': - dependencies: - '@swc/helpers': 0.5.10 - intl-messageformat: 10.5.11 - - '@internationalized/message@3.1.4': - dependencies: - '@swc/helpers': 0.5.10 - intl-messageformat: 10.5.11 - '@internationalized/message@3.1.5': dependencies: '@swc/helpers': 0.5.10 intl-messageformat: 10.5.11 - '@internationalized/number@3.5.1': - dependencies: - '@swc/helpers': 0.5.10 - - '@internationalized/number@3.5.3': - dependencies: - '@swc/helpers': 0.5.10 - '@internationalized/number@3.5.4': dependencies: '@swc/helpers': 0.5.10 - '@internationalized/string@3.2.1': - dependencies: - '@swc/helpers': 0.5.10 - - '@internationalized/string@3.2.3': - dependencies: - '@swc/helpers': 0.5.10 - '@internationalized/string@3.2.4': dependencies: '@swc/helpers': 0.5.10 @@ -23570,26 +22497,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/breadcrumbs@3.5.11(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/link': 3.6.5(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/breadcrumbs': 3.7.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/breadcrumbs@3.5.13(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/link': 3.7.1(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/breadcrumbs': 3.7.5(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/breadcrumbs@3.5.17(react@18.2.0)': dependencies: '@react-aria/i18n': 3.12.3(react@18.2.0) @@ -23611,28 +22518,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/button@3.9.3(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/toggle': 3.7.2(react@18.2.0) - '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/button@3.9.5(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/toggle': 3.7.4(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/calendar@3.5.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@internationalized/date': 3.5.6 @@ -23648,66 +22533,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/calendar@3.5.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.2 - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/live-announcer': 3.3.2 - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/calendar': 3.4.4(react@18.2.0) - '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/calendar': 3.4.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/calendar@3.5.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.4 - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/live-announcer': 3.3.4 - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/calendar': 3.5.1(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/calendar': 3.4.6(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/checkbox@3.14.1(react@18.2.0)': - dependencies: - '@react-aria/form': 3.0.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/toggle': 3.10.2(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/checkbox': 3.6.3(react@18.2.0) - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/toggle': 3.7.2(react@18.2.0) - '@react-types/checkbox': 3.7.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/checkbox@3.14.3(react@18.2.0)': - dependencies: - '@react-aria/form': 3.0.5(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/toggle': 3.10.4(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/checkbox': 3.6.5(react@18.2.0) - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/toggle': 3.7.4(react@18.2.0) - '@react-types/checkbox': 3.8.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/checkbox@3.14.7(react@18.2.0)': dependencies: '@react-aria/form': 3.0.9(react@18.2.0) @@ -23751,24 +22576,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/color@3.0.0-beta.33(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.11.1(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/numberfield': 3.11.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/slider': 3.7.8(react@18.2.0) - '@react-aria/spinbutton': 3.6.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/textfield': 3.14.5(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-aria/visually-hidden': 3.8.12(react@18.2.0) - '@react-stately/color': 3.6.1(react@18.2.0) - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-types/color': 3.0.0-beta.25(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/combobox@3.10.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/i18n': 3.12.3(react@18.2.0) @@ -23789,69 +22596,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/combobox@3.8.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/listbox': 3.11.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/live-announcer': 3.3.2 - '@react-aria/menu': 3.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/overlays': 3.21.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/textfield': 3.14.3(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/combobox': 3.8.2(react@18.2.0) - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/combobox': 3.10.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/combobox@3.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/listbox': 3.12.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/live-announcer': 3.3.4 - '@react-aria/menu': 3.14.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/overlays': 3.22.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/textfield': 3.14.5(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/combobox': 3.8.4(react@18.2.0) - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/combobox': 3.11.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/datepicker@3.10.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.4 - '@internationalized/number': 3.5.3 - '@internationalized/string': 3.2.3 - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/form': 3.0.5(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/spinbutton': 3.6.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/datepicker': 3.9.4(react@18.2.0) - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/calendar': 3.4.6(react@18.2.0) - '@react-types/datepicker': 3.7.4(react@18.2.0) - '@react-types/dialog': 3.5.10(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/datepicker@3.11.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@internationalized/date': 3.5.6 @@ -23875,51 +22619,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/datepicker@3.9.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.2 - '@internationalized/number': 3.5.1 - '@internationalized/string': 3.2.1 - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/form': 3.0.3(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/spinbutton': 3.6.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/datepicker': 3.9.2(react@18.2.0) - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/calendar': 3.4.4(react@18.2.0) - '@react-types/datepicker': 3.7.2(react@18.2.0) - '@react-types/dialog': 3.5.8(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/dialog@3.5.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/overlays': 3.21.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/dialog': 3.5.8(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/dialog@3.5.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/overlays': 3.22.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/dialog': 3.5.10(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/dialog@3.5.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.18.3(react@18.2.0) @@ -23946,36 +22645,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/dnd@3.5.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@internationalized/string': 3.2.1 - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/live-announcer': 3.3.2 - '@react-aria/overlays': 3.21.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/dnd': 3.2.8(react@18.2.0) - '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/dnd@3.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@internationalized/string': 3.2.3 - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/live-announcer': 3.3.4 - '@react-aria/overlays': 3.22.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/dnd': 3.3.1(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/dnd@3.7.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@internationalized/string': 3.2.4 @@ -23991,24 +22660,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/focus@3.16.2(react@18.2.0)': - dependencies: - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - clsx: 2.1.1 - react: 18.2.0 - - '@react-aria/focus@3.17.1(react@18.2.0)': - dependencies: - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - '@swc/helpers': 0.5.10 - clsx: 2.1.1 - react: 18.2.0 - '@react-aria/focus@3.18.3(react@18.2.0)': dependencies: '@react-aria/interactions': 3.22.3(react@18.2.0) @@ -24018,24 +22669,6 @@ snapshots: clsx: 2.1.1 react: 18.2.0 - '@react-aria/form@3.0.3(react@18.2.0)': - dependencies: - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/form@3.0.5(react@18.2.0)': - dependencies: - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/form@3.0.9(react@18.2.0)': dependencies: '@react-aria/interactions': 3.22.3(react@18.2.0) @@ -24063,74 +22696,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/grid@3.8.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/live-announcer': 3.3.2 - '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/grid': 3.8.5(react@18.2.0) - '@react-stately/selection': 3.14.3(react@18.2.0) - '@react-stately/virtualizer': 3.6.8(react@18.2.0) - '@react-types/checkbox': 3.7.1(react@18.2.0) - '@react-types/grid': 3.2.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/grid@3.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/live-announcer': 3.3.4 - '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/grid': 3.8.7(react@18.2.0) - '@react-stately/selection': 3.15.1(react@18.2.0) - '@react-stately/virtualizer': 3.7.1(react@18.2.0) - '@react-types/checkbox': 3.8.1(react@18.2.0) - '@react-types/grid': 3.2.6(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/gridlist@3.7.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/grid': 3.8.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/list': 3.10.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/gridlist@3.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/grid': 3.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/list': 3.10.5(react@18.2.0) - '@react-stately/tree': 3.8.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/gridlist@3.9.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.18.3(react@18.2.0) @@ -24147,30 +22712,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/i18n@3.10.2(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.2 - '@internationalized/message': 3.1.2 - '@internationalized/number': 3.5.1 - '@internationalized/string': 3.2.1 - '@react-aria/ssr': 3.9.6(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/i18n@3.11.1(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.4 - '@internationalized/message': 3.1.4 - '@internationalized/number': 3.5.3 - '@internationalized/string': 3.2.3 - '@react-aria/ssr': 3.9.6(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/i18n@3.12.3(react@18.2.0)': dependencies: '@internationalized/date': 3.5.6 @@ -24183,22 +22724,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/interactions@3.21.1(react@18.2.0)': - dependencies: - '@react-aria/ssr': 3.9.2(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/interactions@3.21.3(react@18.2.0)': - dependencies: - '@react-aria/ssr': 3.9.4(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/interactions@3.22.3(react@18.2.0)': dependencies: '@react-aria/ssr': 3.9.6(react@18.2.0) @@ -24214,40 +22739,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/label@3.7.6(react@18.2.0)': - dependencies: - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/label@3.7.8(react@18.2.0)': - dependencies: - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/link@3.6.5(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/link': 3.5.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/link@3.7.1(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/link': 3.5.5(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/link@3.7.5(react@18.2.0)': dependencies: '@react-aria/focus': 3.18.3(react@18.2.0) @@ -24258,34 +22749,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/listbox@3.11.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/list': 3.10.3(react@18.2.0) - '@react-types/listbox': 3.4.7(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/listbox@3.12.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/list': 3.10.5(react@18.2.0) - '@react-types/listbox': 3.4.9(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/listbox@3.13.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/interactions': 3.22.3(react@18.2.0) @@ -24300,54 +22763,10 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/live-announcer@3.3.2': - dependencies: - '@swc/helpers': 0.5.10 - - '@react-aria/live-announcer@3.3.4': - dependencies: - '@swc/helpers': 0.5.10 - '@react-aria/live-announcer@3.4.0': dependencies: '@swc/helpers': 0.5.10 - '@react-aria/menu@3.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/overlays': 3.21.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/menu': 3.6.1(react@18.2.0) - '@react-stately/tree': 3.7.6(react@18.2.0) - '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/menu': 3.9.7(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/menu@3.14.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/overlays': 3.22.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/menu': 3.7.1(react@18.2.0) - '@react-stately/tree': 3.8.1(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/menu': 3.9.9(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/menu@3.15.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.18.3(react@18.2.0) @@ -24366,22 +22785,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/meter@3.4.11(react@18.2.0)': - dependencies: - '@react-aria/progress': 3.4.11(react@18.2.0) - '@react-types/meter': 3.3.7(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/meter@3.4.13(react@18.2.0)': - dependencies: - '@react-aria/progress': 3.4.13(react@18.2.0) - '@react-types/meter': 3.4.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/meter@3.4.17(react@18.2.0)': dependencies: '@react-aria/progress': 3.4.17(react@18.2.0) @@ -24390,38 +22793,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/numberfield@3.11.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/spinbutton': 3.6.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/textfield': 3.14.3(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/numberfield': 3.9.1(react@18.2.0) - '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/numberfield': 3.8.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/numberfield@3.11.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/spinbutton': 3.6.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/textfield': 3.14.5(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/numberfield': 3.9.3(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/numberfield': 3.8.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/numberfield@3.11.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/i18n': 3.12.3(react@18.2.0) @@ -24438,38 +22809,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/overlays@3.21.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/ssr': 3.9.6(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-aria/visually-hidden': 3.8.10(react@18.2.0) - '@react-stately/overlays': 3.6.5(react@18.2.0) - '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/overlays': 3.8.5(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/overlays@3.22.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/ssr': 3.9.6(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-aria/visually-hidden': 3.8.12(react@18.2.0) - '@react-stately/overlays': 3.6.7(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/overlays': 3.8.7(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/overlays@3.23.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.18.3(react@18.2.0) @@ -24486,26 +22825,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/progress@3.4.11(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/progress': 3.5.2(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/progress@3.4.13(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/progress': 3.5.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/progress@3.4.17(react@18.2.0)': dependencies: '@react-aria/i18n': 3.12.3(react@18.2.0) @@ -24516,34 +22835,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/radio@3.10.2(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/form': 3.0.3(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/radio': 3.10.2(react@18.2.0) - '@react-types/radio': 3.7.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/radio@3.10.4(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/form': 3.0.5(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/radio': 3.10.4(react@18.2.0) - '@react-types/radio': 3.8.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/radio@3.10.8(react@18.2.0)': dependencies: '@react-aria/focus': 3.18.3(react@18.2.0) @@ -24558,30 +22849,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/searchfield@3.7.3(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/textfield': 3.14.3(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/searchfield': 3.5.1(react@18.2.0) - '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/searchfield': 3.5.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/searchfield@3.7.5(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/textfield': 3.14.5(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/searchfield': 3.5.3(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/searchfield': 3.5.5(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/searchfield@3.7.9(react@18.2.0)': dependencies: '@react-aria/i18n': 3.12.3(react@18.2.0) @@ -24613,68 +22880,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/select@3.14.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/form': 3.0.3(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/listbox': 3.11.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/menu': 3.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-aria/visually-hidden': 3.8.10(react@18.2.0) - '@react-stately/select': 3.6.2(react@18.2.0) - '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/select': 3.9.2(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/select@3.14.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/form': 3.0.5(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/listbox': 3.12.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/menu': 3.14.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-aria/visually-hidden': 3.8.12(react@18.2.0) - '@react-stately/select': 3.6.4(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/select': 3.9.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/selection@3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/selection': 3.14.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/selection@3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/selection': 3.15.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/selection@3.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.18.3(react@18.2.0) @@ -24687,20 +22892,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/separator@3.3.11(react@18.2.0)': - dependencies: - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/separator@3.3.13(react@18.2.0)': - dependencies: - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/separator@3.4.3(react@18.2.0)': dependencies: '@react-aria/utils': 3.25.3(react@18.2.0) @@ -24721,54 +22912,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/slider@3.7.6(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/slider': 3.5.2(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/slider': 3.7.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/slider@3.7.8(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/slider': 3.5.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/slider': 3.7.3(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/spinbutton@3.6.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/live-announcer': 3.3.2 - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/spinbutton@3.6.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/live-announcer': 3.3.4 - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/spinbutton@3.6.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/i18n': 3.12.3(react@18.2.0) @@ -24780,37 +22923,11 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/ssr@3.9.2(react@18.2.0)': - dependencies: - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/ssr@3.9.4(react@18.2.0)': - dependencies: - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/ssr@3.9.6(react@18.2.0)': dependencies: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/switch@3.6.2(react@18.2.0)': - dependencies: - '@react-aria/toggle': 3.10.2(react@18.2.0) - '@react-stately/toggle': 3.7.2(react@18.2.0) - '@react-types/switch': 3.5.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/switch@3.6.4(react@18.2.0)': - dependencies: - '@react-aria/toggle': 3.10.4(react@18.2.0) - '@react-stately/toggle': 3.7.4(react@18.2.0) - '@react-types/switch': 3.5.3(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/switch@3.6.8(react@18.2.0)': dependencies: '@react-aria/toggle': 3.10.8(react@18.2.0) @@ -24820,48 +22937,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/table@3.13.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/grid': 3.8.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/live-announcer': 3.3.2 - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-aria/visually-hidden': 3.8.10(react@18.2.0) - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/flags': 3.0.1 - '@react-stately/table': 3.11.6(react@18.2.0) - '@react-stately/virtualizer': 3.6.8(react@18.2.0) - '@react-types/checkbox': 3.7.1(react@18.2.0) - '@react-types/grid': 3.2.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/table': 3.9.3(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/table@3.14.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/grid': 3.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/live-announcer': 3.3.4 - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-aria/visually-hidden': 3.8.12(react@18.2.0) - '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/flags': 3.0.3 - '@react-stately/table': 3.11.8(react@18.2.0) - '@react-stately/virtualizer': 3.7.1(react@18.2.0) - '@react-types/checkbox': 3.8.1(react@18.2.0) - '@react-types/grid': 3.2.6(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/table': 3.9.5(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/table@3.15.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.18.3(react@18.2.0) @@ -24882,32 +22957,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/tabs@3.8.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/tabs': 3.6.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/tabs': 3.3.5(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/tabs@3.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/tabs': 3.6.6(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/tabs': 3.3.7(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/tabs@3.9.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/focus': 3.18.3(react@18.2.0) @@ -24921,36 +22970,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/tag@3.3.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/gridlist': 3.7.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/list': 3.10.3(react@18.2.0) - '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@react-aria/tag@3.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/gridlist': 3.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.12.3(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/list': 3.10.5(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/tag@3.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/gridlist': 3.9.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -24966,32 +22985,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/textfield@3.14.3(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/form': 3.0.3(react@18.2.0) - '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/textfield': 3.9.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/textfield@3.14.5(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/form': 3.0.5(react@18.2.0) - '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/textfield': 3.9.3(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/textfield@3.14.9(react@18.2.0)': dependencies: '@react-aria/focus': 3.18.3(react@18.2.0) @@ -25005,26 +22998,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/toggle@3.10.2(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/toggle': 3.7.2(react@18.2.0) - '@react-types/checkbox': 3.7.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/toggle@3.10.4(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/toggle': 3.7.4(react@18.2.0) - '@react-types/checkbox': 3.8.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/toggle@3.10.8(react@18.2.0)': dependencies: '@react-aria/focus': 3.18.3(react@18.2.0) @@ -25036,24 +23009,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/toolbar@3.0.0-beta.3(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/toolbar@3.0.0-beta.5(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/toolbar@3.0.0-beta.9(react@18.2.0)': dependencies: '@react-aria/focus': 3.18.3(react@18.2.0) @@ -25063,28 +23018,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/tooltip@3.7.2(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/tooltip': 3.4.7(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/tooltip': 3.4.7(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/tooltip@3.7.4(react@18.2.0)': - dependencies: - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/tooltip': 3.4.9(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/tooltip': 3.4.9(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/tooltip@3.7.8(react@18.2.0)': dependencies: '@react-aria/focus': 3.18.3(react@18.2.0) @@ -25096,19 +23029,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-aria/tree@3.0.0-alpha.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@react-aria/gridlist': 3.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) - '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-stately/tree': 3.8.1(react@18.2.0) - '@react-types/button': 3.9.4(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@react-aria/tree@3.0.0-beta.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/gridlist': 3.9.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -25122,24 +23042,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/utils@3.23.2(react@18.2.0)': - dependencies: - '@react-aria/ssr': 3.9.2(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - clsx: 2.1.1 - react: 18.2.0 - - '@react-aria/utils@3.24.1(react@18.2.0)': - dependencies: - '@react-aria/ssr': 3.9.4(react@18.2.0) - '@react-stately/utils': 3.10.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - '@swc/helpers': 0.5.10 - clsx: 2.1.1 - react: 18.2.0 - '@react-aria/utils@3.25.3(react@18.2.0)': dependencies: '@react-aria/ssr': 3.9.6(react@18.2.0) @@ -25160,22 +23062,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/visually-hidden@3.8.10(react@18.2.0)': - dependencies: - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-aria/visually-hidden@3.8.12(react@18.2.0)': - dependencies: - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-aria/visually-hidden@3.8.16(react@18.2.0)': dependencies: '@react-aria/interactions': 3.22.3(react@18.2.0) @@ -25194,24 +23080,6 @@ snapshots: clsx: 2.1.1 react: 18.2.0 - '@react-stately/calendar@3.4.4(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.2 - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/calendar': 3.4.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/calendar@3.5.1(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.4 - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/calendar': 3.4.6(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/calendar@3.5.5(react@18.2.0)': dependencies: '@internationalized/date': 3.5.6 @@ -25221,24 +23089,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/checkbox@3.6.3(react@18.2.0)': - dependencies: - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/checkbox': 3.7.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/checkbox@3.6.5(react@18.2.0)': - dependencies: - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/checkbox': 3.8.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/checkbox@3.6.9(react@18.2.0)': dependencies: '@react-stately/form': 3.0.6(react@18.2.0) @@ -25248,38 +23098,12 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/collections@3.10.5(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/collections@3.10.7(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/collections@3.11.0(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/color@3.6.1(react@18.2.0)': - dependencies: - '@internationalized/number': 3.5.3 - '@internationalized/string': 3.2.3 - '@react-aria/i18n': 3.11.1(react@18.2.0) - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/numberfield': 3.9.3(react@18.2.0) - '@react-stately/slider': 3.5.4(react@18.2.0) - '@react-stately/utils': 3.10.1(react@18.2.0) - '@react-types/color': 3.0.0-beta.25(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/color@3.8.0(react@18.2.0)': dependencies: '@internationalized/number': 3.5.4 @@ -25307,44 +23131,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/combobox@3.8.2(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/list': 3.10.3(react@18.2.0) - '@react-stately/overlays': 3.6.5(react@18.2.0) - '@react-stately/select': 3.6.2(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/combobox': 3.10.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/combobox@3.8.4(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/list': 3.10.5(react@18.2.0) - '@react-stately/overlays': 3.6.7(react@18.2.0) - '@react-stately/select': 3.6.4(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/combobox': 3.11.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/data@3.11.2(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/data@3.11.4(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/data@3.11.7(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) @@ -25363,30 +23149,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/datepicker@3.9.2(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.2 - '@internationalized/string': 3.2.1 - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/overlays': 3.6.5(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/datepicker': 3.7.2(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/datepicker@3.9.4(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.4 - '@internationalized/string': 3.2.3 - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/overlays': 3.6.7(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/datepicker': 3.7.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/disclosure@3.0.0-alpha.0(react@18.2.0)': dependencies: '@react-stately/utils': 3.10.4(react@18.2.0) @@ -25394,20 +23156,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/dnd@3.2.8(react@18.2.0)': - dependencies: - '@react-stately/selection': 3.14.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/dnd@3.3.1(react@18.2.0)': - dependencies: - '@react-stately/selection': 3.15.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/dnd@3.4.3(react@18.2.0)': dependencies: '@react-stately/selection': 3.17.0(react@18.2.0) @@ -25415,54 +23163,16 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/flags@3.0.1': - dependencies: - '@swc/helpers': 0.4.36 - - '@react-stately/flags@3.0.3': - dependencies: - '@swc/helpers': 0.5.10 - '@react-stately/flags@3.0.4': dependencies: '@swc/helpers': 0.5.10 - '@react-stately/form@3.0.1(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/form@3.0.3(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/form@3.0.6(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/grid@3.8.5(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/selection': 3.14.3(react@18.2.0) - '@react-types/grid': 3.2.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/grid@3.8.7(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/selection': 3.15.1(react@18.2.0) - '@react-types/grid': 3.2.6(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/grid@3.9.3(react@18.2.0)': dependencies: '@react-stately/collections': 3.11.0(react@18.2.0) @@ -25483,24 +23193,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/list@3.10.3(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/selection': 3.14.3(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/list@3.10.5(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/selection': 3.15.1(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/list@3.11.0(react@18.2.0)': dependencies: '@react-stately/collections': 3.11.0(react@18.2.0) @@ -25510,22 +23202,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/menu@3.6.1(react@18.2.0)': - dependencies: - '@react-stately/overlays': 3.6.5(react@18.2.0) - '@react-types/menu': 3.9.7(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/menu@3.7.1(react@18.2.0)': - dependencies: - '@react-stately/overlays': 3.6.7(react@18.2.0) - '@react-types/menu': 3.9.9(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/menu@3.8.3(react@18.2.0)': dependencies: '@react-stately/overlays': 3.6.11(react@18.2.0) @@ -25534,24 +23210,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/numberfield@3.9.1(react@18.2.0)': - dependencies: - '@internationalized/number': 3.5.1 - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/numberfield': 3.8.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/numberfield@3.9.3(react@18.2.0)': - dependencies: - '@internationalized/number': 3.5.3 - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/numberfield': 3.8.3(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/numberfield@3.9.7(react@18.2.0)': dependencies: '@internationalized/number': 3.5.4 @@ -25568,38 +23226,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/overlays@3.6.5(react@18.2.0)': - dependencies: - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/overlays': 3.8.5(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/overlays@3.6.7(react@18.2.0)': - dependencies: - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/overlays': 3.8.7(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/radio@3.10.2(react@18.2.0)': - dependencies: - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/radio': 3.7.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/radio@3.10.4(react@18.2.0)': - dependencies: - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/radio': 3.8.1(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/radio@3.10.8(react@18.2.0)': dependencies: '@react-stately/form': 3.0.6(react@18.2.0) @@ -25609,20 +23235,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/searchfield@3.5.1(react@18.2.0)': - dependencies: - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/searchfield': 3.5.3(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/searchfield@3.5.3(react@18.2.0)': - dependencies: - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/searchfield': 3.5.5(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/searchfield@3.5.7(react@18.2.0)': dependencies: '@react-stately/utils': 3.10.4(react@18.2.0) @@ -25630,26 +23242,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/select@3.6.2(react@18.2.0)': - dependencies: - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/list': 3.10.3(react@18.2.0) - '@react-stately/overlays': 3.6.5(react@18.2.0) - '@react-types/select': 3.9.2(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/select@3.6.4(react@18.2.0)': - dependencies: - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/list': 3.10.5(react@18.2.0) - '@react-stately/overlays': 3.6.7(react@18.2.0) - '@react-types/select': 3.9.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/select@3.6.8(react@18.2.0)': dependencies: '@react-stately/form': 3.0.6(react@18.2.0) @@ -25660,22 +23252,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/selection@3.14.3(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/selection@3.15.1(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/selection@3.17.0(react@18.2.0)': dependencies: '@react-stately/collections': 3.11.0(react@18.2.0) @@ -25684,22 +23260,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/slider@3.5.2(react@18.2.0)': - dependencies: - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/slider': 3.7.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/slider@3.5.4(react@18.2.0)': - dependencies: - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/slider': 3.7.3(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/slider@3.5.8(react@18.2.0)': dependencies: '@react-stately/utils': 3.10.4(react@18.2.0) @@ -25708,32 +23268,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/table@3.11.6(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/flags': 3.0.1 - '@react-stately/grid': 3.8.5(react@18.2.0) - '@react-stately/selection': 3.14.3(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/grid': 3.2.4(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@react-types/table': 3.9.3(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/table@3.11.8(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/flags': 3.0.3 - '@react-stately/grid': 3.8.7(react@18.2.0) - '@react-stately/selection': 3.15.1(react@18.2.0) - '@react-stately/utils': 3.10.1(react@18.2.0) - '@react-types/grid': 3.2.6(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - '@react-types/table': 3.9.5(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/table@3.12.3(react@18.2.0)': dependencies: '@react-stately/collections': 3.11.0(react@18.2.0) @@ -25755,36 +23289,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/tabs@3.6.4(react@18.2.0)': - dependencies: - '@react-stately/list': 3.10.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/tabs': 3.3.5(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/tabs@3.6.6(react@18.2.0)': - dependencies: - '@react-stately/list': 3.10.5(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/tabs': 3.3.7(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/toggle@3.7.2(react@18.2.0)': - dependencies: - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/checkbox': 3.7.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/toggle@3.7.4(react@18.2.0)': - dependencies: - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/checkbox': 3.8.1(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/toggle@3.7.8(react@18.2.0)': dependencies: '@react-stately/utils': 3.10.4(react@18.2.0) @@ -25799,38 +23303,6 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/tooltip@3.4.7(react@18.2.0)': - dependencies: - '@react-stately/overlays': 3.6.5(react@18.2.0) - '@react-types/tooltip': 3.4.7(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/tooltip@3.4.9(react@18.2.0)': - dependencies: - '@react-stately/overlays': 3.6.7(react@18.2.0) - '@react-types/tooltip': 3.4.9(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/tree@3.7.6(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/selection': 3.14.3(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/tree@3.8.1(react@18.2.0)': - dependencies: - '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/selection': 3.15.1(react@18.2.0) - '@react-stately/utils': 3.10.4(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/tree@3.8.5(react@18.2.0)': dependencies: '@react-stately/collections': 3.11.0(react@18.2.0) @@ -25840,35 +23312,11 @@ snapshots: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/utils@3.10.1(react@18.2.0)': - dependencies: - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/utils@3.10.4(react@18.2.0)': dependencies: '@swc/helpers': 0.5.10 react: 18.2.0 - '@react-stately/utils@3.9.1(react@18.2.0)': - dependencies: - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/virtualizer@3.6.8(react@18.2.0)': - dependencies: - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - - '@react-stately/virtualizer@3.7.1(react@18.2.0)': - dependencies: - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - '@swc/helpers': 0.5.10 - react: 18.2.0 - '@react-stately/virtualizer@4.1.0(react@18.2.0)': dependencies: '@react-aria/utils': 3.25.3(react@18.2.0) @@ -25881,18 +23329,6 @@ snapshots: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/breadcrumbs@3.7.3(react@18.2.0)': - dependencies: - '@react-types/link': 3.5.3(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/breadcrumbs@3.7.5(react@18.2.0)': - dependencies: - '@react-types/link': 3.5.5(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/breadcrumbs@3.7.8(react@18.2.0)': dependencies: '@react-types/link': 3.5.8(react@18.2.0) @@ -25904,44 +23340,12 @@ snapshots: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/button@3.9.2(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/button@3.9.4(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/calendar@3.4.10(react@18.2.0)': dependencies: '@internationalized/date': 3.5.6 '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/calendar@3.4.4(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.2 - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/calendar@3.4.6(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.4 - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/checkbox@3.7.1(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/checkbox@3.8.1(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/checkbox@3.8.4(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) @@ -25953,43 +23357,11 @@ snapshots: '@react-types/slider': 3.7.6(react@18.2.0) react: 18.2.0 - '@react-types/color@3.0.0-beta.25(react@18.2.0)': - dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) - '@react-types/slider': 3.7.3(react@18.2.0) - react: 18.2.0 - - '@react-types/combobox@3.10.1(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/combobox@3.11.1(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/combobox@3.13.0(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/datepicker@3.7.2(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.2 - '@react-types/calendar': 3.4.4(react@18.2.0) - '@react-types/overlays': 3.8.5(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/datepicker@3.7.4(react@18.2.0)': - dependencies: - '@internationalized/date': 3.5.4 - '@react-types/calendar': 3.4.6(react@18.2.0) - '@react-types/overlays': 3.8.7(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/datepicker@3.8.3(react@18.2.0)': dependencies: '@internationalized/date': 3.5.6 @@ -25998,79 +23370,27 @@ snapshots: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/dialog@3.5.10(react@18.2.0)': - dependencies: - '@react-types/overlays': 3.8.7(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/dialog@3.5.13(react@18.2.0)': dependencies: '@react-types/overlays': 3.8.10(react@18.2.0) '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/dialog@3.5.8(react@18.2.0)': - dependencies: - '@react-types/overlays': 3.8.5(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/form@3.7.2(react@18.2.0)': - dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) - react: 18.2.0 - - '@react-types/form@3.7.4(react@18.2.0)': - dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) - react: 18.2.0 - '@react-types/form@3.7.7(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/grid@3.2.4(react@18.2.0)': - dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) - react: 18.2.0 - - '@react-types/grid@3.2.6(react@18.2.0)': - dependencies: - '@react-types/shared': 3.23.1(react@18.2.0) - react: 18.2.0 - '@react-types/grid@3.2.9(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/link@3.5.3(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/link@3.5.5(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/link@3.5.8(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/listbox@3.4.7(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/listbox@3.4.9(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/listbox@3.5.2(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) @@ -26082,43 +23402,11 @@ snapshots: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/menu@3.9.7(react@18.2.0)': - dependencies: - '@react-types/overlays': 3.8.5(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/menu@3.9.9(react@18.2.0)': - dependencies: - '@react-types/overlays': 3.8.7(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/meter@3.3.7(react@18.2.0)': - dependencies: - '@react-types/progress': 3.5.2(react@18.2.0) - react: 18.2.0 - - '@react-types/meter@3.4.1(react@18.2.0)': - dependencies: - '@react-types/progress': 3.5.4(react@18.2.0) - react: 18.2.0 - '@react-types/meter@3.4.4(react@18.2.0)': dependencies: '@react-types/progress': 3.5.7(react@18.2.0) react: 18.2.0 - '@react-types/numberfield@3.8.1(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/numberfield@3.8.3(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/numberfield@3.8.6(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) @@ -26129,74 +23417,22 @@ snapshots: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/overlays@3.8.5(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/overlays@3.8.7(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/progress@3.5.2(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/progress@3.5.4(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/progress@3.5.7(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/radio@3.7.1(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/radio@3.8.1(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/radio@3.8.4(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/searchfield@3.5.3(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/textfield': 3.9.1(react@18.2.0) - react: 18.2.0 - - '@react-types/searchfield@3.5.5(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - '@react-types/textfield': 3.9.3(react@18.2.0) - react: 18.2.0 - '@react-types/searchfield@3.5.9(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) '@react-types/textfield': 3.9.7(react@18.2.0) react: 18.2.0 - '@react-types/select@3.9.2(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/select@3.9.4(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/select@3.9.7(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) @@ -26206,39 +23442,15 @@ snapshots: dependencies: react: 18.2.0 - '@react-types/shared@3.23.1(react@18.2.0)': - dependencies: - react: 18.2.0 - '@react-types/shared@3.25.0(react@18.2.0)': dependencies: react: 18.2.0 - '@react-types/slider@3.7.1(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/slider@3.7.3(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/slider@3.7.6(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/switch@3.5.1(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/switch@3.5.3(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/switch@3.5.6(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) @@ -26250,43 +23462,11 @@ snapshots: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/table@3.9.3(react@18.2.0)': - dependencies: - '@react-types/grid': 3.2.4(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - react: 18.2.0 - - '@react-types/table@3.9.5(react@18.2.0)': - dependencies: - '@react-types/grid': 3.2.6(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - react: 18.2.0 - '@react-types/tabs@3.3.10(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/tabs@3.3.5(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/tabs@3.3.7(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/textfield@3.9.1(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/textfield@3.9.3(react@18.2.0)': - dependencies: - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@react-types/textfield@3.9.7(react@18.2.0)': dependencies: '@react-types/shared': 3.25.0(react@18.2.0) @@ -26298,18 +23478,6 @@ snapshots: '@react-types/shared': 3.25.0(react@18.2.0) react: 18.2.0 - '@react-types/tooltip@3.4.7(react@18.2.0)': - dependencies: - '@react-types/overlays': 3.8.5(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - - '@react-types/tooltip@3.4.9(react@18.2.0)': - dependencies: - '@react-types/overlays': 3.8.7(react@18.2.0) - '@react-types/shared': 3.25.0(react@18.2.0) - react: 18.2.0 - '@redux-devtools/extension@3.3.0(redux@4.2.1)': dependencies: '@babel/runtime': 7.24.4 @@ -27977,15 +25145,6 @@ snapshots: '@swc/counter@0.1.3': {} - '@swc/helpers@0.4.14': - dependencies: - tslib: 2.6.2 - - '@swc/helpers@0.4.36': - dependencies: - legacy-swc-helpers: '@swc/helpers@0.4.14' - tslib: 2.6.2 - '@swc/helpers@0.5.10': dependencies: tslib: 2.6.2 @@ -40312,58 +37471,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-aria-components@1.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): - dependencies: - '@internationalized/date': 3.5.2 - '@internationalized/string': 3.2.1 - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/menu': 3.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/toolbar': 3.0.0-beta.3(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-stately/menu': 3.6.1(react@18.2.0) - '@react-stately/table': 3.11.6(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/form': 3.7.2(react@18.2.0) - '@react-types/grid': 3.2.4(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@react-types/table': 3.9.3(react@18.2.0) - '@swc/helpers': 0.5.10 - client-only: 0.0.1 - react: 18.2.0 - react-aria: 3.32.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react-dom: 18.2.0(react@18.2.0) - react-stately: 3.30.1(react@18.2.0) - use-sync-external-store: 1.2.0(react@18.2.0) - - react-aria-components@1.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): - dependencies: - '@internationalized/date': 3.5.4 - '@internationalized/string': 3.2.3 - '@react-aria/color': 3.0.0-beta.33(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/menu': 3.14.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/toolbar': 3.0.0-beta.5(react@18.2.0) - '@react-aria/tree': 3.0.0-alpha.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.24.1(react@18.2.0) - '@react-stately/color': 3.6.1(react@18.2.0) - '@react-stately/menu': 3.7.1(react@18.2.0) - '@react-stately/table': 3.11.8(react@18.2.0) - '@react-stately/utils': 3.10.1(react@18.2.0) - '@react-types/color': 3.0.0-beta.25(react@18.2.0) - '@react-types/form': 3.7.4(react@18.2.0) - '@react-types/grid': 3.2.6(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - '@react-types/table': 3.9.5(react@18.2.0) - '@swc/helpers': 0.5.10 - client-only: 0.0.1 - react: 18.2.0 - react-aria: 3.33.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react-dom: 18.2.0(react@18.2.0) - react-stately: 3.31.1(react@18.2.0) - use-sync-external-store: 1.2.0(react@18.2.0) - react-aria-components@1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@internationalized/date': 3.5.6 @@ -40401,90 +37508,6 @@ snapshots: react-stately: 3.33.0(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0) - react-aria@3.32.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): - dependencies: - '@internationalized/string': 3.2.1 - '@react-aria/breadcrumbs': 3.5.11(react@18.2.0) - '@react-aria/button': 3.9.3(react@18.2.0) - '@react-aria/calendar': 3.5.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/checkbox': 3.14.1(react@18.2.0) - '@react-aria/combobox': 3.8.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/datepicker': 3.9.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/dialog': 3.5.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/dnd': 3.5.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/focus': 3.16.2(react@18.2.0) - '@react-aria/gridlist': 3.7.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.10.2(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/label': 3.7.6(react@18.2.0) - '@react-aria/link': 3.6.5(react@18.2.0) - '@react-aria/listbox': 3.11.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/menu': 3.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/meter': 3.4.11(react@18.2.0) - '@react-aria/numberfield': 3.11.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/overlays': 3.21.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/progress': 3.4.11(react@18.2.0) - '@react-aria/radio': 3.10.2(react@18.2.0) - '@react-aria/searchfield': 3.7.3(react@18.2.0) - '@react-aria/select': 3.14.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/selection': 3.17.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/separator': 3.3.11(react@18.2.0) - '@react-aria/slider': 3.7.6(react@18.2.0) - '@react-aria/ssr': 3.9.2(react@18.2.0) - '@react-aria/switch': 3.6.2(react@18.2.0) - '@react-aria/table': 3.13.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/tabs': 3.8.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/tag': 3.3.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/textfield': 3.14.3(react@18.2.0) - '@react-aria/tooltip': 3.7.2(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-aria/visually-hidden': 3.8.10(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - react-aria@3.33.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): - dependencies: - '@internationalized/string': 3.2.3 - '@react-aria/breadcrumbs': 3.5.13(react@18.2.0) - '@react-aria/button': 3.9.5(react@18.2.0) - '@react-aria/calendar': 3.5.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/checkbox': 3.14.3(react@18.2.0) - '@react-aria/combobox': 3.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/datepicker': 3.10.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/dialog': 3.5.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/dnd': 3.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/focus': 3.17.1(react@18.2.0) - '@react-aria/gridlist': 3.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/i18n': 3.11.1(react@18.2.0) - '@react-aria/interactions': 3.21.3(react@18.2.0) - '@react-aria/label': 3.7.8(react@18.2.0) - '@react-aria/link': 3.7.1(react@18.2.0) - '@react-aria/listbox': 3.12.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/menu': 3.14.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/meter': 3.4.13(react@18.2.0) - '@react-aria/numberfield': 3.11.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/overlays': 3.22.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/progress': 3.4.13(react@18.2.0) - '@react-aria/radio': 3.10.4(react@18.2.0) - '@react-aria/searchfield': 3.7.5(react@18.2.0) - '@react-aria/select': 3.14.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/selection': 3.18.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/separator': 3.3.13(react@18.2.0) - '@react-aria/slider': 3.7.8(react@18.2.0) - '@react-aria/ssr': 3.9.4(react@18.2.0) - '@react-aria/switch': 3.6.4(react@18.2.0) - '@react-aria/table': 3.14.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/tabs': 3.9.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/tag': 3.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/textfield': 3.14.5(react@18.2.0) - '@react-aria/tooltip': 3.7.4(react@18.2.0) - '@react-aria/utils': 3.25.3(react@18.2.0) - '@react-aria/visually-hidden': 3.8.12(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-aria@3.35.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@internationalized/string': 3.2.4 @@ -40919,60 +37942,6 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-stately@3.30.1(react@18.2.0): - dependencies: - '@react-stately/calendar': 3.4.4(react@18.2.0) - '@react-stately/checkbox': 3.6.3(react@18.2.0) - '@react-stately/collections': 3.10.5(react@18.2.0) - '@react-stately/combobox': 3.8.2(react@18.2.0) - '@react-stately/data': 3.11.2(react@18.2.0) - '@react-stately/datepicker': 3.9.2(react@18.2.0) - '@react-stately/dnd': 3.2.8(react@18.2.0) - '@react-stately/form': 3.0.1(react@18.2.0) - '@react-stately/list': 3.10.3(react@18.2.0) - '@react-stately/menu': 3.6.1(react@18.2.0) - '@react-stately/numberfield': 3.9.1(react@18.2.0) - '@react-stately/overlays': 3.6.5(react@18.2.0) - '@react-stately/radio': 3.10.2(react@18.2.0) - '@react-stately/searchfield': 3.5.1(react@18.2.0) - '@react-stately/select': 3.6.2(react@18.2.0) - '@react-stately/selection': 3.14.3(react@18.2.0) - '@react-stately/slider': 3.5.2(react@18.2.0) - '@react-stately/table': 3.11.6(react@18.2.0) - '@react-stately/tabs': 3.6.4(react@18.2.0) - '@react-stately/toggle': 3.7.2(react@18.2.0) - '@react-stately/tooltip': 3.4.7(react@18.2.0) - '@react-stately/tree': 3.7.6(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - react: 18.2.0 - - react-stately@3.31.1(react@18.2.0): - dependencies: - '@react-stately/calendar': 3.5.1(react@18.2.0) - '@react-stately/checkbox': 3.6.5(react@18.2.0) - '@react-stately/collections': 3.10.7(react@18.2.0) - '@react-stately/combobox': 3.8.4(react@18.2.0) - '@react-stately/data': 3.11.4(react@18.2.0) - '@react-stately/datepicker': 3.9.4(react@18.2.0) - '@react-stately/dnd': 3.3.1(react@18.2.0) - '@react-stately/form': 3.0.3(react@18.2.0) - '@react-stately/list': 3.10.5(react@18.2.0) - '@react-stately/menu': 3.7.1(react@18.2.0) - '@react-stately/numberfield': 3.9.3(react@18.2.0) - '@react-stately/overlays': 3.6.7(react@18.2.0) - '@react-stately/radio': 3.10.4(react@18.2.0) - '@react-stately/searchfield': 3.5.3(react@18.2.0) - '@react-stately/select': 3.6.4(react@18.2.0) - '@react-stately/selection': 3.15.1(react@18.2.0) - '@react-stately/slider': 3.5.4(react@18.2.0) - '@react-stately/table': 3.11.8(react@18.2.0) - '@react-stately/tabs': 3.6.6(react@18.2.0) - '@react-stately/toggle': 3.7.4(react@18.2.0) - '@react-stately/tooltip': 3.4.9(react@18.2.0) - '@react-stately/tree': 3.8.1(react@18.2.0) - '@react-types/shared': 3.23.1(react@18.2.0) - react: 18.2.0 - react-stately@3.33.0(react@18.2.0): dependencies: '@react-stately/calendar': 3.5.5(react@18.2.0) From 36bd6da47956ce26194d8149f46ba27f785e82e2 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Mon, 14 Oct 2024 18:03:04 +0200 Subject: [PATCH 03/50] Release @plone/components 2.0.0-alpha.15 --- packages/components/CHANGELOG.md | 6 ++++++ packages/components/news/6405.bugfix | 1 - packages/components/package.json | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) delete mode 100644 packages/components/news/6405.bugfix diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index 94c515aa20..6e668c2f85 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -8,6 +8,12 @@ +## 2.0.0-alpha.15 (2024-10-14) + +### Bugfix + +- Fix Select component logic to support `items` use case @sneridagh [#6405](https://github.com/plone/volto/issues/6405) + ## 2.0.0-alpha.14 (2024-10-10) ### Bugfix diff --git a/packages/components/news/6405.bugfix b/packages/components/news/6405.bugfix deleted file mode 100644 index c0bf3c8080..0000000000 --- a/packages/components/news/6405.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix Select component logic to support `items` use case @sneridagh diff --git a/packages/components/package.json b/packages/components/package.json index e380537cba..ea50b678e3 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -8,7 +8,7 @@ } ], "license": "MIT", - "version": "2.0.0-alpha.14", + "version": "2.0.0-alpha.15", "repository": { "type": "git", "url": "http://github.com/plone/components.git" From 9f0159cc4766d2b09fdd45af5dc4c529977cfe1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Tue, 15 Oct 2024 13:14:21 +0200 Subject: [PATCH 04/50] Remove all traces of Jest 24 in core (#6406) --- packages/generator-volto/news/6406.internal | 1 + packages/generator-volto/package.json | 2 +- pnpm-lock.yaml | 1204 +------------------ 3 files changed, 11 insertions(+), 1196 deletions(-) create mode 100644 packages/generator-volto/news/6406.internal diff --git a/packages/generator-volto/news/6406.internal b/packages/generator-volto/news/6406.internal new file mode 100644 index 0000000000..9c0c588ecc --- /dev/null +++ b/packages/generator-volto/news/6406.internal @@ -0,0 +1 @@ +Update to use jest 26 @sneridagh diff --git a/packages/generator-volto/package.json b/packages/generator-volto/package.json index cc8f65f722..6dfc9a2dcd 100644 --- a/packages/generator-volto/package.json +++ b/packages/generator-volto/package.json @@ -83,7 +83,7 @@ }, "devDependencies": { "coveralls": "^3.0.7", - "jest": "^24.8.0", + "jest": "^26.6.3", "release-it": "^16.1.3", "yeoman-assert": "^3.1.0", "yeoman-test": "^6.1.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9633971212..919d570841 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1382,8 +1382,8 @@ importers: specifier: ^3.0.7 version: 3.1.1 jest: - specifier: ^24.8.0 - version: 24.9.0 + specifier: ^26.6.3 + version: 26.6.3 release-it: specifier: ^16.1.3 version: 16.2.1(encoding@0.1.13)(typescript@5.4.5) @@ -4171,26 +4171,14 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jest/console@24.9.0': - resolution: {integrity: sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==} - engines: {node: '>= 6'} - '@jest/console@26.6.2': resolution: {integrity: sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==} engines: {node: '>= 10.14.2'} - '@jest/core@24.9.0': - resolution: {integrity: sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==} - engines: {node: '>= 6'} - '@jest/core@26.6.3': resolution: {integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==} engines: {node: '>= 10.14.2'} - '@jest/environment@24.9.0': - resolution: {integrity: sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==} - engines: {node: '>= 6'} - '@jest/environment@26.6.2': resolution: {integrity: sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==} engines: {node: '>= 10.14.2'} @@ -4207,10 +4195,6 @@ packages: resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/fake-timers@24.9.0': - resolution: {integrity: sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==} - engines: {node: '>= 6'} - '@jest/fake-timers@26.6.2': resolution: {integrity: sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==} engines: {node: '>= 10.14.2'} @@ -4227,10 +4211,6 @@ packages: resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/reporters@24.9.0': - resolution: {integrity: sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==} - engines: {node: '>= 6'} - '@jest/reporters@26.6.2': resolution: {integrity: sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==} engines: {node: '>= 10.14.2'} @@ -4239,34 +4219,18 @@ packages: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/source-map@24.9.0': - resolution: {integrity: sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==} - engines: {node: '>= 6'} - '@jest/source-map@26.6.2': resolution: {integrity: sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==} engines: {node: '>= 10.14.2'} - '@jest/test-result@24.9.0': - resolution: {integrity: sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==} - engines: {node: '>= 6'} - '@jest/test-result@26.6.2': resolution: {integrity: sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==} engines: {node: '>= 10.14.2'} - '@jest/test-sequencer@24.9.0': - resolution: {integrity: sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==} - engines: {node: '>= 6'} - '@jest/test-sequencer@26.6.3': resolution: {integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==} engines: {node: '>= 10.14.2'} - '@jest/transform@24.9.0': - resolution: {integrity: sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==} - engines: {node: '>= 6'} - '@jest/transform@26.6.2': resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} engines: {node: '>= 10.14.2'} @@ -7183,9 +7147,6 @@ packages: '@types/sockjs@0.3.36': resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} - '@types/stack-utils@1.0.1': - resolution: {integrity: sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==} - '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -7658,9 +7619,6 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - acorn-globals@4.3.4: - resolution: {integrity: sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==} - acorn-globals@6.0.0: resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} @@ -7677,10 +7635,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@6.2.0: - resolution: {integrity: sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==} - engines: {node: '>=0.4.0'} - acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} @@ -7689,11 +7643,6 @@ packages: resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} - acorn@5.7.4: - resolution: {integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@6.4.2: resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} engines: {node: '>=0.4.0'} @@ -7791,10 +7740,6 @@ packages: resolution: {integrity: sha512-tH/fSoQp4DrEodDK3QpdiWiZTSe7sBJ9eOqcQBZ0o9HTM+5M/viSEn+sPMoTuPjQQ8n++w3QJoPEjt8LVPcrCg==} engines: {node: '>=4'} - ansi-escapes@3.2.0: - resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} - engines: {node: '>=4'} - ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -7933,9 +7878,6 @@ packages: resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} engines: {node: '>=8'} - array-equal@1.0.2: - resolution: {integrity: sha512-gUHx76KtnhEgB3HOuFYiCm3FIdEs6ocM2asHvNTkfu/Y09qQVrrVVaOKENmS2KkSaGoxgXNqC+ZVtR/n0MOkSA==} - array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} @@ -8041,10 +7983,6 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - astral-regex@1.0.0: - resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} - engines: {node: '>=4'} - astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -8056,9 +7994,6 @@ packages: async-each@1.0.6: resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==} - async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} - async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} @@ -8150,12 +8085,6 @@ packages: babel-helper-get-function-arity@6.24.1: resolution: {integrity: sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==} - babel-jest@24.9.0: - resolution: {integrity: sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==} - engines: {node: '>= 6'} - peerDependencies: - '@babel/core': ^7.0.0 - babel-jest@26.6.3: resolution: {integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==} engines: {node: '>= 10.14.2'} @@ -8189,18 +8118,10 @@ packages: babel-plugin-add-module-exports@0.2.1: resolution: {integrity: sha512-3AN/9V/rKuv90NG65m4tTHsI04XrCKsWbztIcW7a8H5iIN7WlvWucRtVV0V/rT4QvtA11n5Vmp20fLwfMWqp6g==} - babel-plugin-istanbul@5.2.0: - resolution: {integrity: sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==} - engines: {node: '>=6'} - babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} - babel-plugin-jest-hoist@24.9.0: - resolution: {integrity: sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==} - engines: {node: '>= 6'} - babel-plugin-jest-hoist@26.6.2: resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} engines: {node: '>= 10.14.2'} @@ -8273,12 +8194,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - babel-preset-jest@24.9.0: - resolution: {integrity: sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==} - engines: {node: '>= 6'} - peerDependencies: - '@babel/core': ^7.0.0 - babel-preset-jest@26.6.2: resolution: {integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==} engines: {node: '>= 10.14.2'} @@ -8453,9 +8368,6 @@ packages: browser-process-hrtime@1.0.0: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - browser-resolve@1.11.3: - resolution: {integrity: sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==} - browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} @@ -8847,9 +8759,6 @@ packages: resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} engines: {node: '>=18'} - cliui@5.0.0: - resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} - cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} @@ -9391,9 +9300,6 @@ packages: cssom@0.4.4: resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - cssstyle@1.4.0: - resolution: {integrity: sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==} - cssstyle@2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} @@ -9453,9 +9359,6 @@ packages: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} - data-urls@1.1.0: - resolution: {integrity: sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==} - data-urls@2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} @@ -9742,10 +9645,6 @@ packages: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} - detect-newline@2.1.0: - resolution: {integrity: sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==} - engines: {node: '>=0.10.0'} - detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -9772,10 +9671,6 @@ packages: dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} - diff-sequences@24.9.0: - resolution: {integrity: sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==} - engines: {node: '>= 6'} - diff-sequences@26.6.2: resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==} engines: {node: '>= 10.14.2'} @@ -9865,10 +9760,6 @@ packages: domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - domexception@1.0.1: - resolution: {integrity: sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==} - deprecated: Use your platform's native DOMException instead - domexception@2.0.1: resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} engines: {node: '>=8'} @@ -9973,9 +9864,6 @@ packages: emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - emoji-regex@7.0.3: - resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -10184,11 +10072,6 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - escodegen@1.14.3: - resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} - engines: {node: '>=4.0'} - hasBin: true - escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} @@ -10551,10 +10434,6 @@ packages: resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} engines: {node: '>=0.10.0'} - expect@24.9.0: - resolution: {integrity: sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==} - engines: {node: '>= 6'} - expect@26.6.2: resolution: {integrity: sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==} engines: {node: '>= 10.14.2'} @@ -11140,6 +11019,7 @@ packages: glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported global-cache@1.2.1: resolution: {integrity: sha512-EOeUaup5DgWKlCMhA9YFqNRIlZwoxt731jCh47WBV9fQqHgXhr3Fa55hfgIUqilIcPsfdNKN7LHjrNY+Km40KA==} @@ -11426,9 +11306,6 @@ packages: hsla-regex@1.0.0: resolution: {integrity: sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==} - html-encoding-sniffer@1.0.2: - resolution: {integrity: sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==} - html-encoding-sniffer@2.0.1: resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} engines: {node: '>=10'} @@ -11670,11 +11547,6 @@ packages: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} - import-local@2.0.0: - resolution: {integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==} - engines: {node: '>=6'} - hasBin: true - import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} @@ -11914,10 +11786,6 @@ packages: is-finalizationregistry@1.0.2: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - is-fullwidth-code-point@2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} - engines: {node: '>=4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -12236,18 +12104,10 @@ packages: resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} engines: {node: '>=10.13'} - istanbul-lib-coverage@2.0.5: - resolution: {integrity: sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==} - engines: {node: '>=6'} - istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} - istanbul-lib-instrument@3.3.0: - resolution: {integrity: sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==} - engines: {node: '>=6'} - istanbul-lib-instrument@4.0.3: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} @@ -12256,18 +12116,10 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} - istanbul-lib-report@2.0.8: - resolution: {integrity: sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==} - engines: {node: '>=6'} - istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-lib-source-maps@3.0.6: - resolution: {integrity: sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==} - engines: {node: '>=6'} - istanbul-lib-source-maps@4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} @@ -12276,10 +12128,6 @@ packages: resolution: {integrity: sha512-wHOoEsNJTVltaJp8eVkm8w+GVkVNHT2YDYo53YdzQEL2gWm1hBX5cGFR9hQJtuGLebidVX7et3+dmDZrmclduw==} engines: {node: '>=10'} - istanbul-reports@2.2.7: - resolution: {integrity: sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==} - engines: {node: '>=6'} - istanbul-reports@3.1.7: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} @@ -12309,28 +12157,15 @@ packages: resolution: {integrity: sha512-4kNcNn7J0jPO4jANEYZOHeQ/tSBvkXS+MxTbX1CKbXGd0+ZbRGDn/v/8IYWI/MmYX15iLVyYRnRev9X3ksePWA==} engines: {node: '>= 14.0.0'} - jest-changed-files@24.9.0: - resolution: {integrity: sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==} - engines: {node: '>= 6'} - jest-changed-files@26.6.2: resolution: {integrity: sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==} engines: {node: '>= 10.14.2'} - jest-cli@24.9.0: - resolution: {integrity: sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==} - engines: {node: '>= 6'} - hasBin: true - jest-cli@26.6.3: resolution: {integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==} engines: {node: '>= 10.14.2'} hasBin: true - jest-config@24.9.0: - resolution: {integrity: sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==} - engines: {node: '>= 6'} - jest-config@26.6.3: resolution: {integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==} engines: {node: '>= 10.14.2'} @@ -12340,10 +12175,6 @@ packages: ts-node: optional: true - jest-diff@24.9.0: - resolution: {integrity: sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==} - engines: {node: '>= 6'} - jest-diff@26.6.2: resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} engines: {node: '>= 10.14.2'} @@ -12352,34 +12183,18 @@ packages: resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-docblock@24.9.0: - resolution: {integrity: sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==} - engines: {node: '>= 6'} - jest-docblock@26.0.0: resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==} engines: {node: '>= 10.14.2'} - jest-each@24.9.0: - resolution: {integrity: sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==} - engines: {node: '>= 6'} - jest-each@26.6.2: resolution: {integrity: sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==} engines: {node: '>= 10.14.2'} - jest-environment-jsdom@24.9.0: - resolution: {integrity: sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==} - engines: {node: '>= 6'} - jest-environment-jsdom@26.6.2: resolution: {integrity: sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==} engines: {node: '>= 10.14.2'} - jest-environment-node@24.9.0: - resolution: {integrity: sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==} - engines: {node: '>= 6'} - jest-environment-node@26.6.2: resolution: {integrity: sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==} engines: {node: '>= 10.14.2'} @@ -12399,10 +12214,6 @@ packages: resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-haste-map@24.9.0: - resolution: {integrity: sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==} - engines: {node: '>= 6'} - jest-haste-map@26.6.2: resolution: {integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==} engines: {node: '>= 10.14.2'} @@ -12411,10 +12222,6 @@ packages: resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-jasmine2@24.9.0: - resolution: {integrity: sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==} - engines: {node: '>= 6'} - jest-jasmine2@26.6.3: resolution: {integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==} engines: {node: '>= 10.14.2'} @@ -12423,18 +12230,10 @@ packages: resolution: {integrity: sha512-cuD2XM2youMjrOxOu/7H2pLfsO8LfAG4D3WsBxd9fFyI9U0uPpmr/CORH64kbIyZ47X5x1Rbzb9ovUkAEvhEEA==} engines: {node: '>=6.0.0'} - jest-leak-detector@24.9.0: - resolution: {integrity: sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==} - engines: {node: '>= 6'} - jest-leak-detector@26.6.2: resolution: {integrity: sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==} engines: {node: '>= 10.14.2'} - jest-matcher-utils@24.9.0: - resolution: {integrity: sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==} - engines: {node: '>= 6'} - jest-matcher-utils@26.6.2: resolution: {integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==} engines: {node: '>= 10.14.2'} @@ -12447,10 +12246,6 @@ packages: resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-message-util@24.9.0: - resolution: {integrity: sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==} - engines: {node: '>= 6'} - jest-message-util@26.6.2: resolution: {integrity: sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==} engines: {node: '>= 10.14.2'} @@ -12459,10 +12254,6 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-mock@24.9.0: - resolution: {integrity: sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==} - engines: {node: '>= 6'} - jest-mock@26.6.2: resolution: {integrity: sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==} engines: {node: '>= 10.14.2'} @@ -12480,10 +12271,6 @@ packages: jest-resolve: optional: true - jest-regex-util@24.9.0: - resolution: {integrity: sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==} - engines: {node: '>= 6'} - jest-regex-util@26.0.0: resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==} engines: {node: '>= 10.14.2'} @@ -12492,52 +12279,27 @@ packages: resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-resolve-dependencies@24.9.0: - resolution: {integrity: sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==} - engines: {node: '>= 6'} - jest-resolve-dependencies@26.6.3: resolution: {integrity: sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==} engines: {node: '>= 10.14.2'} - jest-resolve@24.9.0: - resolution: {integrity: sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==} - engines: {node: '>= 6'} - jest-resolve@26.6.2: resolution: {integrity: sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==} engines: {node: '>= 10.14.2'} - jest-runner@24.9.0: - resolution: {integrity: sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==} - engines: {node: '>= 6'} - jest-runner@26.6.3: resolution: {integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==} engines: {node: '>= 10.14.2'} - jest-runtime@24.9.0: - resolution: {integrity: sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==} - engines: {node: '>= 6'} - hasBin: true - jest-runtime@26.6.3: resolution: {integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==} engines: {node: '>= 10.14.2'} hasBin: true - jest-serializer@24.9.0: - resolution: {integrity: sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==} - engines: {node: '>= 6'} - jest-serializer@26.6.2: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} - jest-snapshot@24.9.0: - resolution: {integrity: sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==} - engines: {node: '>= 6'} - jest-snapshot@26.6.2: resolution: {integrity: sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==} engines: {node: '>= 10.14.2'} @@ -12546,10 +12308,6 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-util@24.9.0: - resolution: {integrity: sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==} - engines: {node: '>= 6'} - jest-util@26.6.2: resolution: {integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==} engines: {node: '>= 10.14.2'} @@ -12566,18 +12324,10 @@ packages: resolution: {integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==} engines: {node: '>= 10.14.2'} - jest-watcher@24.9.0: - resolution: {integrity: sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==} - engines: {node: '>= 6'} - jest-watcher@26.6.2: resolution: {integrity: sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==} engines: {node: '>= 10.14.2'} - jest-worker@24.9.0: - resolution: {integrity: sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==} - engines: {node: '>= 6'} - jest-worker@25.5.0: resolution: {integrity: sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==} engines: {node: '>= 8.3'} @@ -12594,11 +12344,6 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest@24.9.0: - resolution: {integrity: sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==} - engines: {node: '>= 6'} - hasBin: true - jest@26.6.3: resolution: {integrity: sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==} engines: {node: '>= 10.14.2'} @@ -12662,9 +12407,6 @@ packages: '@babel/preset-env': optional: true - jsdom@11.12.0: - resolution: {integrity: sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==} - jsdom@16.7.0: resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} engines: {node: '>=10'} @@ -12891,10 +12633,6 @@ packages: resolution: {integrity: sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ==} hasBin: true - left-pad@1.3.0: - resolution: {integrity: sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==} - deprecated: use String.prototype.padStart() - less-loader@11.1.0: resolution: {integrity: sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==} engines: {node: '>= 14.15.0'} @@ -12911,10 +12649,6 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - levn@0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -13080,10 +12814,6 @@ packages: resolution: {integrity: sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==} hasBin: true - load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} - load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -14116,9 +13846,6 @@ packages: node-libs-browser@2.2.1: resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==} - node-notifier@5.4.5: - resolution: {integrity: sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ==} - node-notifier@8.0.2: resolution: {integrity: sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==} @@ -14394,10 +14121,6 @@ packages: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true - optionator@0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -14450,10 +14173,6 @@ packages: resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} engines: {node: '>=4'} - p-each-series@1.0.0: - resolution: {integrity: sha512-J/e9xiZZQNrt+958FFzJ+auItsBGq+UrQ7nE89AUP7UOTtjHnkISANXLdayhVzh538UnLMCSlf13lFfRIAKQOA==} - engines: {node: '>=4'} - p-each-series@2.2.0: resolution: {integrity: sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==} engines: {node: '>=8'} @@ -14506,10 +14225,6 @@ packages: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} - p-reduce@1.0.0: - resolution: {integrity: sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==} - engines: {node: '>=4'} - p-retry@4.6.2: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} @@ -14602,9 +14317,6 @@ packages: parse-url@8.1.0: resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} - parse5@4.0.0: - resolution: {integrity: sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==} - parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} @@ -14675,10 +14387,6 @@ packages: path-to-regexp@6.2.2: resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} - path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -14741,10 +14449,6 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -14776,9 +14480,6 @@ packages: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} - pn@1.1.0: - resolution: {integrity: sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==} - pnp-webpack-plugin@1.7.0: resolution: {integrity: sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==} engines: {node: '>=6'} @@ -15094,10 +14795,6 @@ packages: resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} engines: {node: '>=10'} - prelude-ls@1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -15814,10 +15511,6 @@ packages: resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - read-pkg-up@4.0.0: - resolution: {integrity: sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==} - engines: {node: '>=6'} - read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -15826,10 +15519,6 @@ packages: resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} engines: {node: '>=12'} - read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} - read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} @@ -15864,10 +15553,6 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - realpath-native@1.1.0: - resolution: {integrity: sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==} - engines: {node: '>=4'} - recast@0.23.6: resolution: {integrity: sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==} engines: {node: '>= 4'} @@ -16055,19 +15740,6 @@ packages: request-progress@3.0.0: resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} - request-promise-core@1.1.4: - resolution: {integrity: sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==} - engines: {node: '>=0.10.0'} - peerDependencies: - request: ^2.34 - - request-promise-native@1.0.9: - resolution: {integrity: sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==} - engines: {node: '>=0.12.0'} - deprecated: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142 - peerDependencies: - request: ^2.34 - request@2.88.2: resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} engines: {node: '>= 6'} @@ -16100,10 +15772,6 @@ packages: resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - resolve-cwd@2.0.0: - resolution: {integrity: sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==} - engines: {node: '>=4'} - resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -16138,9 +15806,6 @@ packages: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} - resolve@1.1.7: - resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} - resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} @@ -16204,6 +15869,7 @@ packages: rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@2.7.1: @@ -16212,6 +15878,7 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true ripemd160@2.0.2: @@ -16335,9 +16002,6 @@ packages: sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} - saxes@5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} @@ -16572,10 +16236,6 @@ packages: resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==} engines: {node: '>=0.10.0'} - slash@2.0.0: - resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} - engines: {node: '>=6'} - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -16800,10 +16460,6 @@ packages: resolution: {integrity: sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==} engines: {node: '>=16'} - stack-utils@1.0.5: - resolution: {integrity: sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==} - engines: {node: '>=8'} - stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -16842,10 +16498,6 @@ packages: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} - stealthy-require@1.1.1: - resolution: {integrity: sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==} - engines: {node: '>=0.10.0'} - stop-iteration-iterator@1.0.0: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} engines: {node: '>= 0.4'} @@ -16893,10 +16545,6 @@ packages: string-hash@1.1.3: resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} - string-length@2.0.0: - resolution: {integrity: sha512-Qka42GGrS8Mm3SZ+7cH8UXiIWI867/b/Z/feQSpQx/rbfB8UGknGEZVaUQMOUVj+soY6NpWAxily63HI1OckVQ==} - engines: {node: '>=4'} - string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -16904,10 +16552,6 @@ packages: string-natural-compare@3.0.1: resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} - string-width@3.1.0: - resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} - engines: {node: '>=6'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -16964,10 +16608,6 @@ packages: resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} engines: {node: '>=4'} - strip-ansi@5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} - strip-ansi@6.0.0: resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} engines: {node: '>=8'} @@ -17328,10 +16968,6 @@ packages: engines: {node: '>=10'} hasBin: true - test-exclude@5.2.3: - resolution: {integrity: sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==} - engines: {node: '>=6'} - test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -17350,9 +16986,6 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - throat@4.1.0: - resolution: {integrity: sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==} - throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} @@ -17630,10 +17263,6 @@ packages: tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - type-check@0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -18043,9 +17672,6 @@ packages: util.promisify@1.0.1: resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} - util.promisify@1.1.2: - resolution: {integrity: sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA==} - util@0.10.4: resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} @@ -18571,9 +18197,6 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - whatwg-url@6.5.0: - resolution: {integrity: sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==} - whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -18649,10 +18272,6 @@ packages: resolution: {integrity: sha512-NMD00arvqcq2nwqc5Q6KtrSRHK+fVD31erE5FEMahAw5PmVCgD7MUXodq3pdZSUkqA9Cda2iWx6s1XYwiJWRmw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -18662,10 +18281,6 @@ packages: worker-rpc@0.1.1: resolution: {integrity: sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==} - wrap-ansi@5.1.0: - resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} - engines: {node: '>=6'} - wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -18685,9 +18300,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@2.4.1: - resolution: {integrity: sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==} - write-file-atomic@2.4.3: resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} @@ -18702,17 +18314,6 @@ packages: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - ws@5.2.3: - resolution: {integrity: sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} @@ -18791,9 +18392,6 @@ packages: engines: {node: '>= 14'} hasBin: true - yargs-parser@13.1.2: - resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} - yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -18806,9 +18404,6 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@13.3.2: - resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} - yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} @@ -20496,12 +20091,6 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jest/console@24.9.0': - dependencies: - '@jest/source-map': 24.9.0 - chalk: 2.4.2 - slash: 2.0.0 - '@jest/console@26.6.2': dependencies: '@jest/types': 26.6.2 @@ -20511,41 +20100,6 @@ snapshots: jest-util: 26.6.2 slash: 3.0.0 - '@jest/core@24.9.0': - dependencies: - '@jest/console': 24.9.0 - '@jest/reporters': 24.9.0 - '@jest/test-result': 24.9.0 - '@jest/transform': 24.9.0 - '@jest/types': 24.9.0 - ansi-escapes: 3.2.0 - chalk: 2.4.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 24.9.0 - jest-config: 24.9.0 - jest-haste-map: 24.9.0 - jest-message-util: 24.9.0 - jest-regex-util: 24.9.0 - jest-resolve: 24.9.0 - jest-resolve-dependencies: 24.9.0 - jest-runner: 24.9.0 - jest-runtime: 24.9.0 - jest-snapshot: 24.9.0 - jest-util: 24.9.0 - jest-validate: 24.9.0 - jest-watcher: 24.9.0 - micromatch: 3.1.10 - p-each-series: 1.0.0 - realpath-native: 1.1.0 - rimraf: 2.7.1 - slash: 2.0.0 - strip-ansi: 5.2.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - '@jest/core@26.6.3': dependencies: '@jest/console': 26.6.2 @@ -20583,15 +20137,6 @@ snapshots: - ts-node - utf-8-validate - '@jest/environment@24.9.0': - dependencies: - '@jest/fake-timers': 24.9.0 - '@jest/transform': 24.9.0 - '@jest/types': 24.9.0 - jest-mock: 24.9.0 - transitivePeerDependencies: - - supports-color - '@jest/environment@26.6.2': dependencies: '@jest/fake-timers': 26.6.2 @@ -20617,14 +20162,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@jest/fake-timers@24.9.0': - dependencies: - '@jest/types': 24.9.0 - jest-message-util: 24.9.0 - jest-mock: 24.9.0 - transitivePeerDependencies: - - supports-color - '@jest/fake-timers@26.6.2': dependencies: '@jest/types': 26.6.2 @@ -20658,34 +20195,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@jest/reporters@24.9.0': - dependencies: - '@jest/environment': 24.9.0 - '@jest/test-result': 24.9.0 - '@jest/transform': 24.9.0 - '@jest/types': 24.9.0 - chalk: 2.4.2 - exit: 0.1.2 - glob: 7.1.6 - istanbul-lib-coverage: 2.0.5 - istanbul-lib-instrument: 3.3.0 - istanbul-lib-report: 2.0.8 - istanbul-lib-source-maps: 3.0.6 - istanbul-reports: 2.2.7 - jest-haste-map: 24.9.0 - jest-resolve: 24.9.0 - jest-runtime: 24.9.0 - jest-util: 24.9.0 - jest-worker: 24.9.0 - node-notifier: 5.4.5 - slash: 2.0.0 - source-map: 0.6.1 - string-length: 2.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - '@jest/reporters@26.6.2': dependencies: '@bcoe/v8-coverage': 0.2.3 @@ -20721,24 +20230,12 @@ snapshots: dependencies: '@sinclair/typebox': 0.27.8 - '@jest/source-map@24.9.0': - dependencies: - callsites: 3.1.0 - graceful-fs: 4.2.11 - source-map: 0.6.1 - '@jest/source-map@26.6.2': dependencies: callsites: 3.1.0 graceful-fs: 4.2.11 source-map: 0.6.1 - '@jest/test-result@24.9.0': - dependencies: - '@jest/console': 24.9.0 - '@jest/types': 24.9.0 - '@types/istanbul-lib-coverage': 2.0.6 - '@jest/test-result@26.6.2': dependencies: '@jest/console': 26.6.2 @@ -20746,17 +20243,6 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.2 - '@jest/test-sequencer@24.9.0': - dependencies: - '@jest/test-result': 24.9.0 - jest-haste-map: 24.9.0 - jest-runner: 24.9.0 - jest-runtime: 24.9.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - '@jest/test-sequencer@26.6.3': dependencies: '@jest/test-result': 26.6.2 @@ -20771,27 +20257,6 @@ snapshots: - ts-node - utf-8-validate - '@jest/transform@24.9.0': - dependencies: - '@babel/core': 7.24.4 - '@jest/types': 24.9.0 - babel-plugin-istanbul: 5.2.0 - chalk: 2.4.2 - convert-source-map: 1.9.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 24.9.0 - jest-regex-util: 24.9.0 - jest-util: 24.9.0 - micromatch: 3.1.10 - pirates: 4.0.6 - realpath-native: 1.1.0 - slash: 2.0.0 - source-map: 0.6.1 - write-file-atomic: 2.4.1 - transitivePeerDependencies: - - supports-color - '@jest/transform@26.6.2': dependencies: '@babel/core': 7.24.4 @@ -25800,8 +25265,6 @@ snapshots: dependencies: '@types/node': 20.12.7 - '@types/stack-utils@1.0.1': {} - '@types/stack-utils@2.0.3': {} '@types/strip-bom@3.0.0': {} @@ -26649,11 +26112,6 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-globals@4.3.4: - dependencies: - acorn: 6.4.2 - acorn-walk: 6.2.0 - acorn-globals@6.0.0: dependencies: acorn: 7.4.1 @@ -26676,14 +26134,10 @@ snapshots: dependencies: acorn: 8.11.3 - acorn-walk@6.2.0: {} - acorn-walk@7.2.0: {} acorn-walk@8.3.2: {} - acorn@5.7.4: {} - acorn@6.4.2: {} acorn@7.4.1: {} @@ -26798,8 +26252,6 @@ snapshots: ansi-escapes@2.0.0: {} - ansi-escapes@3.2.0: {} - ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 @@ -26923,8 +26375,6 @@ snapshots: array-differ@3.0.0: {} - array-equal@1.0.2: {} - array-flatten@1.1.1: {} array-includes@3.1.8: @@ -27074,8 +26524,6 @@ snapshots: dependencies: tslib: 2.6.2 - astral-regex@1.0.0: {} - astral-regex@2.0.0: {} astring@1.8.6: {} @@ -27083,8 +26531,6 @@ snapshots: async-each@1.0.6: optional: true - async-limiter@1.0.1: {} - async-retry@1.3.3: dependencies: retry: 0.13.1 @@ -27186,19 +26632,6 @@ snapshots: babel-runtime: 6.26.0 babel-types: 6.26.0 - babel-jest@24.9.0(@babel/core@7.24.4): - dependencies: - '@babel/core': 7.24.4 - '@jest/transform': 24.9.0 - '@jest/types': 24.9.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 5.2.0 - babel-preset-jest: 24.9.0(@babel/core@7.24.4) - chalk: 2.4.2 - slash: 2.0.0 - transitivePeerDependencies: - - supports-color - babel-jest@26.6.3(@babel/core@7.24.4): dependencies: '@babel/core': 7.24.4 @@ -27251,15 +26684,6 @@ snapshots: babel-plugin-add-module-exports@0.2.1: {} - babel-plugin-istanbul@5.2.0: - dependencies: - '@babel/helper-plugin-utils': 7.24.0 - find-up: 3.0.0 - istanbul-lib-instrument: 3.3.0 - test-exclude: 5.2.3 - transitivePeerDependencies: - - supports-color - babel-plugin-istanbul@6.1.1: dependencies: '@babel/helper-plugin-utils': 7.24.0 @@ -27270,10 +26694,6 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-jest-hoist@24.9.0: - dependencies: - '@types/babel__traverse': 7.20.5 - babel-plugin-jest-hoist@26.6.2: dependencies: '@babel/template': 7.24.0 @@ -27394,12 +26814,6 @@ snapshots: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) - babel-preset-jest@24.9.0(@babel/core@7.24.4): - dependencies: - '@babel/core': 7.24.4 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - babel-plugin-jest-hoist: 24.9.0 - babel-preset-jest@26.6.2(@babel/core@7.24.4): dependencies: '@babel/core': 7.24.4 @@ -27690,10 +27104,6 @@ snapshots: browser-process-hrtime@1.0.0: {} - browser-resolve@1.11.3: - dependencies: - resolve: 1.1.7 - browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 @@ -28239,12 +27649,6 @@ snapshots: is-wsl: 3.1.0 is64bit: 2.0.0 - cliui@5.0.0: - dependencies: - string-width: 3.1.0 - strip-ansi: 5.2.0 - wrap-ansi: 5.1.0 - cliui@6.0.0: dependencies: string-width: 4.2.3 @@ -28901,10 +28305,6 @@ snapshots: cssom@0.4.4: {} - cssstyle@1.4.0: - dependencies: - cssom: 0.3.8 - cssstyle@2.3.0: dependencies: cssom: 0.3.8 @@ -28995,12 +28395,6 @@ snapshots: data-uri-to-buffer@6.0.2: {} - data-urls@1.1.0: - dependencies: - abab: 2.0.6 - whatwg-mimetype: 2.3.0 - whatwg-url: 7.1.0 - data-urls@2.0.0: dependencies: abab: 2.0.6 @@ -29257,8 +28651,6 @@ snapshots: detect-libc@2.0.3: {} - detect-newline@2.1.0: {} - detect-newline@3.1.0: {} detect-node@2.1.0: {} @@ -29290,8 +28682,6 @@ snapshots: asap: 2.0.6 wrappy: 1.0.2 - diff-sequences@24.9.0: {} - diff-sequences@26.6.2: {} diff-sequences@29.6.3: {} @@ -29379,10 +28769,6 @@ snapshots: domelementtype@2.3.0: {} - domexception@1.0.1: - dependencies: - webidl-conversions: 4.0.2 - domexception@2.0.1: dependencies: webidl-conversions: 5.0.0 @@ -29500,8 +28886,6 @@ snapshots: emoji-regex@10.3.0: {} - emoji-regex@7.0.3: {} - emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -29865,15 +29249,6 @@ snapshots: escape-string-regexp@5.0.0: {} - escodegen@1.14.3: - dependencies: - esprima: 4.0.1 - estraverse: 4.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - escodegen@2.1.0: dependencies: esprima: 4.0.1 @@ -30698,17 +30073,6 @@ snapshots: transitivePeerDependencies: - supports-color - expect@24.9.0: - dependencies: - '@jest/types': 24.9.0 - ansi-styles: 3.2.1 - jest-get-type: 24.9.0 - jest-matcher-utils: 24.9.0 - jest-message-util: 24.9.0 - jest-regex-util: 24.9.0 - transitivePeerDependencies: - - supports-color - expect@26.6.2: dependencies: '@jest/types': 26.6.2 @@ -31604,7 +30968,8 @@ snapshots: grouped-queue@2.0.0: {} - growly@1.3.0: {} + growly@1.3.0: + optional: true gunzip-maybe@1.4.2: dependencies: @@ -31834,10 +31199,6 @@ snapshots: hsla-regex@1.0.0: {} - html-encoding-sniffer@1.0.2: - dependencies: - whatwg-encoding: 1.0.5 - html-encoding-sniffer@2.0.1: dependencies: whatwg-encoding: 1.0.5 @@ -32123,11 +31484,6 @@ snapshots: import-lazy@4.0.0: {} - import-local@2.0.0: - dependencies: - pkg-dir: 3.0.0 - resolve-cwd: 2.0.0 - import-local@3.1.0: dependencies: pkg-dir: 4.2.0 @@ -32399,8 +31755,6 @@ snapshots: dependencies: call-bind: 1.0.7 - is-fullwidth-code-point@2.0.0: {} - is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@4.0.0: {} @@ -32635,22 +31989,8 @@ snapshots: lodash.isstring: 4.0.1 lodash.uniqby: 4.7.0 - istanbul-lib-coverage@2.0.5: {} - istanbul-lib-coverage@3.2.2: {} - istanbul-lib-instrument@3.3.0: - dependencies: - '@babel/generator': 7.24.4 - '@babel/parser': 7.24.4 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.20.5 - istanbul-lib-coverage: 2.0.5 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - istanbul-lib-instrument@4.0.3: dependencies: '@babel/core': 7.24.4 @@ -32670,28 +32010,12 @@ snapshots: transitivePeerDependencies: - supports-color - istanbul-lib-report@2.0.8: - dependencies: - istanbul-lib-coverage: 2.0.5 - make-dir: 2.1.0 - supports-color: 6.1.0 - istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@3.0.6: - dependencies: - debug: 4.3.4(supports-color@8.1.1) - istanbul-lib-coverage: 2.0.5 - make-dir: 2.1.0 - rimraf: 2.7.1 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - istanbul-lib-source-maps@4.0.1: dependencies: debug: 4.3.4(supports-color@8.1.1) @@ -32708,10 +32032,6 @@ snapshots: transitivePeerDependencies: - supports-color - istanbul-reports@2.2.7: - dependencies: - html-escaper: 2.0.2 - istanbul-reports@3.1.7: dependencies: html-escaper: 2.0.2 @@ -32754,38 +32074,12 @@ snapshots: jest-matcher-utils: 29.2.2 lodash.merge: 4.6.2 - jest-changed-files@24.9.0: - dependencies: - '@jest/types': 24.9.0 - execa: 1.0.0 - throat: 4.1.0 - jest-changed-files@26.6.2: dependencies: '@jest/types': 26.6.2 execa: 4.1.0 throat: 5.0.0 - jest-cli@24.9.0: - dependencies: - '@jest/core': 24.9.0 - '@jest/test-result': 24.9.0 - '@jest/types': 24.9.0 - chalk: 2.4.2 - exit: 0.1.2 - import-local: 2.0.0 - is-ci: 2.0.0 - jest-config: 24.9.0 - jest-util: 24.9.0 - jest-validate: 24.9.0 - prompts: 2.4.2 - realpath-native: 1.1.0 - yargs: 13.3.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - jest-cli@26.6.3: dependencies: '@jest/core': 26.6.3 @@ -32808,30 +32102,6 @@ snapshots: - ts-node - utf-8-validate - jest-config@24.9.0: - dependencies: - '@babel/core': 7.24.4 - '@jest/test-sequencer': 24.9.0 - '@jest/types': 24.9.0 - babel-jest: 24.9.0(@babel/core@7.24.4) - chalk: 2.4.2 - glob: 7.1.6 - jest-environment-jsdom: 24.9.0 - jest-environment-node: 24.9.0 - jest-get-type: 24.9.0 - jest-jasmine2: 24.9.0 - jest-regex-util: 24.9.0 - jest-resolve: 24.9.0 - jest-util: 24.9.0 - jest-validate: 24.9.0 - micromatch: 3.1.10 - pretty-format: 24.9.0 - realpath-native: 1.1.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - jest-config@26.6.3: dependencies: '@babel/core': 7.24.4 @@ -32858,13 +32128,6 @@ snapshots: - supports-color - utf-8-validate - jest-diff@24.9.0: - dependencies: - chalk: 2.4.2 - diff-sequences: 24.9.0 - jest-get-type: 24.9.0 - pretty-format: 24.9.0 - jest-diff@26.6.2: dependencies: chalk: 4.1.2 @@ -32879,24 +32142,10 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 - jest-docblock@24.9.0: - dependencies: - detect-newline: 2.1.0 - jest-docblock@26.0.0: dependencies: detect-newline: 3.1.0 - jest-each@24.9.0: - dependencies: - '@jest/types': 24.9.0 - chalk: 2.4.2 - jest-get-type: 24.9.0 - jest-util: 24.9.0 - pretty-format: 24.9.0 - transitivePeerDependencies: - - supports-color - jest-each@26.6.2: dependencies: '@jest/types': 26.6.2 @@ -32905,19 +32154,6 @@ snapshots: jest-util: 26.6.2 pretty-format: 26.6.2 - jest-environment-jsdom@24.9.0: - dependencies: - '@jest/environment': 24.9.0 - '@jest/fake-timers': 24.9.0 - '@jest/types': 24.9.0 - jest-mock: 24.9.0 - jest-util: 24.9.0 - jsdom: 11.12.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - jest-environment-jsdom@26.6.2: dependencies: '@jest/environment': 26.6.2 @@ -32933,16 +32169,6 @@ snapshots: - supports-color - utf-8-validate - jest-environment-node@24.9.0: - dependencies: - '@jest/environment': 24.9.0 - '@jest/fake-timers': 24.9.0 - '@jest/types': 24.9.0 - jest-mock: 24.9.0 - jest-util: 24.9.0 - transitivePeerDependencies: - - supports-color - jest-environment-node@26.6.2: dependencies: '@jest/environment': 26.6.2 @@ -32960,24 +32186,6 @@ snapshots: jest-get-type@29.6.3: {} - jest-haste-map@24.9.0: - dependencies: - '@jest/types': 24.9.0 - anymatch: 2.0.0 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - invariant: 2.2.4 - jest-serializer: 24.9.0 - jest-util: 24.9.0 - jest-worker: 24.9.0 - micromatch: 3.1.10 - sane: 4.1.0 - walker: 1.0.8 - optionalDependencies: - fsevents: 1.2.13 - transitivePeerDependencies: - - supports-color - jest-haste-map@26.6.2: dependencies: '@jest/types': 26.6.2 @@ -33014,27 +32222,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - jest-jasmine2@24.9.0: - dependencies: - '@babel/traverse': 7.24.1 - '@jest/environment': 24.9.0 - '@jest/test-result': 24.9.0 - '@jest/types': 24.9.0 - chalk: 2.4.2 - co: 4.6.0 - expect: 24.9.0 - is-generator-fn: 2.1.0 - jest-each: 24.9.0 - jest-matcher-utils: 24.9.0 - jest-message-util: 24.9.0 - jest-runtime: 24.9.0 - jest-snapshot: 24.9.0 - jest-util: 24.9.0 - pretty-format: 24.9.0 - throat: 4.1.0 - transitivePeerDependencies: - - supports-color - jest-jasmine2@26.6.3: dependencies: '@babel/traverse': 7.24.1 @@ -33069,23 +32256,11 @@ snapshots: strip-ansi: 4.0.0 xml: 1.0.1 - jest-leak-detector@24.9.0: - dependencies: - jest-get-type: 24.9.0 - pretty-format: 24.9.0 - jest-leak-detector@26.6.2: dependencies: jest-get-type: 26.3.0 pretty-format: 26.6.2 - jest-matcher-utils@24.9.0: - dependencies: - chalk: 2.4.2 - jest-diff: 24.9.0 - jest-get-type: 24.9.0 - pretty-format: 24.9.0 - jest-matcher-utils@26.6.2: dependencies: chalk: 4.1.2 @@ -33107,19 +32282,6 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 - jest-message-util@24.9.0: - dependencies: - '@babel/code-frame': 7.24.2 - '@jest/test-result': 24.9.0 - '@jest/types': 24.9.0 - '@types/stack-utils': 1.0.1 - chalk: 2.4.2 - micromatch: 3.1.10 - slash: 2.0.0 - stack-utils: 1.0.5 - transitivePeerDependencies: - - supports-color - jest-message-util@26.6.2: dependencies: '@babel/code-frame': 7.24.2 @@ -33144,10 +32306,6 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock@24.9.0: - dependencies: - '@jest/types': 24.9.0 - jest-mock@26.6.2: dependencies: '@jest/types': 26.6.2 @@ -33159,28 +32317,14 @@ snapshots: '@types/node': 20.12.7 jest-util: 29.7.0 - jest-pnp-resolver@1.2.3(jest-resolve@24.9.0): - optionalDependencies: - jest-resolve: 24.9.0 - jest-pnp-resolver@1.2.3(jest-resolve@26.6.2): optionalDependencies: jest-resolve: 26.6.2 - jest-regex-util@24.9.0: {} - jest-regex-util@26.0.0: {} jest-regex-util@29.6.3: {} - jest-resolve-dependencies@24.9.0: - dependencies: - '@jest/types': 24.9.0 - jest-regex-util: 24.9.0 - jest-snapshot: 24.9.0 - transitivePeerDependencies: - - supports-color - jest-resolve-dependencies@26.6.3: dependencies: '@jest/types': 26.6.2 @@ -33189,14 +32333,6 @@ snapshots: transitivePeerDependencies: - supports-color - jest-resolve@24.9.0: - dependencies: - '@jest/types': 24.9.0 - browser-resolve: 1.11.3 - chalk: 2.4.2 - jest-pnp-resolver: 1.2.3(jest-resolve@24.9.0) - realpath-native: 1.1.0 - jest-resolve@26.6.2: dependencies: '@jest/types': 26.6.2 @@ -33208,32 +32344,6 @@ snapshots: resolve: 1.22.8 slash: 3.0.0 - jest-runner@24.9.0: - dependencies: - '@jest/console': 24.9.0 - '@jest/environment': 24.9.0 - '@jest/test-result': 24.9.0 - '@jest/types': 24.9.0 - chalk: 2.4.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 24.9.0 - jest-docblock: 24.9.0 - jest-haste-map: 24.9.0 - jest-jasmine2: 24.9.0 - jest-leak-detector: 24.9.0 - jest-message-util: 24.9.0 - jest-resolve: 24.9.0 - jest-runtime: 24.9.0 - jest-util: 24.9.0 - jest-worker: 24.9.0 - source-map-support: 0.5.21 - throat: 4.1.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - jest-runner@26.6.3: dependencies: '@jest/console': 26.6.2 @@ -33263,36 +32373,6 @@ snapshots: - ts-node - utf-8-validate - jest-runtime@24.9.0: - dependencies: - '@jest/console': 24.9.0 - '@jest/environment': 24.9.0 - '@jest/source-map': 24.9.0 - '@jest/transform': 24.9.0 - '@jest/types': 24.9.0 - '@types/yargs': 13.0.12 - chalk: 2.4.2 - exit: 0.1.2 - glob: 7.1.6 - graceful-fs: 4.2.11 - jest-config: 24.9.0 - jest-haste-map: 24.9.0 - jest-message-util: 24.9.0 - jest-mock: 24.9.0 - jest-regex-util: 24.9.0 - jest-resolve: 24.9.0 - jest-snapshot: 24.9.0 - jest-util: 24.9.0 - jest-validate: 24.9.0 - realpath-native: 1.1.0 - slash: 2.0.0 - strip-bom: 3.0.0 - yargs: 13.3.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - jest-runtime@26.6.3: dependencies: '@jest/console': 26.6.2 @@ -33329,31 +32409,11 @@ snapshots: - ts-node - utf-8-validate - jest-serializer@24.9.0: {} - jest-serializer@26.6.2: dependencies: '@types/node': 20.12.7 graceful-fs: 4.2.11 - jest-snapshot@24.9.0: - dependencies: - '@babel/types': 7.20.5 - '@jest/types': 24.9.0 - chalk: 2.4.2 - expect: 24.9.0 - jest-diff: 24.9.0 - jest-get-type: 24.9.0 - jest-matcher-utils: 24.9.0 - jest-message-util: 24.9.0 - jest-resolve: 24.9.0 - mkdirp: 0.5.6 - natural-compare: 1.4.0 - pretty-format: 24.9.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - jest-snapshot@26.6.2: dependencies: '@babel/types': 7.20.5 @@ -33400,23 +32460,6 @@ snapshots: transitivePeerDependencies: - supports-color - jest-util@24.9.0: - dependencies: - '@jest/console': 24.9.0 - '@jest/fake-timers': 24.9.0 - '@jest/source-map': 24.9.0 - '@jest/test-result': 24.9.0 - '@jest/types': 24.9.0 - callsites: 3.1.0 - chalk: 2.4.2 - graceful-fs: 4.2.11 - is-ci: 2.0.0 - mkdirp: 0.5.6 - slash: 2.0.0 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - jest-util@26.6.2: dependencies: '@jest/types': 26.6.2 @@ -33453,18 +32496,6 @@ snapshots: leven: 3.1.0 pretty-format: 26.6.2 - jest-watcher@24.9.0: - dependencies: - '@jest/test-result': 24.9.0 - '@jest/types': 24.9.0 - '@types/yargs': 13.0.12 - ansi-escapes: 3.2.0 - chalk: 2.4.2 - jest-util: 24.9.0 - string-length: 2.0.0 - transitivePeerDependencies: - - supports-color - jest-watcher@26.6.2: dependencies: '@jest/test-result': 26.6.2 @@ -33475,11 +32506,6 @@ snapshots: jest-util: 26.6.2 string-length: 4.0.2 - jest-worker@24.9.0: - dependencies: - merge-stream: 2.0.0 - supports-color: 6.1.0 - jest-worker@25.5.0: dependencies: merge-stream: 2.0.0 @@ -33504,15 +32530,6 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@24.9.0: - dependencies: - import-local: 2.0.0 - jest-cli: 24.9.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - jest@26.6.3: dependencies: '@jest/core': 26.6.3 @@ -33591,38 +32608,6 @@ snapshots: transitivePeerDependencies: - supports-color - jsdom@11.12.0: - dependencies: - abab: 2.0.6 - acorn: 5.7.4 - acorn-globals: 4.3.4 - array-equal: 1.0.2 - cssom: 0.3.8 - cssstyle: 1.4.0 - data-urls: 1.1.0 - domexception: 1.0.1 - escodegen: 1.14.3 - html-encoding-sniffer: 1.0.2 - left-pad: 1.3.0 - nwsapi: 2.2.7 - parse5: 4.0.0 - pn: 1.1.0 - request: 2.88.2 - request-promise-native: 1.0.9(request@2.88.2) - sax: 1.3.0 - symbol-tree: 3.2.4 - tough-cookie: 2.5.0 - w3c-hr-time: 1.0.2 - webidl-conversions: 4.0.2 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 6.5.0 - ws: 5.2.3 - xml-name-validator: 3.0.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - jsdom@16.7.0: dependencies: abab: 2.0.6 @@ -33901,8 +32886,6 @@ snapshots: lcov-parse@1.0.0: {} - left-pad@1.3.0: {} - less-loader@11.1.0(less@3.11.1)(webpack@5.90.1(esbuild@0.20.2)): dependencies: klona: 2.0.6 @@ -33925,11 +32908,6 @@ snapshots: leven@3.1.0: {} - levn@0.3.0: - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -34104,13 +33082,6 @@ snapshots: '@lmdb/lmdb-linux-x64': 2.8.5 '@lmdb/lmdb-win32-x64': 2.8.5 - load-json-file@4.0.0: - dependencies: - graceful-fs: 4.2.11 - parse-json: 4.0.0 - pify: 3.0.0 - strip-bom: 3.0.0 - load-tsconfig@0.2.5: {} load-yaml-file@0.2.0: @@ -35719,14 +34690,6 @@ snapshots: util: 0.11.1 vm-browserify: 1.1.2 - node-notifier@5.4.5: - dependencies: - growly: 1.3.0 - is-wsl: 1.1.0 - semver: 5.7.2 - shellwords: 0.1.1 - which: 1.3.1 - node-notifier@8.0.2: dependencies: growly: 1.3.0 @@ -36069,15 +35032,6 @@ snapshots: opener@1.5.2: {} - optionator@0.8.3: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.5 - optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 @@ -36151,10 +35105,6 @@ snapshots: p-defer@1.0.0: {} - p-each-series@1.0.0: - dependencies: - p-reduce: 1.0.0 - p-each-series@2.2.0: {} p-finally@1.0.0: {} @@ -36204,8 +35154,6 @@ snapshots: eventemitter3: 4.0.7 p-timeout: 3.2.0 - p-reduce@1.0.0: {} - p-retry@4.6.2: dependencies: '@types/retry': 0.12.0 @@ -36453,8 +35401,6 @@ snapshots: dependencies: parse-path: 7.0.0 - parse5@4.0.0: {} - parse5@6.0.1: {} parse5@7.1.2: @@ -36506,10 +35452,6 @@ snapshots: path-to-regexp@6.2.2: {} - path-type@3.0.0: - dependencies: - pify: 3.0.0 - path-type@4.0.0: {} path-type@5.0.0: {} @@ -36562,8 +35504,6 @@ snapshots: pify@2.3.0: {} - pify@3.0.0: {} - pify@4.0.1: {} pirates@4.0.6: {} @@ -36594,8 +35534,6 @@ snapshots: dependencies: find-up: 3.0.0 - pn@1.1.0: {} - pnp-webpack-plugin@1.7.0(typescript@5.4.5): dependencies: ts-pnp: 1.2.0(typescript@5.4.5) @@ -36988,8 +35926,6 @@ snapshots: path-exists: 4.0.0 which-pm: 2.0.0 - prelude-ls@1.1.2: {} - prelude-ls@1.2.1: {} prepend-http@2.0.0: {} @@ -38059,11 +36995,6 @@ snapshots: normalize-package-data: 5.0.0 npm-normalize-package-bin: 3.0.1 - read-pkg-up@4.0.0: - dependencies: - find-up: 3.0.0 - read-pkg: 3.0.0 - read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 @@ -38076,12 +37007,6 @@ snapshots: read-pkg: 6.0.0 type-fest: 1.4.0 - read-pkg@3.0.0: - dependencies: - load-json-file: 4.0.0 - normalize-package-data: 2.5.0 - path-type: 3.0.0 - read-pkg@5.2.0: dependencies: '@types/normalize-package-data': 2.4.4 @@ -38144,10 +37069,6 @@ snapshots: dependencies: picomatch: 2.3.1 - realpath-native@1.1.0: - dependencies: - util.promisify: 1.1.2 - recast@0.23.6: dependencies: ast-types: 0.16.1 @@ -38560,18 +37481,6 @@ snapshots: dependencies: throttleit: 1.0.1 - request-promise-core@1.1.4(request@2.88.2): - dependencies: - lodash: 4.17.21 - request: 2.88.2 - - request-promise-native@1.0.9(request@2.88.2): - dependencies: - request: 2.88.2 - request-promise-core: 1.1.4(request@2.88.2) - stealthy-require: 1.1.1 - tough-cookie: 2.5.0 - request@2.88.2: dependencies: aws-sign2: 0.7.0 @@ -38611,10 +37520,6 @@ snapshots: resolve-alpn@1.2.1: {} - resolve-cwd@2.0.0: - dependencies: - resolve-from: 3.0.0 - resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 @@ -38646,8 +37551,6 @@ snapshots: resolve.exports@2.0.2: {} - resolve@1.1.7: {} - resolve@1.19.0: dependencies: is-core-module: 2.13.1 @@ -38877,8 +37780,6 @@ snapshots: sax@1.2.4: {} - sax@1.3.0: {} - saxes@5.0.1: dependencies: xmlchars: 2.2.0 @@ -39114,7 +38015,8 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 - shellwords@0.1.1: {} + shellwords@0.1.1: + optional: true side-channel@1.0.6: dependencies: @@ -39170,8 +38072,6 @@ snapshots: slash@1.0.0: {} - slash@2.0.0: {} - slash@3.0.0: {} slash@4.0.0: {} @@ -39448,10 +38348,6 @@ snapshots: stack-trace@1.0.0-pre2: {} - stack-utils@1.0.5: - dependencies: - escape-string-regexp: 2.0.0 - stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 @@ -39489,8 +38385,6 @@ snapshots: stdin-discarder@0.2.2: {} - stealthy-require@1.1.1: {} - stop-iteration-iterator@1.0.0: dependencies: internal-slot: 1.0.7 @@ -39550,11 +38444,6 @@ snapshots: string-hash@1.1.3: {} - string-length@2.0.0: - dependencies: - astral-regex: 1.0.0 - strip-ansi: 4.0.0 - string-length@4.0.2: dependencies: char-regex: 1.0.2 @@ -39562,12 +38451,6 @@ snapshots: string-natural-compare@3.0.1: {} - string-width@3.1.0: - dependencies: - emoji-regex: 7.0.3 - is-fullwidth-code-point: 2.0.0 - strip-ansi: 5.2.0 - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -39661,10 +38544,6 @@ snapshots: dependencies: ansi-regex: 3.0.1 - strip-ansi@5.2.0: - dependencies: - ansi-regex: 4.1.1 - strip-ansi@6.0.0: dependencies: ansi-regex: 5.0.1 @@ -40148,13 +39027,6 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - test-exclude@5.2.3: - dependencies: - glob: 7.1.6 - minimatch: 3.1.2 - read-pkg-up: 4.0.0 - require-main-filename: 2.0.0 - test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -40173,8 +39045,6 @@ snapshots: dependencies: any-promise: 1.3.0 - throat@4.1.0: {} - throat@5.0.0: {} throttleit@1.0.1: {} @@ -40429,10 +39299,6 @@ snapshots: tweetnacl@0.14.5: {} - type-check@0.3.2: - dependencies: - prelude-ls: 1.1.2 - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -40877,16 +39743,6 @@ snapshots: has-symbols: 1.0.3 object.getownpropertydescriptors: 2.1.8 - util.promisify@1.1.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - for-each: 0.3.3 - has-proto: 1.0.3 - has-symbols: 1.0.3 - object.getownpropertydescriptors: 2.1.8 - safe-array-concat: 1.1.2 - util@0.10.4: dependencies: inherits: 2.0.3 @@ -41696,12 +40552,6 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - whatwg-url@6.5.0: - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - whatwg-url@7.1.0: dependencies: lodash.sortby: 4.7.0 @@ -41801,8 +40651,6 @@ snapshots: dependencies: execa: 5.1.1 - word-wrap@1.2.5: {} - wordwrap@1.0.0: {} worker-farm@1.7.0: @@ -41813,12 +40661,6 @@ snapshots: dependencies: microevent.ts: 0.1.1 - wrap-ansi@5.1.0: - dependencies: - ansi-styles: 3.2.1 - string-width: 3.1.0 - strip-ansi: 5.2.0 - wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -41845,12 +40687,6 @@ snapshots: wrappy@1.0.2: {} - write-file-atomic@2.4.1: - dependencies: - graceful-fs: 4.2.11 - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - write-file-atomic@2.4.3: dependencies: graceful-fs: 4.2.11 @@ -41874,10 +40710,6 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 - ws@5.2.3: - dependencies: - async-limiter: 1.0.1 - ws@7.5.9: {} ws@8.16.0: {} @@ -41912,11 +40744,6 @@ snapshots: yaml@2.4.1: {} - yargs-parser@13.1.2: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 @@ -41926,19 +40753,6 @@ snapshots: yargs-parser@21.1.1: {} - yargs@13.3.2: - dependencies: - cliui: 5.0.0 - find-up: 3.0.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 3.1.0 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 13.1.2 - yargs@15.4.1: dependencies: cliui: 6.0.0 From 65abdb709081dee6b320b069880692a9f8251af1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Tue, 15 Oct 2024 13:27:34 +0200 Subject: [PATCH 05/50] Update `typescript` and `vitest` everywhere (#6407) --- apps/nextjs/package.json | 2 +- apps/plone/package.json | 2 +- apps/remix/package.json | 2 +- apps/vite-ssr/package.json | 2 +- package.json | 4 +- packages/blocks/package.json | 4 +- packages/client/news/6407.internal | 1 + packages/client/package.json | 4 +- packages/components/news/6407.internal | 1 + packages/components/package.json | 4 +- packages/helpers/news/6407.internal | 2 + packages/helpers/package.json | 10 +- packages/providers/news/6407.internal | 1 + packages/providers/package.json | 4 +- packages/registry/news/6407.internal | 1 + packages/registry/package.json | 4 +- packages/slots/package.json | 4 +- packages/types/news/6407.internal | 1 + packages/types/package.json | 2 +- packages/volto/news/6407.internal | 1 + packages/volto/package.json | 2 +- pnpm-lock.yaml | 1553 ++++++++---------------- 22 files changed, 550 insertions(+), 1061 deletions(-) create mode 100644 packages/client/news/6407.internal create mode 100644 packages/components/news/6407.internal create mode 100644 packages/helpers/news/6407.internal create mode 100644 packages/providers/news/6407.internal create mode 100644 packages/registry/news/6407.internal create mode 100644 packages/types/news/6407.internal create mode 100644 packages/volto/news/6407.internal diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index a9d8ea82ba..baa7567b02 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -28,6 +28,6 @@ "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "14.2.2", - "typescript": "^5.4.5" + "typescript": "^5.6.3" } } diff --git a/apps/plone/package.json b/apps/plone/package.json index e87b8c95e3..d1b700ff81 100644 --- a/apps/plone/package.json +++ b/apps/plone/package.json @@ -348,7 +348,7 @@ "ts-jest": "^26.4.2", "ts-loader": "9.4.4", "tsconfig": "*", - "typescript": "^5.4.2", + "typescript": "^5.6.3", "use-trace-update": "1.3.2", "wait-on": "6.0.0", "webpack": "5.90.1", diff --git a/apps/remix/package.json b/apps/remix/package.json index b422edc87d..06b5085260 100644 --- a/apps/remix/package.json +++ b/apps/remix/package.json @@ -27,7 +27,7 @@ "@tanstack/react-query-devtools": "^5.37.1", "@types/react": "^18.2.20", "@types/react-dom": "^18.2.7", - "typescript": "^5.4.2", + "typescript": "^5.6.3", "vite": "^5.1.0", "vite-tsconfig-paths": "^4.2.1" }, diff --git a/apps/vite-ssr/package.json b/apps/vite-ssr/package.json index 97e89107e5..54e847b83d 100644 --- a/apps/vite-ssr/package.json +++ b/apps/vite-ssr/package.json @@ -44,7 +44,7 @@ "isbot": "^4.3.0", "node-fetch": "^3.3.2", "serve-static": "^1.15.0", - "typescript": "^5.4.2", + "typescript": "^5.6.3", "vite": "^5.2.9", "vite-plugin-babel": "^1.2.0" } diff --git a/package.json b/package.json index c5be31bcc6..0b7d97e4de 100644 --- a/package.json +++ b/package.json @@ -36,8 +36,8 @@ "husky": "9.0.11", "lint-staged": "15.2.2", "tsconfig": "workspace:*", - "typescript": "^5.4.5", - "vitest": "^1.5.0" + "typescript": "^5.6.3", + "vitest": "^2.1.3" }, "packageManager": "pnpm@9.1.1", "pnpm": { diff --git a/packages/blocks/package.json b/packages/blocks/package.json index 3b945309d6..d8b191191e 100644 --- a/packages/blocks/package.json +++ b/packages/blocks/package.json @@ -61,7 +61,7 @@ "parcel": "^2.12.0", "release-it": "17.1.1", "tsconfig": "workspace:*", - "typescript": "5.4.2", - "vitest": "^1.3.1" + "typescript": "^5.6.3", + "vitest": "^2.1.3" } } diff --git a/packages/client/news/6407.internal b/packages/client/news/6407.internal new file mode 100644 index 0000000000..f6daada94d --- /dev/null +++ b/packages/client/news/6407.internal @@ -0,0 +1 @@ +Update typescript and vitest everywhere @sneridagh diff --git a/packages/client/package.json b/packages/client/package.json index 2b632ce203..ecb547cf5f 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -84,11 +84,11 @@ "react-dom": "^18.2.0", "release-it": "17.1.1", "tsup": "^8.0.2", - "typescript": "5.4.2", + "typescript": "^5.4.5", "uuid": "^9.0.1", "vite": "^5.4.8", "vite-plugin-dts": "^3.7.3", - "vitest": "^2.1.2", + "vitest": "^2.1.3", "wait-on": "^7.2.0" }, "dependencies": { diff --git a/packages/components/news/6407.internal b/packages/components/news/6407.internal new file mode 100644 index 0000000000..f6daada94d --- /dev/null +++ b/packages/components/news/6407.internal @@ -0,0 +1 @@ +Update typescript and vitest everywhere @sneridagh diff --git a/packages/components/package.json b/packages/components/package.json index ea50b678e3..3e798c07b5 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -110,9 +110,9 @@ "parcel": "^2.12.0", "release-it": "17.1.1", "storybook": "^8.0.4", - "typescript": "^5.4.5", + "typescript": "^5.6.3", "vite": "^5.4.8", - "vitest": "^2.1.2", + "vitest": "^2.1.3", "vitest-axe": "^0.1.0" }, "dependencies": { diff --git a/packages/helpers/news/6407.internal b/packages/helpers/news/6407.internal new file mode 100644 index 0000000000..d6fed2b831 --- /dev/null +++ b/packages/helpers/news/6407.internal @@ -0,0 +1,2 @@ +Unpin parcel version @sneridagh +Update `typescript` and `vitest` everywhere @sneridagh diff --git a/packages/helpers/package.json b/packages/helpers/package.json index 55e5cd3ff6..db697e84dc 100644 --- a/packages/helpers/package.json +++ b/packages/helpers/package.json @@ -54,15 +54,15 @@ }, "dependencies": {}, "devDependencies": { - "@parcel/packager-ts": "2.12.0", - "@parcel/transformer-typescript-types": "2.12.0", + "@parcel/packager-ts": "^2.12.0", + "@parcel/transformer-typescript-types": "^2.12.0", "@plone/types": "workspace:*", "@types/react": "^18", "@types/react-dom": "^18", - "parcel": "2.12.0", + "parcel": "^2.12.0", "release-it": "^17.1.1", "tsconfig": "workspace:*", - "typescript": "5.4.2", - "vitest": "^1.3.1" + "typescript": "^5.4.5", + "vitest": "^2.1.3" } } diff --git a/packages/providers/news/6407.internal b/packages/providers/news/6407.internal new file mode 100644 index 0000000000..f6daada94d --- /dev/null +++ b/packages/providers/news/6407.internal @@ -0,0 +1 @@ +Update typescript and vitest everywhere @sneridagh diff --git a/packages/providers/package.json b/packages/providers/package.json index d2a84fc790..20b00201ca 100644 --- a/packages/providers/package.json +++ b/packages/providers/package.json @@ -77,7 +77,7 @@ "parcel": "^2.12.0", "release-it": "17.1.1", "tsconfig": "workspace:*", - "typescript": "5.2.2", - "vitest": "^1.3.1" + "typescript": "^5.4.5", + "vitest": "^2.1.3" } } diff --git a/packages/registry/news/6407.internal b/packages/registry/news/6407.internal new file mode 100644 index 0000000000..f6daada94d --- /dev/null +++ b/packages/registry/news/6407.internal @@ -0,0 +1 @@ +Update typescript and vitest everywhere @sneridagh diff --git a/packages/registry/package.json b/packages/registry/package.json index 1132e4ede8..09681d2d6c 100644 --- a/packages/registry/package.json +++ b/packages/registry/package.json @@ -84,7 +84,7 @@ "react-dom": "^18.2.0", "release-it": "16.2.1", "tsconfig": "workspace:*", - "typescript": "5.4.2", - "vitest": "^2.1.2" + "typescript": "^5.4.5", + "vitest": "^2.1.3" } } diff --git a/packages/slots/package.json b/packages/slots/package.json index 96c2d4b13b..2daece72e1 100644 --- a/packages/slots/package.json +++ b/packages/slots/package.json @@ -65,7 +65,7 @@ "parcel": "^2.12.0", "release-it": "17.1.1", "tsconfig": "workspace:*", - "typescript": "5.2.2", - "vitest": "^1.3.1" + "typescript": "^5.6.3", + "vitest": "^2.1.3" } } diff --git a/packages/types/news/6407.internal b/packages/types/news/6407.internal new file mode 100644 index 0000000000..f6daada94d --- /dev/null +++ b/packages/types/news/6407.internal @@ -0,0 +1 @@ +Update typescript and vitest everywhere @sneridagh diff --git a/packages/types/package.json b/packages/types/package.json index 943bc6ba83..45fb884921 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -56,6 +56,6 @@ "react-intl": "3.12.1", "release-it": "^17.1.1", "tsconfig": "workspace:*", - "typescript": "5.4.2" + "typescript": "^5.6.3" } } diff --git a/packages/volto/news/6407.internal b/packages/volto/news/6407.internal new file mode 100644 index 0000000000..f6daada94d --- /dev/null +++ b/packages/volto/news/6407.internal @@ -0,0 +1 @@ +Update typescript and vitest everywhere @sneridagh diff --git a/packages/volto/package.json b/packages/volto/package.json index 006349cddf..9837acf47e 100644 --- a/packages/volto/package.json +++ b/packages/volto/package.json @@ -381,7 +381,7 @@ "tmp": "0.2.1", "ts-jest": "^26.4.2", "ts-loader": "9.4.4", - "typescript": "^5.4.2", + "typescript": "^5.6.3", "use-trace-update": "1.3.2", "wait-on": "6.0.0", "webpack": "5.90.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 919d570841..c18828117c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,7 +17,7 @@ importers: version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/transformer-typescript-types': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.4.5) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.6.3) concurrently: specifier: ^8.2.2 version: 8.2.2 @@ -31,11 +31,11 @@ importers: specifier: workspace:* version: link:packages/tsconfig typescript: - specifier: ^5.4.5 - version: 5.4.5 + specifier: ^5.6.3 + version: 5.6.3 vitest: - specifier: ^1.5.0 - version: 1.5.0(@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) + 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) apps/nextjs: dependencies: @@ -87,10 +87,10 @@ importers: version: 8.57.0 eslint-config-next: specifier: 14.2.2 - version: 14.2.2(eslint@8.57.0)(typescript@5.4.5) + version: 14.2.2(eslint@8.57.0)(typescript@5.6.3) typescript: - specifier: ^5.4.5 - version: 5.4.5 + specifier: ^5.6.3 + version: 5.6.3 apps/plone: dependencies: @@ -448,16 +448,16 @@ importers: version: 3.0.3(webpack@5.90.1(esbuild@0.20.2)) '@storybook/builder-webpack5': specifier: ^6.5.15 - version: 6.5.16(esbuild@0.20.2)(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5)(vue-template-compiler@2.7.16) + version: 6.5.16(esbuild@0.20.2)(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(vue-template-compiler@2.7.16) '@storybook/manager-webpack5': specifier: ^6.5.15 - version: 6.5.16(encoding@0.1.13)(esbuild@0.20.2)(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5)(vue-template-compiler@2.7.16) + version: 6.5.16(encoding@0.1.13)(esbuild@0.20.2)(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(vue-template-compiler@2.7.16) '@storybook/react': specifier: ^8.0.4 - version: 8.0.8(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5) + 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-webpack5': specifier: ^8.0.4 - version: 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.4.5) + version: 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) '@storybook/theming': specifier: ^8.0.4 version: 8.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -466,7 +466,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.2(@types/node@20.12.7)(jsdom@16.7.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@26.6.3)(vitest@2.1.3(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.24.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) @@ -499,10 +499,10 @@ importers: version: 9.0.8 '@typescript-eslint/eslint-plugin': specifier: ^7.7.0 - version: 7.7.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + version: 7.7.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3) '@typescript-eslint/parser': specifier: ^7.7.0 - version: 7.7.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.7.0(eslint@8.57.0)(typescript@5.6.3) autoprefixer: specifier: 10.4.8 version: 10.4.8(postcss@8.4.31) @@ -556,19 +556,19 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-config-react-app: specifier: ^7.0.1 - version: 7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)(jest@26.6.3)(typescript@5.4.5) + version: 7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)(jest@26.6.3)(typescript@5.6.3) eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)) + version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)) eslint-import-resolver-babel-plugin-root-import: specifier: ^1.1.1 - version: 1.1.1(babel-plugin-root-import@6.1.0)(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)) + version: 1.1.1(babel-plugin-root-import@6.1.0)(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)) eslint-import-resolver-typescript: specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) + version: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: specifier: ^6.7.1 version: 6.7.1(eslint@8.57.0) @@ -655,16 +655,16 @@ importers: version: 3.2.5 razzle: specifier: 4.2.18 - version: 4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)) + version: 4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)) razzle-dev-utils: specifier: 4.2.18 - version: 4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)) + version: 4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)) razzle-plugin-scss: specifier: 4.2.18 - version: 4.2.18(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(postcss@8.4.31)(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(razzle@4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)) + version: 4.2.18(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(postcss@8.4.31)(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(razzle@4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)) react-docgen-typescript-plugin: specifier: ^1.0.5 - version: 1.0.6(typescript@5.4.5)(webpack@5.90.1(esbuild@0.20.2)) + version: 1.0.6(typescript@5.6.3)(webpack@5.90.1(esbuild@0.20.2)) react-error-overlay: specifier: 6.0.9 version: 6.0.9 @@ -673,7 +673,7 @@ importers: version: 18.2.0 release-it: specifier: ^17.1.1 - version: 17.1.1(typescript@5.4.5) + version: 17.1.1(typescript@5.6.3) semver: specifier: ^7.5.4 version: 7.6.0 @@ -688,13 +688,13 @@ importers: version: 3.3.1(webpack@5.90.1(esbuild@0.20.2)) stylelint: specifier: ^16.3.1 - version: 16.3.1(typescript@5.4.5) + version: 16.3.1(typescript@5.6.3) stylelint-config-idiomatic-order: specifier: 10.0.0 - version: 10.0.0(stylelint@16.3.1(typescript@5.4.5)) + version: 10.0.0(stylelint@16.3.1(typescript@5.6.3)) stylelint-prettier: specifier: 5.0.0 - version: 5.0.0(prettier@3.2.5)(stylelint@16.3.1(typescript@5.4.5)) + version: 5.0.0(prettier@3.2.5)(stylelint@16.3.1(typescript@5.6.3)) svg-loader: specifier: 0.0.2 version: 0.0.2 @@ -709,16 +709,16 @@ importers: version: 0.2.1 ts-jest: specifier: ^26.4.2 - version: 26.5.6(jest@26.6.3)(typescript@5.4.5) + version: 26.5.6(jest@26.6.3)(typescript@5.6.3) ts-loader: specifier: 9.4.4 - version: 9.4.4(typescript@5.4.5)(webpack@5.90.1(esbuild@0.20.2)) + version: 9.4.4(typescript@5.6.3)(webpack@5.90.1(esbuild@0.20.2)) tsconfig: specifier: '*' version: 7.0.0 typescript: - specifier: ^5.4.2 - version: 5.4.5 + specifier: ^5.6.3 + version: 5.6.3 use-trace-update: specifier: 1.3.2 version: 1.3.2 @@ -757,13 +757,13 @@ importers: version: 9.0.0(eslint@8.49.0) eslint-config-react-app: specifier: 7.0.1 - version: 7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4))(eslint@8.49.0)(typescript@5.4.5) + version: 7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4))(eslint@8.49.0)(typescript@5.6.3) eslint-plugin-flowtype: specifier: 8.0.3 version: 8.0.3(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4))(eslint@8.49.0) eslint-plugin-import: specifier: 2.28.1 - version: 2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.4.5))(eslint@8.49.0) + version: 2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0) eslint-plugin-jsx-a11y: specifier: ^6.7.1 version: 6.7.1(eslint@8.49.0) @@ -784,19 +784,19 @@ importers: version: 3.0.3 release-it: specifier: ^16.1.5 - version: 16.2.1(encoding@0.1.13)(typescript@5.4.5) + version: 16.2.1(encoding@0.1.13)(typescript@5.6.3) stylelint: specifier: 15.10.3 - version: 15.10.3(typescript@5.4.5) + version: 15.10.3(typescript@5.6.3) stylelint-config-idiomatic-order: specifier: 9.0.0 - version: 9.0.0(stylelint@15.10.3(typescript@5.4.5)) + version: 9.0.0(stylelint@15.10.3(typescript@5.6.3)) stylelint-config-sass-guidelines: specifier: 10.0.0 - version: 10.0.0(postcss@8.4.31)(stylelint@15.10.3(typescript@5.4.5)) + version: 10.0.0(postcss@8.4.31)(stylelint@15.10.3(typescript@5.6.3)) stylelint-prettier: specifier: 4.0.2 - version: 4.0.2(prettier@3.0.3)(stylelint@15.10.3(typescript@5.4.5)) + version: 4.0.2(prettier@3.0.3)(stylelint@15.10.3(typescript@5.6.3)) apps/remix: dependencies: @@ -811,13 +811,13 @@ importers: version: 2.8.1 '@remix-run/node': specifier: ^2.8.1 - version: 2.8.1(typescript@5.4.5) + version: 2.8.1(typescript@5.6.3) '@remix-run/react': specifier: ^2.8.1 - version: 2.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5) + version: 2.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) '@remix-run/serve': specifier: ^2.8.1 - version: 2.8.1(typescript@5.4.5) + version: 2.8.1(typescript@5.6.3) '@tanstack/react-query': specifier: ^5.37.1 version: 5.37.1(react@18.2.0) @@ -833,7 +833,7 @@ importers: devDependencies: '@remix-run/dev': specifier: ^2.8.1 - version: 2.8.1(@remix-run/serve@2.8.1(typescript@5.4.5))(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)(typescript@5.4.5)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 2.8.1(@remix-run/serve@2.8.1(typescript@5.6.3))(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@tanstack/react-query-devtools': specifier: ^5.37.1 version: 5.37.1(@tanstack/react-query@5.37.1(react@18.2.0))(react@18.2.0) @@ -844,14 +844,14 @@ importers: specifier: ^18.2.7 version: 18.2.25 typescript: - specifier: ^5.4.2 - version: 5.4.5 + specifier: ^5.6.3 + version: 5.6.3 vite: specifier: ^5.1.0 version: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) vite-tsconfig-paths: specifier: ^4.2.1 - version: 4.3.2(typescript@5.4.5)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 4.3.2(typescript@5.6.3)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) apps/vite: dependencies: @@ -933,7 +933,7 @@ importers: version: 1.29.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/react-router-server': specifier: ^1.28.2 - version: 1.29.2(@testing-library/jest-dom@6.4.2(vitest@1.5.0(@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)))(@types/node@20.12.7)(encoding@0.1.13)(less@3.11.1)(lightningcss@1.24.1)(preact@10.20.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.14.3)(sass@1.75.0)(terser@5.30.3) + version: 1.29.2(@testing-library/jest-dom@6.4.2(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)))(@types/node@20.12.7)(encoding@0.1.13)(less@3.11.1)(lightningcss@1.24.1)(preact@10.20.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.14.3)(sass@1.75.0)(terser@5.30.3) '@tanstack/router-devtools': specifier: ^1.28.2 version: 1.29.2(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -1002,8 +1002,8 @@ importers: specifier: ^1.15.0 version: 1.15.0 typescript: - specifier: ^5.4.2 - version: 5.4.5 + specifier: ^5.6.3 + version: 5.6.3 vite: specifier: ^5.2.9 version: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) @@ -1025,7 +1025,7 @@ importers: version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/transformer-typescript-types': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.4.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.6.3) '@plone/registry': specifier: workspace:* version: link:../registry @@ -1040,19 +1040,19 @@ importers: version: 18.2.25 parcel: specifier: ^2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) release-it: specifier: 17.1.1 - version: 17.1.1(typescript@5.4.2) + version: 17.1.1(typescript@5.6.3) tsconfig: specifier: workspace:* version: link:../tsconfig typescript: - specifier: 5.4.2 - version: 5.4.2 + specifier: ^5.6.3 + version: 5.6.3 vitest: - specifier: ^1.3.1 - version: 1.5.0(@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) + 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) packages/client: dependencies: @@ -1074,7 +1074,7 @@ importers: devDependencies: '@parcel/config-default': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) '@parcel/core': specifier: ^2.12.0 version: 2.12.0(@swc/helpers@0.5.10) @@ -1092,7 +1092,7 @@ importers: version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/transformer-typescript-types': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.4.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.6.3) '@plone/types': specifier: 'workspace: *' version: link:../types @@ -1119,7 +1119,7 @@ importers: 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)) '@vitest/coverage-v8': specifier: ^1.3.1 - version: 1.5.0(vitest@2.1.2(@types/node@20.12.7)(jsdom@21.1.2)(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@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) glob: specifier: 7.1.6 version: 7.1.6 @@ -1128,7 +1128,7 @@ importers: version: 21.1.2 parcel: specifier: ^2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) react: specifier: ^18.2.0 version: 18.2.0 @@ -1137,13 +1137,13 @@ importers: version: 18.2.0(react@18.2.0) release-it: specifier: 17.1.1 - version: 17.1.1(typescript@5.4.2) + version: 17.1.1(typescript@5.6.3) tsup: specifier: ^8.0.2 - version: 8.0.2(@microsoft/api-extractor@7.43.0(@types/node@20.12.7))(@swc/core@1.4.16(@swc/helpers@0.5.10))(postcss@8.4.47)(typescript@5.4.2) + version: 8.0.2(@microsoft/api-extractor@7.43.0(@types/node@20.12.7))(@swc/core@1.4.16(@swc/helpers@0.5.10))(postcss@8.4.47)(typescript@5.6.3) typescript: - specifier: 5.4.2 - version: 5.4.2 + specifier: ^5.4.5 + version: 5.6.3 uuid: specifier: ^9.0.1 version: 9.0.1 @@ -1152,10 +1152,10 @@ importers: 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) vite-plugin-dts: specifier: ^3.7.3 - version: 3.8.3(@types/node@20.12.7)(rollup@4.24.0)(typescript@5.4.2)(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: 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.24.1)(sass@1.75.0)(terser@5.30.3)) vitest: - specifier: ^2.1.2 - version: 2.1.2(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + specifier: ^2.1.3 + version: 2.1.3(@types/node@20.12.7)(jsdom@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) wait-on: specifier: ^7.2.0 version: 7.2.0(debug@4.3.4) @@ -1170,7 +1170,7 @@ importers: version: 3.11.11(react@18.2.0) '@storybook/test': specifier: ^8.0.4 - version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.2(@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)(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)) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -1186,7 +1186,7 @@ importers: devDependencies: '@parcel/config-default': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) '@parcel/core': specifier: ^2.12.0 version: 2.12.0(@swc/helpers@0.5.10) @@ -1201,7 +1201,7 @@ importers: version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/transformer-typescript-types': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.4.5) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.6.3) '@plone/types': specifier: 'workspace: *' version: link:../types @@ -1213,7 +1213,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)(vitest@2.1.2(@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)(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-links': specifier: ^8.0.4 version: 8.0.8(react@18.2.0) @@ -1228,16 +1228,16 @@ importers: version: 8.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/react': specifier: ^8.0.4 - version: 8.0.8(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5) + 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.24.4)(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.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)) + version: 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(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/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)(vitest@2.1.2(@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)(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/react': specifier: 14.2.1 version: 14.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -1255,13 +1255,13 @@ importers: 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)) '@vitest/coverage-v8': specifier: ^1.3.1 - version: 1.5.0(vitest@2.1.2(@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@20.12.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 eslint-plugin-storybook: specifier: ^0.8.0 - version: 0.8.0(eslint@8.57.0)(typescript@5.4.5) + version: 0.8.0(eslint@8.57.0)(typescript@5.6.3) jest-axe: specifier: ^8.0.0 version: 8.0.0 @@ -1276,25 +1276,25 @@ importers: version: 1.24.1 parcel: specifier: ^2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5) + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) release-it: specifier: 17.1.1 - version: 17.1.1(typescript@5.4.5) + version: 17.1.1(typescript@5.6.3) storybook: specifier: ^8.0.4 version: 8.0.8(@babel/preset-env@7.24.4(@babel/core@7.24.4))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) typescript: - specifier: ^5.4.5 - version: 5.4.5 + 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) vitest: - specifier: ^2.1.2 - version: 2.1.2(@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) + 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) vitest-axe: specifier: ^0.1.0 - version: 0.1.0(vitest@2.1.2(@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@20.12.7)(jsdom@22.1.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) packages/coresandbox: dependencies: @@ -1386,7 +1386,7 @@ importers: version: 26.6.3 release-it: specifier: ^16.1.3 - version: 16.2.1(encoding@0.1.13)(typescript@5.4.5) + version: 16.2.1(encoding@0.1.13)(typescript@5.6.3) yeoman-assert: specifier: ^3.1.0 version: 3.1.1 @@ -1404,11 +1404,11 @@ importers: version: 18.2.0(react@18.2.0) devDependencies: '@parcel/packager-ts': - specifier: 2.12.0 + specifier: ^2.12.0 version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/transformer-typescript-types': - specifier: 2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.4.2) + specifier: ^2.12.0 + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.6.3) '@plone/types': specifier: workspace:* version: link:../types @@ -1419,20 +1419,20 @@ importers: specifier: ^18 version: 18.2.25 parcel: - specifier: 2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) + specifier: ^2.12.0 + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) release-it: specifier: ^17.1.1 - version: 17.1.1(typescript@5.4.2) + version: 17.1.1(typescript@5.6.3) tsconfig: specifier: workspace:* version: link:../tsconfig typescript: - specifier: 5.4.2 - version: 5.4.2 + specifier: ^5.4.5 + version: 5.6.3 vitest: - specifier: ^1.3.1 - version: 1.5.0(@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) + 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) packages/providers: dependencies: @@ -1454,7 +1454,7 @@ importers: devDependencies: '@parcel/config-default': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) '@parcel/core': specifier: ^2.12.0 version: 2.12.0(@swc/helpers@0.5.10) @@ -1469,7 +1469,7 @@ importers: version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/transformer-typescript-types': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.2.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.6.3) '@plone/types': specifier: workspace:* version: link:../types @@ -1481,19 +1481,19 @@ importers: version: 18.2.25 parcel: specifier: ^2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) release-it: specifier: 17.1.1 - version: 17.1.1(typescript@5.2.2) + version: 17.1.1(typescript@5.6.3) tsconfig: specifier: workspace:* version: link:../tsconfig typescript: - specifier: 5.2.2 - version: 5.2.2 + specifier: ^5.4.5 + version: 5.6.3 vitest: - specifier: ^1.3.1 - version: 1.5.0(@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) + 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) packages/registry: dependencies: @@ -1515,7 +1515,7 @@ importers: version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/transformer-typescript-types': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.4.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.6.3) '@plone/types': specifier: workspace:* version: link:../types @@ -1527,7 +1527,7 @@ importers: version: 18.2.25 parcel: specifier: ^2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) react: specifier: ^18.2.0 version: 18.2.0 @@ -1536,16 +1536,16 @@ importers: version: 18.2.0(react@18.2.0) release-it: specifier: 16.2.1 - version: 16.2.1(encoding@0.1.13)(typescript@5.4.2) + version: 16.2.1(encoding@0.1.13)(typescript@5.6.3) tsconfig: specifier: workspace:* version: link:../tsconfig typescript: - specifier: 5.4.2 - version: 5.4.2 + specifier: ^5.4.5 + version: 5.6.3 vitest: - specifier: ^2.1.2 - version: 2.1.2(@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) + 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) packages/scripts: dependencies: @@ -1597,7 +1597,7 @@ importers: devDependencies: release-it: specifier: ^16.1.3 - version: 16.2.1(encoding@0.1.13)(typescript@5.4.5) + version: 16.2.1(encoding@0.1.13)(typescript@5.6.3) packages/slots: dependencies: @@ -1619,7 +1619,7 @@ importers: version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/transformer-typescript-types': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.2.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.6.3) '@plone/types': specifier: workspace:* version: link:../types @@ -1631,19 +1631,19 @@ importers: version: 18.2.25 parcel: specifier: ^2.12.0 - version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) + version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) release-it: specifier: 17.1.1 - version: 17.1.1(typescript@5.2.2) + version: 17.1.1(typescript@5.6.3) tsconfig: specifier: workspace:* version: link:../tsconfig typescript: - specifier: 5.2.2 - version: 5.2.2 + specifier: ^5.6.3 + version: 5.6.3 vitest: - specifier: ^1.3.1 - version: 1.5.0(@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) + 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) packages/tsconfig: {} @@ -1669,13 +1669,13 @@ importers: version: 3.12.1(react@18.2.0) release-it: specifier: ^17.1.1 - version: 17.1.1(typescript@5.4.2) + version: 17.1.1(typescript@5.6.3) tsconfig: specifier: workspace:* version: link:../tsconfig typescript: - specifier: 5.4.2 - version: 5.4.2 + specifier: ^5.6.3 + version: 5.6.3 packages/volto: dependencies: @@ -2036,10 +2036,10 @@ importers: version: 3.0.3(webpack@5.90.1(esbuild@0.20.2)) '@storybook/react': specifier: ^8.0.4 - version: 8.0.8(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5) + 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-webpack5': specifier: ^8.0.4 - version: 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.4.5) + version: 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) '@storybook/theming': specifier: ^8.0.4 version: 8.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -2048,7 +2048,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.2(@types/node@20.12.7)(jsdom@16.7.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@26.6.3)(vitest@2.1.3(@types/node@20.12.7)(jsdom@16.7.0)(less@3.11.1)(lightningcss@1.24.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) @@ -2084,10 +2084,10 @@ importers: version: 9.0.8 '@typescript-eslint/eslint-plugin': specifier: ^7.7.0 - version: 7.7.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + version: 7.7.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3) '@typescript-eslint/parser': specifier: ^7.7.0 - version: 7.7.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.7.0(eslint@8.57.0)(typescript@5.6.3) autoprefixer: specifier: 10.4.8 version: 10.4.8(postcss@8.4.31) @@ -2141,19 +2141,19 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-config-react-app: specifier: ^7.0.1 - version: 7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)(jest@26.6.3)(typescript@5.4.5) + version: 7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)(jest@26.6.3)(typescript@5.6.3) eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)) + version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)) eslint-import-resolver-babel-plugin-root-import: specifier: ^1.1.1 - version: 1.1.1(babel-plugin-root-import@6.1.0)(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)) + version: 1.1.1(babel-plugin-root-import@6.1.0)(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)) eslint-import-resolver-typescript: specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) + version: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: specifier: ^6.7.1 version: 6.7.1(eslint@8.57.0) @@ -2231,16 +2231,16 @@ importers: version: 3.2.5 razzle: specifier: 4.2.18 - version: 4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)) + version: 4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)) razzle-dev-utils: specifier: 4.2.18 - version: 4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)) + version: 4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)) razzle-plugin-scss: specifier: 4.2.18 - version: 4.2.18(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(postcss@8.4.31)(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(razzle@4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)) + version: 4.2.18(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(postcss@8.4.31)(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(razzle@4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)) react-docgen-typescript-plugin: specifier: ^1.0.5 - version: 1.0.6(typescript@5.4.5)(webpack@5.90.1(esbuild@0.20.2)) + version: 1.0.6(typescript@5.6.3)(webpack@5.90.1(esbuild@0.20.2)) react-error-overlay: specifier: 6.0.9 version: 6.0.9 @@ -2249,7 +2249,7 @@ importers: version: 18.2.0 release-it: specifier: ^17.1.1 - version: 17.1.1(typescript@5.4.5) + version: 17.1.1(typescript@5.6.3) semver: specifier: ^7.5.4 version: 7.6.0 @@ -2264,13 +2264,13 @@ importers: version: 3.3.1(webpack@5.90.1(esbuild@0.20.2)) stylelint: specifier: ^16.3.1 - version: 16.3.1(typescript@5.4.5) + version: 16.3.1(typescript@5.6.3) stylelint-config-idiomatic-order: specifier: 10.0.0 - version: 10.0.0(stylelint@16.3.1(typescript@5.4.5)) + version: 10.0.0(stylelint@16.3.1(typescript@5.6.3)) stylelint-prettier: specifier: 5.0.0 - version: 5.0.0(prettier@3.2.5)(stylelint@16.3.1(typescript@5.4.5)) + version: 5.0.0(prettier@3.2.5)(stylelint@16.3.1(typescript@5.6.3)) svg-loader: specifier: 0.0.2 version: 0.0.2 @@ -2285,13 +2285,13 @@ importers: version: 0.2.1 ts-jest: specifier: ^26.4.2 - version: 26.5.6(jest@26.6.3)(typescript@5.4.5) + version: 26.5.6(jest@26.6.3)(typescript@5.6.3) ts-loader: specifier: 9.4.4 - version: 9.4.4(typescript@5.4.5)(webpack@5.90.1(esbuild@0.20.2)) + version: 9.4.4(typescript@5.6.3)(webpack@5.90.1(esbuild@0.20.2)) typescript: - specifier: ^5.4.2 - version: 5.4.5 + specifier: ^5.6.3 + version: 5.6.3 use-trace-update: specifier: 1.3.2 version: 1.3.2 @@ -2391,7 +2391,7 @@ importers: version: 6.24.1 release-it: specifier: ^17.0.0 - version: 17.1.1(typescript@5.4.5) + version: 17.1.1(typescript@5.6.3) packages/volto-testing: dependencies: @@ -2400,7 +2400,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)(vitest@2.1.2(@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)(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/react': specifier: 12.1.5 version: 12.1.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -2419,7 +2419,7 @@ importers: devDependencies: release-it: specifier: ^17.1.1 - version: 17.1.1(typescript@5.4.5) + version: 17.1.1(typescript@5.6.3) packages: @@ -7399,16 +7399,13 @@ packages: '@vitest/expect@1.3.1': resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} - '@vitest/expect@1.5.0': - resolution: {integrity: sha512-0pzuCI6KYi2SIC3LQezmxujU9RK/vwC1U9R0rLuGlNGcOuDWxqWKu6nUdFsX9tH1WU0SXtAxToOsEjeUn1s3hA==} + '@vitest/expect@2.1.3': + resolution: {integrity: sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==} - '@vitest/expect@2.1.2': - resolution: {integrity: sha512-FEgtlN8mIUSEAAnlvn7mP8vzaWhEaAEvhSXCqrsijM7K6QqjB11qoRZYEd4AKSCDz8p0/+yH5LzhZ47qt+EyPg==} - - '@vitest/mocker@2.1.2': - resolution: {integrity: sha512-ExElkCGMS13JAJy+812fw1aCv2QO/LBK6CyO4WOPAzLTmve50gydOlWhgdBJPx2ztbADUq3JVI0C5U+bShaeEA==} + '@vitest/mocker@2.1.3': + resolution: {integrity: sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==} peerDependencies: - '@vitest/spy': 2.1.2 + '@vitest/spy': 2.1.3 msw: ^2.3.5 vite: ^5.0.0 peerDependenciesMeta: @@ -7417,20 +7414,14 @@ packages: vite: optional: true - '@vitest/pretty-format@2.1.2': - resolution: {integrity: sha512-FIoglbHrSUlOJPDGIrh2bjX1sNars5HbxlcsFKCtKzu4+5lpsRhOCVcuzp0fEhAGHkPZRIXVNzPcpSlkoZ3LuA==} - - '@vitest/runner@1.5.0': - resolution: {integrity: sha512-7HWwdxXP5yDoe7DTpbif9l6ZmDwCzcSIK38kTSIt6CFEpMjX4EpCgT6wUmS0xTXqMI6E/ONmfgRKmaujpabjZQ==} + '@vitest/pretty-format@2.1.3': + resolution: {integrity: sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==} - '@vitest/runner@2.1.2': - resolution: {integrity: sha512-UCsPtvluHO3u7jdoONGjOSil+uON5SSvU9buQh3lP7GgUXHp78guN1wRmZDX4wGK6J10f9NUtP6pO+SFquoMlw==} + '@vitest/runner@2.1.3': + resolution: {integrity: sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==} - '@vitest/snapshot@1.5.0': - resolution: {integrity: sha512-qpv3fSEuNrhAO3FpH6YYRdaECnnRjg9VxbhdtPwPRnzSfHVXnNzzrpX4cJxqiwgRMo7uRMWDFBlsBq4Cr+rO3A==} - - '@vitest/snapshot@2.1.2': - resolution: {integrity: sha512-xtAeNsZ++aRIYIUsek7VHzry/9AcxeULlegBvsdLncLmNCR6tR8SRjn8BbDP4naxtccvzTqZ+L1ltZlRCfBZFA==} + '@vitest/snapshot@2.1.3': + resolution: {integrity: sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==} '@vitest/spy@1.3.1': resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} @@ -7438,8 +7429,8 @@ packages: '@vitest/spy@1.5.0': resolution: {integrity: sha512-vu6vi6ew5N5MMHJjD5PoakMRKYdmIrNJmyfkhRpQt5d9Ewhw9nZ5Aqynbi3N61bvk9UvZ5UysMT6ayIrZ8GA9w==} - '@vitest/spy@2.1.2': - resolution: {integrity: sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A==} + '@vitest/spy@2.1.3': + resolution: {integrity: sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==} '@vitest/utils@1.3.1': resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} @@ -7447,8 +7438,8 @@ packages: '@vitest/utils@1.5.0': resolution: {integrity: sha512-BDU0GNL8MWkRkSRdNFvCUCAVOeHaUlVJ9Tx0TYBZyXaaOTmGtUFObzchCivIBrIwKzvZA7A9sCejVhXM2aY98A==} - '@vitest/utils@2.1.2': - resolution: {integrity: sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==} + '@vitest/utils@2.1.3': + resolution: {integrity: sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==} '@volar/language-core@1.11.1': resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} @@ -14193,10 +14184,6 @@ packages: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} - engines: {node: '>=18'} - p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} @@ -17023,19 +17010,12 @@ packages: tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - tinybench@2.7.0: - resolution: {integrity: sha512-Qgayeb106x2o4hNzNjsZEfFziw8IbKqtbXBjVh7VIZfBxfD5M4gWtpyx5+YTae2gJ6Y6Dz/KLepiv16RFeQWNA==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} tinyexec@0.3.0: resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} - tinypool@0.8.4: - resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} - engines: {node: '>=14.0.0'} - tinypool@1.0.1: resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -17337,18 +17317,13 @@ packages: engines: {node: '>=12.20'} hasBin: true - typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.4.2: resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} engines: {node: '>=14.17'} hasBin: true - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true @@ -17774,8 +17749,8 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite-node@2.1.2: - resolution: {integrity: sha512-HPcGNN5g/7I2OtPjLqgOtCRu/qhVvBxTUD3qzitmL0SrG1cWFzxzhMDWussxSbrRYWqnKf8P2jiNhPMSN+ymsQ==} + vite-node@2.1.3: + resolution: {integrity: sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -17923,40 +17898,15 @@ packages: peerDependencies: vitest: '>=0.16.0' - vitest@1.5.0: - resolution: {integrity: sha512-d8UKgR0m2kjdxDWX6911uwxout6GHS0XaGH1cksSIVVG8kRlE7G7aBw7myKQCvDI5dT4j7ZMa+l706BIORMDLw==} + vitest@2.1.3: + resolution: {integrity: sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.5.0 - '@vitest/ui': 1.5.0 - 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 - - vitest@2.1.2: - resolution: {integrity: sha512-veNjLizOMkRrJ6xxb+pvxN6/QAWg95mzcRjtmkepXdN87FNfxAss9RKe2far/G9cQpipfgP2taqg0KiWsquj8A==} - 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.2 - '@vitest/ui': 2.1.2 + '@vitest/browser': 2.1.3 + '@vitest/ui': 2.1.3 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -18240,11 +18190,6 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true - why-is-node-running@2.2.2: - resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} - engines: {node: '>=8'} - hasBin: true - why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} @@ -20327,15 +20272,15 @@ snapshots: '@types/yargs': 17.0.32 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.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))': + '@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))': 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.4.5) + 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) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -21020,104 +20965,14 @@ snapshots: - '@parcel/core' - '@swc/helpers' - '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2)': - dependencies: - '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/core': 2.12.0(@swc/helpers@0.5.10) - '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) - '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/optimizer-swc': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/packager-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/packager-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/packager-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/packager-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/packager-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/packager-wasm': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/resolver-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/runtime-browser-hmr': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/runtime-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/runtime-react-refresh': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/runtime-service-worker': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-babel': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10)) - '@parcel/transformer-json': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-postcss': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-posthtml': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-react-refresh-wrap': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - transitivePeerDependencies: - - '@swc/helpers' - - cssnano - - postcss - - purgecss - - relateurl - - srcset - - terser - - typescript - - uncss - - '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2)': - dependencies: - '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/core': 2.12.0(@swc/helpers@0.5.10) - '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) - '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/optimizer-swc': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/packager-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/packager-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/packager-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/packager-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/packager-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/packager-wasm': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/resolver-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/runtime-browser-hmr': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/runtime-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/runtime-react-refresh': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/runtime-service-worker': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-babel': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10)) - '@parcel/transformer-json': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-postcss': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-posthtml': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-react-refresh-wrap': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/transformer-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - transitivePeerDependencies: - - '@swc/helpers' - - cssnano - - postcss - - purgecss - - relateurl - - srcset - - terser - - typescript - - uncss - - '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5)': + '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3)': dependencies: '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/core': 2.12.0(@swc/helpers@0.5.10) '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5) + '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/optimizer-swc': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) @@ -21250,48 +21105,10 @@ snapshots: - '@parcel/core' - '@swc/helpers' - '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2)': + '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3)': dependencies: '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - htmlnano: 2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.2.2) - nullthrows: 1.1.1 - posthtml: 0.16.6 - svgo: 2.8.0 - transitivePeerDependencies: - - '@parcel/core' - - '@swc/helpers' - - cssnano - - postcss - - purgecss - - relateurl - - srcset - - terser - - typescript - - uncss - - '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2)': - dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - htmlnano: 2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.4.2) - nullthrows: 1.1.1 - posthtml: 0.16.6 - svgo: 2.8.0 - transitivePeerDependencies: - - '@parcel/core' - - '@swc/helpers' - - cssnano - - postcss - - purgecss - - relateurl - - srcset - - terser - - typescript - - uncss - - '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5)': - dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - htmlnano: 2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.4.5) + htmlnano: 2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.6.3) nullthrows: 1.1.1 posthtml: 0.16.6 svgo: 2.8.0 @@ -21660,59 +21477,23 @@ snapshots: - '@parcel/core' - '@swc/helpers' - '@parcel/transformer-typescript-types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.2.2)': + '@parcel/transformer-typescript-types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.6.3)': dependencies: '@parcel/diagnostic': 2.12.0 '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) '@parcel/source-map': 2.1.1 - '@parcel/ts-utils': 2.12.0(typescript@5.2.2) + '@parcel/ts-utils': 2.12.0(typescript@5.6.3) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 - typescript: 5.2.2 + typescript: 5.6.3 transitivePeerDependencies: - '@parcel/core' - '@swc/helpers' - '@parcel/transformer-typescript-types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.4.2)': + '@parcel/ts-utils@2.12.0(typescript@5.6.3)': dependencies: - '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/source-map': 2.1.1 - '@parcel/ts-utils': 2.12.0(typescript@5.4.2) - '@parcel/utils': 2.12.0 nullthrows: 1.1.1 - typescript: 5.4.2 - transitivePeerDependencies: - - '@parcel/core' - - '@swc/helpers' - - '@parcel/transformer-typescript-types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(typescript@5.4.5)': - dependencies: - '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/source-map': 2.1.1 - '@parcel/ts-utils': 2.12.0(typescript@5.4.5) - '@parcel/utils': 2.12.0 - nullthrows: 1.1.1 - typescript: 5.4.5 - transitivePeerDependencies: - - '@parcel/core' - - '@swc/helpers' - - '@parcel/ts-utils@2.12.0(typescript@5.2.2)': - dependencies: - nullthrows: 1.1.1 - typescript: 5.2.2 - - '@parcel/ts-utils@2.12.0(typescript@5.4.2)': - dependencies: - nullthrows: 1.1.1 - typescript: 5.4.2 - - '@parcel/ts-utils@2.12.0(typescript@5.4.5)': - dependencies: - nullthrows: 1.1.1 - typescript: 5.4.5 + typescript: 5.6.3 '@parcel/types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)': dependencies: @@ -22951,7 +22732,7 @@ snapshots: '@remix-run/css-bundle@2.8.1': {} - '@remix-run/dev@2.8.1(@remix-run/serve@2.8.1(typescript@5.4.5))(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)(typescript@5.4.5)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@remix-run/dev@2.8.1(@remix-run/serve@2.8.1(typescript@5.6.3))(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@babel/core': 7.24.4 '@babel/generator': 7.24.4 @@ -22963,9 +22744,9 @@ snapshots: '@babel/types': 7.24.0 '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 - '@remix-run/node': 2.8.1(typescript@5.4.5) + '@remix-run/node': 2.8.1(typescript@5.6.3) '@remix-run/router': 1.15.3-pre.0 - '@remix-run/server-runtime': 2.8.1(typescript@5.4.5) + '@remix-run/server-runtime': 2.8.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.24.1)(sass@1.75.0)(terser@5.30.3) arg: 5.0.2 @@ -23007,8 +22788,8 @@ snapshots: tsconfig-paths: 4.2.0 ws: 7.5.9 optionalDependencies: - '@remix-run/serve': 2.8.1(typescript@5.4.5) - typescript: 5.4.5 + '@remix-run/serve': 2.8.1(typescript@5.6.3) + typescript: 5.6.3 vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - '@types/node' @@ -23025,16 +22806,16 @@ snapshots: - ts-node - utf-8-validate - '@remix-run/express@2.8.1(express@4.19.2)(typescript@5.4.5)': + '@remix-run/express@2.8.1(express@4.19.2)(typescript@5.6.3)': dependencies: - '@remix-run/node': 2.8.1(typescript@5.4.5) + '@remix-run/node': 2.8.1(typescript@5.6.3) express: 4.19.2 optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 - '@remix-run/node@2.8.1(typescript@5.4.5)': + '@remix-run/node@2.8.1(typescript@5.6.3)': dependencies: - '@remix-run/server-runtime': 2.8.1(typescript@5.4.5) + '@remix-run/server-runtime': 2.8.1(typescript@5.6.3) '@remix-run/web-fetch': 4.4.2 '@remix-run/web-file': 3.1.0 '@remix-run/web-stream': 1.1.0 @@ -23043,27 +22824,27 @@ snapshots: source-map-support: 0.5.21 stream-slice: 0.1.2 optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 - '@remix-run/react@2.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5)': + '@remix-run/react@2.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': dependencies: '@remix-run/router': 1.15.3 - '@remix-run/server-runtime': 2.8.1(typescript@5.4.5) + '@remix-run/server-runtime': 2.8.1(typescript@5.6.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-router: 6.22.3(react@18.2.0) react-router-dom: 6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 '@remix-run/router@1.15.3': {} '@remix-run/router@1.15.3-pre.0': {} - '@remix-run/serve@2.8.1(typescript@5.4.5)': + '@remix-run/serve@2.8.1(typescript@5.6.3)': dependencies: - '@remix-run/express': 2.8.1(express@4.19.2)(typescript@5.4.5) - '@remix-run/node': 2.8.1(typescript@5.4.5) + '@remix-run/express': 2.8.1(express@4.19.2)(typescript@5.6.3) + '@remix-run/node': 2.8.1(typescript@5.6.3) chokidar: 3.6.0 compression: 1.7.4 express: 4.19.2 @@ -23074,7 +22855,7 @@ snapshots: - supports-color - typescript - '@remix-run/server-runtime@2.8.1(typescript@5.4.5)': + '@remix-run/server-runtime@2.8.1(typescript@5.6.3)': dependencies: '@remix-run/router': 1.15.3 '@types/cookie': 0.6.0 @@ -23083,7 +22864,7 @@ snapshots: set-cookie-parser: 2.6.0 source-map: 0.7.4 optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 '@remix-run/web-blob@3.1.0': dependencies: @@ -23500,11 +23281,11 @@ snapshots: dependencies: '@storybook/global': 5.0.0 - '@storybook/addon-interactions@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.2(@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)(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))': 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)(vitest@2.1.2(@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)(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/types': 8.0.8 polished: 4.3.1 ts-dedent: 2.2.0 @@ -23647,7 +23428,7 @@ snapshots: - encoding - supports-color - '@storybook/builder-vite@8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(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.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))': + '@storybook/builder-vite@8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(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))': dependencies: '@storybook/channels': 8.0.8 '@storybook/client-logger': 8.0.8 @@ -23669,12 +23450,12 @@ snapshots: 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) optionalDependencies: '@preact/preset-vite': 2.8.2(@babel/core@7.24.4)(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)) - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - encoding - supports-color - '@storybook/builder-webpack5@6.5.16(esbuild@0.20.2)(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)': + '@storybook/builder-webpack5@6.5.16(esbuild@0.20.2)(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)': dependencies: '@babel/core': 7.24.4 '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -23684,7 +23465,7 @@ snapshots: '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5)(vue-template-compiler@2.7.16) + '@storybook/core-common': 6.5.16(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(vue-template-compiler@2.7.16) '@storybook/core-events': 6.5.16 '@storybook/node-logger': 6.5.16 '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -23699,7 +23480,7 @@ snapshots: case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.37.0 css-loader: 5.2.7(webpack@5.90.1(esbuild@0.20.2)) - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)) glob: 7.1.6 glob-promise: 3.4.0(glob@7.1.6) html-webpack-plugin: 5.5.0(webpack@5.90.1(esbuild@0.20.2)) @@ -23717,7 +23498,7 @@ snapshots: webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.4.6 optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - '@swc/core' - esbuild @@ -23728,7 +23509,7 @@ snapshots: - webpack-cli - webpack-command - '@storybook/builder-webpack5@8.0.8(encoding@0.1.13)(esbuild@0.20.2)(typescript@5.4.5)': + '@storybook/builder-webpack5@8.0.8(encoding@0.1.13)(esbuild@0.20.2)(typescript@5.6.3)': dependencies: '@storybook/channels': 8.0.8 '@storybook/client-logger': 8.0.8 @@ -23747,7 +23528,7 @@ snapshots: css-loader: 6.11.0(webpack@5.90.1(esbuild@0.20.2)) es-module-lexer: 1.5.0 express: 4.19.2 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.4.5)(webpack@5.90.1(esbuild@0.20.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 html-webpack-plugin: 5.5.0(webpack@5.90.1(esbuild@0.20.2)) magic-string: 0.30.10 @@ -23765,7 +23546,7 @@ snapshots: webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.5.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -23937,7 +23718,7 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@storybook/core-client@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5)(webpack@5.90.1(esbuild@0.20.2))': + '@storybook/core-client@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(webpack@5.90.1(esbuild@0.20.2))': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/channel-postmessage': 6.5.16 @@ -23963,9 +23744,9 @@ snapshots: util-deprecate: 1.0.2 webpack: 5.90.1(esbuild@0.20.2) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 - '@storybook/core-common@6.5.16(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)': + '@storybook/core-common@6.5.16(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)': dependencies: '@babel/core': 7.24.4 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.4) @@ -24001,7 +23782,7 @@ snapshots: express: 4.19.2 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack@4.47.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack@4.47.0) fs-extra: 9.1.0 glob: 7.1.6 handlebars: 4.7.8 @@ -24020,7 +23801,7 @@ snapshots: util-deprecate: 1.0.2 webpack: 4.47.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - eslint - supports-color @@ -24220,14 +24001,14 @@ snapshots: - react - react-dom - '@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(esbuild@0.20.2)(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)': + '@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(esbuild@0.20.2)(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)': dependencies: '@babel/core': 7.24.4 '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.4) '@babel/preset-react': 7.24.1(@babel/core@7.24.4) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5)(webpack@5.90.1(esbuild@0.20.2)) - '@storybook/core-common': 6.5.16(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5)(vue-template-compiler@2.7.16) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(webpack@5.90.1(esbuild@0.20.2)) + '@storybook/core-common': 6.5.16(eslint@8.57.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(vue-template-compiler@2.7.16) '@storybook/node-logger': 6.5.16 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -24257,7 +24038,7 @@ snapshots: webpack-dev-middleware: 4.3.0(webpack@5.90.1(esbuild@0.20.2)) webpack-virtual-modules: 0.4.6 optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - '@swc/core' - encoding @@ -24281,13 +24062,13 @@ snapshots: '@storybook/node-logger@8.0.8': {} - '@storybook/preset-react-webpack@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.4.5)': + '@storybook/preset-react-webpack@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/core-webpack': 8.0.8(encoding@0.1.13) '@storybook/docs-tools': 8.0.8(encoding@0.1.13) '@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.4.5) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.4.5)(webpack@5.90.1(esbuild@0.20.2)) + '@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) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.3)(webpack@5.90.1(esbuild@0.20.2)) '@types/node': 18.19.31 '@types/semver': 7.5.8 find-up: 5.0.0 @@ -24301,7 +24082,7 @@ snapshots: tsconfig-paths: 4.2.0 webpack: 5.90.1(esbuild@0.20.2) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - '@swc/core' - encoding @@ -24350,16 +24131,16 @@ snapshots: '@storybook/preview@8.0.8': {} - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.4.5)(webpack@5.90.1(esbuild@0.20.2))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.3)(webpack@5.90.1(esbuild@0.20.2))': dependencies: debug: 4.3.4(supports-color@8.1.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.5 - react-docgen-typescript: 2.2.2(typescript@5.4.5) + react-docgen-typescript: 2.2.2(typescript@5.6.3) tslib: 2.6.2 - typescript: 5.4.5 + typescript: 5.6.3 webpack: 5.90.1(esbuild@0.20.2) transitivePeerDependencies: - supports-color @@ -24369,13 +24150,13 @@ 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.24.4)(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.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))': + '@storybook/react-vite@8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(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))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.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)) + '@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)) '@rollup/pluginutils': 5.1.0(rollup@4.24.0) - '@storybook/builder-vite': 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(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.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)) + '@storybook/builder-vite': 8.0.8(@preact/preset-vite@2.8.2(@babel/core@7.24.4)(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/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.4.5) + '@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 @@ -24392,16 +24173,16 @@ snapshots: - 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.4.5)': + '@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.4.5) - '@storybook/preset-react-webpack': 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.4.5) - '@storybook/react': 8.0.8(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5) + '@storybook/builder-webpack5': 8.0.8(encoding@0.1.13)(esbuild@0.20.2)(typescript@5.6.3) + '@storybook/preset-react-webpack': 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) + '@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) '@types/node': 18.19.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -24411,7 +24192,7 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@8.0.8(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5)': + '@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)': dependencies: '@storybook/client-logger': 8.0.8 '@storybook/docs-tools': 8.0.8(encoding@0.1.13) @@ -24437,7 +24218,7 @@ snapshots: type-fest: 2.19.0 util-deprecate: 1.0.2 optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - encoding - supports-color @@ -24497,14 +24278,14 @@ snapshots: - encoding - supports-color - '@storybook/test@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(vitest@2.1.2(@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)(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))': 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)(vitest@2.1.2(@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)(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/user-event': 14.5.2(@testing-library/dom@9.3.4) '@vitest/expect': 1.3.1 '@vitest/spy': 1.5.0 @@ -24653,7 +24434,7 @@ snapshots: '@tanstack/query-core': 5.36.1 react: 18.2.0 - '@tanstack/react-router-server@1.29.2(@testing-library/jest-dom@6.4.2(vitest@1.5.0(@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)))(@types/node@20.12.7)(encoding@0.1.13)(less@3.11.1)(lightningcss@1.24.1)(preact@10.20.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.14.3)(sass@1.75.0)(terser@5.30.3)': + '@tanstack/react-router-server@1.29.2(@testing-library/jest-dom@6.4.2(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)))(@types/node@20.12.7)(encoding@0.1.13)(less@3.11.1)(lightningcss@1.24.1)(preact@10.20.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.14.3)(sass@1.75.0)(terser@5.30.3)': dependencies: '@tanstack/react-cross-context': 1.26.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/react-router': 1.29.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -24662,7 +24443,7 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tiny-invariant: 1.3.3 - vinxi: 0.2.1(@testing-library/jest-dom@6.4.2(vitest@1.5.0(@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)))(@types/node@20.12.7)(encoding@0.1.13)(less@3.11.1)(lightningcss@1.24.1)(preact@10.20.2)(rollup@4.14.3)(sass@1.75.0)(terser@5.30.3) + vinxi: 0.2.1(@testing-library/jest-dom@6.4.2(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)))(@types/node@20.12.7)(encoding@0.1.13)(less@3.11.1)(lightningcss@1.24.1)(preact@10.20.2)(rollup@4.14.3)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -24802,7 +24583,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.2(@types/node@20.12.7)(jsdom@16.7.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@26.6.3)(vitest@2.1.3(@types/node@20.12.7)(jsdom@16.7.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 @@ -24816,9 +24597,9 @@ snapshots: '@jest/globals': 29.7.0 '@types/jest': 29.5.12 jest: 26.6.3 - vitest: 2.1.2(@types/node@20.12.7)(jsdom@16.7.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@16.7.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)(vitest@2.1.2(@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)(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))': dependencies: '@adobe/css-tools': 4.3.3 '@babel/runtime': 7.20.6 @@ -24831,21 +24612,7 @@ snapshots: optionalDependencies: '@jest/globals': 29.7.0 '@types/jest': 29.5.12 - vitest: 2.1.2(@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(vitest@1.5.0(@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))': - 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: - vitest: 1.5.0(@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) - optional: true + 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/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: @@ -25327,51 +25094,51 @@ snapshots: '@types/node': 20.12.7 optional: true - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.4.5))(eslint@8.49.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.49.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.49.0)(typescript@5.6.3) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.49.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.49.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.49.0)(typescript@5.6.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.49.0)(typescript@5.6.3) debug: 4.3.4(supports-color@8.1.1) eslint: 8.49.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare-lite: 1.4.0 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.5) + tsutils: 3.21.0(typescript@5.6.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.6.3) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.6.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.6.3) debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare-lite: 1.4.0 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.5) + tsutils: 3.21.0(typescript@5.6.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.6.3) '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/type-utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 7.7.0(eslint@8.57.0)(typescript@5.6.3) + '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.6.3) '@typescript-eslint/visitor-keys': 7.7.0 debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 @@ -25379,75 +25146,75 @@ snapshots: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/experimental-utils@5.62.0(eslint@8.49.0)(typescript@5.4.5)': + '@typescript-eslint/experimental-utils@5.62.0(eslint@8.49.0)(typescript@5.6.3)': dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.49.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.49.0)(typescript@5.6.3) eslint: 8.49.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/experimental-utils@5.62.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/experimental-utils@5.62.0(eslint@8.57.0)(typescript@5.6.3)': dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.4.5)': + '@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) debug: 4.3.4(supports-color@8.1.1) eslint: 8.49.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 7.1.1 '@typescript-eslint/types': 7.1.1 - '@typescript-eslint/typescript-estree': 7.1.1(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.1.1(typescript@5.6.3) '@typescript-eslint/visitor-keys': 7.1.1 debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 7.7.0 '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.6.3) '@typescript-eslint/visitor-keys': 7.7.0 debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -25466,39 +25233,39 @@ snapshots: '@typescript-eslint/types': 7.7.0 '@typescript-eslint/visitor-keys': 7.7.0 - '@typescript-eslint/type-utils@5.62.0(eslint@8.49.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@5.62.0(eslint@8.49.0)(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.49.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.49.0)(typescript@5.6.3) debug: 4.3.4(supports-color@8.1.1) eslint: 8.49.0 - tsutils: 3.21.0(typescript@5.4.5) + tsutils: 3.21.0(typescript@5.6.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.6.3) debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 - tsutils: 3.21.0(typescript@5.4.5) + tsutils: 3.21.0(typescript@5.6.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@7.7.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@7.7.0(eslint@8.57.0)(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.6.3) + '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.6.3) debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -25508,7 +25275,7 @@ snapshots: '@typescript-eslint/types@7.7.0': {} - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 @@ -25516,13 +25283,13 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.5) + tsutils: 3.21.0(typescript@5.6.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.1.1(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@7.1.1(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 7.1.1 '@typescript-eslint/visitor-keys': 7.1.1 @@ -25531,13 +25298,13 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.7.0(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@7.7.0(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 7.7.0 '@typescript-eslint/visitor-keys': 7.7.0 @@ -25546,20 +25313,20 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.4 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@8.49.0)(typescript@5.4.5)': + '@typescript-eslint/utils@5.62.0(eslint@8.49.0)(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) eslint: 8.49.0 eslint-scope: 5.1.1 semver: 7.6.0 @@ -25567,14 +25334,14 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.0 @@ -25582,14 +25349,14 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@7.7.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/utils@7.7.0(eslint@8.57.0)(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 7.7.0 '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.6.3) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -25678,14 +25445,14 @@ snapshots: - encoding - supports-color - '@vinxi/devtools@0.2.0(@babel/core@7.24.4)(@testing-library/jest-dom@6.4.2(vitest@1.5.0(@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)))(preact@10.20.2)(rollup@4.14.3)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@vinxi/devtools@0.2.0(@babel/core@7.24.4)(@testing-library/jest-dom@6.4.2(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)))(preact@10.20.2)(rollup@4.14.3)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@preact/preset-vite': 2.8.2(@babel/core@7.24.4)(preact@10.20.2)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@solidjs/router': 0.8.4(solid-js@1.8.16) birpc: 0.2.17 solid-js: 1.8.16 vite-plugin-inspect: 0.7.42(rollup@4.14.3)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) - vite-plugin-solid: 2.10.2(@testing-library/jest-dom@6.4.2(vitest@1.5.0(@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)))(solid-js@1.8.16)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + vite-plugin-solid: 2.10.2(@testing-library/jest-dom@6.4.2(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)))(solid-js@1.8.16)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) ws: 8.16.0 transitivePeerDependencies: - '@babel/core' @@ -25740,7 +25507,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@1.5.0(vitest@2.1.2(@types/node@20.12.7)(jsdom@21.1.2)(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@20.12.7)(jsdom@21.1.2)(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 @@ -25755,11 +25522,11 @@ snapshots: std-env: 3.7.0 strip-literal: 2.1.0 test-exclude: 6.0.0 - vitest: 2.1.2(@types/node@20.12.7)(jsdom@21.1.2)(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@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@1.5.0(vitest@2.1.2(@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@20.12.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 @@ -25774,7 +25541,7 @@ snapshots: std-env: 3.7.0 strip-literal: 2.1.0 test-exclude: 6.0.0 - vitest: 2.1.2(@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.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - supports-color @@ -25784,51 +25551,33 @@ snapshots: '@vitest/utils': 1.3.1 chai: 4.4.1 - '@vitest/expect@1.5.0': + '@vitest/expect@2.1.3': dependencies: - '@vitest/spy': 1.5.0 - '@vitest/utils': 1.5.0 - chai: 4.4.1 - - '@vitest/expect@2.1.2': - dependencies: - '@vitest/spy': 2.1.2 - '@vitest/utils': 2.1.2 + '@vitest/spy': 2.1.3 + '@vitest/utils': 2.1.3 chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.2(@vitest/spy@2.1.2)(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))': + '@vitest/mocker@2.1.3(@vitest/spy@2.1.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))': dependencies: - '@vitest/spy': 2.1.2 + '@vitest/spy': 2.1.3 estree-walker: 3.0.3 magic-string: 0.30.11 optionalDependencies: 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) - '@vitest/pretty-format@2.1.2': + '@vitest/pretty-format@2.1.3': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@1.5.0': + '@vitest/runner@2.1.3': dependencies: - '@vitest/utils': 1.5.0 - p-limit: 5.0.0 + '@vitest/utils': 2.1.3 pathe: 1.1.2 - '@vitest/runner@2.1.2': + '@vitest/snapshot@2.1.3': dependencies: - '@vitest/utils': 2.1.2 - pathe: 1.1.2 - - '@vitest/snapshot@1.5.0': - dependencies: - magic-string: 0.30.11 - pathe: 1.1.2 - pretty-format: 29.7.0 - - '@vitest/snapshot@2.1.2': - dependencies: - '@vitest/pretty-format': 2.1.2 + '@vitest/pretty-format': 2.1.3 magic-string: 0.30.11 pathe: 1.1.2 @@ -25840,7 +25589,7 @@ snapshots: dependencies: tinyspy: 2.2.1 - '@vitest/spy@2.1.2': + '@vitest/spy@2.1.3': dependencies: tinyspy: 3.0.2 @@ -25858,9 +25607,9 @@ snapshots: loupe: 2.3.7 pretty-format: 29.7.0 - '@vitest/utils@2.1.2': + '@vitest/utils@2.1.3': dependencies: - '@vitest/pretty-format': 2.1.2 + '@vitest/pretty-format': 2.1.3 loupe: 3.1.1 tinyrainbow: 1.2.0 @@ -25890,7 +25639,7 @@ snapshots: '@vue/compiler-core': 3.4.23 '@vue/shared': 3.4.23 - '@vue/language-core@1.8.27(typescript@5.4.2)': + '@vue/language-core@1.8.27(typescript@5.6.3)': dependencies: '@volar/language-core': 1.11.1 '@volar/source-map': 1.11.1 @@ -25902,7 +25651,7 @@ snapshots: path-browserify: 1.0.1 vue-template-compiler: 2.7.16 optionalDependencies: - typescript: 5.4.2 + typescript: 5.6.3 '@vue/shared@3.4.23': {} @@ -27995,59 +27744,23 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@8.3.6(typescript@5.2.2): - dependencies: - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - path-type: 4.0.0 - optionalDependencies: - typescript: 5.2.2 - - cosmiconfig@8.3.6(typescript@5.4.2): + cosmiconfig@8.3.6(typescript@5.6.3): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.4.2 - - cosmiconfig@8.3.6(typescript@5.4.5): - dependencies: - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - path-type: 4.0.0 - optionalDependencies: - typescript: 5.4.5 - - cosmiconfig@9.0.0(typescript@5.2.2): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.2.2 + typescript: 5.6.3 - cosmiconfig@9.0.0(typescript@5.4.2): + cosmiconfig@9.0.0(typescript@5.6.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.4.2 - - cosmiconfig@9.0.0(typescript@5.4.5): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 coveralls@3.1.1: dependencies: @@ -29257,20 +28970,20 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-next@14.2.2(eslint@8.57.0)(typescript@5.4.5): + eslint-config-next@14.2.2(eslint@8.57.0)(typescript@5.6.3): dependencies: '@next/eslint-plugin-next': 14.2.2 '@rushstack/eslint-patch': 1.10.2 - '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color @@ -29283,25 +28996,25 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)(jest@26.6.3)(typescript@5.4.5): + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)(jest@26.6.3)(typescript@5.6.3): dependencies: '@babel/core': 7.24.4 '@babel/eslint-parser': 7.22.15(@babel/core@7.24.4)(eslint@8.57.0) '@rushstack/eslint-patch': 1.10.2 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.6.3) babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 eslint: 8.57.0 eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@26.6.3)(typescript@5.4.5) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(jest@26.6.3)(typescript@5.6.3) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 5.11.1(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-testing-library: 5.11.1(eslint@8.57.0)(typescript@5.6.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - '@babel/plugin-syntax-flow' - '@babel/plugin-transform-react-jsx' @@ -29310,25 +29023,25 @@ snapshots: - jest - supports-color - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4))(eslint@8.49.0)(typescript@5.4.5): + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4))(eslint@8.49.0)(typescript@5.6.3): dependencies: '@babel/core': 7.24.4 '@babel/eslint-parser': 7.22.15(@babel/core@7.24.4)(eslint@8.49.0) '@rushstack/eslint-patch': 1.10.2 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.4.5))(eslint@8.49.0)(typescript@5.4.5) - '@typescript-eslint/parser': 5.62.0(eslint@8.49.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.49.0)(typescript@5.6.3) babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 eslint: 8.49.0 eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4))(eslint@8.49.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.4.5))(eslint@8.49.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.4.5))(eslint@8.49.0)(typescript@5.4.5))(eslint@8.49.0)(typescript@5.4.5) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.49.0) eslint-plugin-react: 7.34.1(eslint@8.49.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.49.0) - eslint-plugin-testing-library: 5.11.1(eslint@8.49.0)(typescript@5.4.5) + eslint-plugin-testing-library: 5.11.1(eslint@8.49.0)(typescript@5.6.3) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - '@babel/plugin-syntax-flow' - '@babel/plugin-transform-react-jsx' @@ -29337,15 +29050,15 @@ snapshots: - jest - supports-color - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)): dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-import-resolver-babel-plugin-root-import@1.1.1(babel-plugin-root-import@6.1.0)(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)): + eslint-import-resolver-babel-plugin-root-import@1.1.1(babel-plugin-root-import@6.1.0)(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)): dependencies: babel-plugin-root-import: 6.1.0 eslint-import-resolver-node: 0.2.3 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) json5: 0.5.1 transitivePeerDependencies: - supports-color @@ -29366,13 +29079,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.16.0 eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.3 is-core-module: 2.13.1 @@ -29383,13 +29096,13 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0): dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.16.0 eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.3 is-core-module: 2.13.1 @@ -29400,46 +29113,46 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.49.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@8.49.0): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.49.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.49.0)(typescript@5.6.3) eslint: 8.49.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color @@ -29459,7 +29172,7 @@ snapshots: lodash: 4.17.21 string-natural-compare: 3.0.1 - eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.4.5))(eslint@8.49.0): + eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -29469,7 +29182,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.49.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.49.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@8.49.0) has: 1.0.4 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -29480,13 +29193,13 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.49.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.49.0)(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.4.5))(eslint@8.49.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -29496,7 +29209,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.49.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.49.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@8.49.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -29507,13 +29220,13 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.49.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.49.0)(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -29523,7 +29236,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -29534,13 +29247,13 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -29550,7 +29263,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -29561,13 +29274,13 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -29577,7 +29290,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -29588,28 +29301,28 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.4.5))(eslint@8.49.0)(typescript@5.4.5))(eslint@8.49.0)(typescript@5.4.5): + eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3): dependencies: - '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.49.0)(typescript@5.4.5) + '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.49.0)(typescript@5.6.3) eslint: 8.49.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.4.5))(eslint@8.49.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@26.6.3)(typescript@5.4.5): + eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(jest@26.6.3)(typescript@5.6.3): dependencies: - '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3) jest: 26.6.3 transitivePeerDependencies: - supports-color @@ -29747,10 +29460,10 @@ snapshots: semver: 6.3.1 string.prototype.matchall: 4.0.11 - eslint-plugin-storybook@0.8.0(eslint@8.57.0)(typescript@5.4.5): + eslint-plugin-storybook@0.8.0(eslint@8.57.0)(typescript@5.6.3): dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 requireindex: 1.2.0 ts-dedent: 2.2.0 @@ -29758,17 +29471,17 @@ snapshots: - supports-color - typescript - eslint-plugin-testing-library@5.11.1(eslint@8.49.0)(typescript@5.4.5): + eslint-plugin-testing-library@5.11.1(eslint@8.49.0)(typescript@5.6.3): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.49.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.49.0)(typescript@5.6.3) eslint: 8.49.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-testing-library@5.11.1(eslint@8.57.0)(typescript@5.4.5): + eslint-plugin-testing-library@5.11.1(eslint@8.57.0)(typescript@5.6.3): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -30401,7 +30114,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@4.1.6(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)): + fork-ts-checker-webpack-plugin@4.1.6(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)): dependencies: '@babel/code-frame': 7.10.4 chalk: 2.4.2 @@ -30409,7 +30122,7 @@ snapshots: minimatch: 3.1.2 semver: 5.7.2 tapable: 1.1.3 - typescript: 5.4.5 + typescript: 5.6.3 webpack: 5.90.1(esbuild@0.20.2) worker-rpc: 0.1.1 optionalDependencies: @@ -30418,7 +30131,7 @@ snapshots: transitivePeerDependencies: - supports-color - fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack@4.47.0): + fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack@4.47.0): dependencies: '@babel/code-frame': 7.24.2 '@types/json-schema': 7.0.15 @@ -30433,13 +30146,13 @@ snapshots: schema-utils: 2.7.0 semver: 7.6.0 tapable: 1.1.3 - typescript: 5.4.5 + typescript: 5.6.3 webpack: 4.47.0 optionalDependencies: eslint: 8.57.0 vue-template-compiler: 2.7.16 - fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)): + fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)): dependencies: '@babel/code-frame': 7.24.2 '@types/json-schema': 7.0.15 @@ -30454,13 +30167,13 @@ snapshots: schema-utils: 2.7.0 semver: 7.6.0 tapable: 1.1.3 - typescript: 5.4.5 + typescript: 5.6.3 webpack: 5.90.1(esbuild@0.20.2) optionalDependencies: eslint: 8.57.0 vue-template-compiler: 2.7.16 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.4.5)(webpack@5.90.1(esbuild@0.20.2)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.3)(webpack@5.90.1(esbuild@0.20.2)): dependencies: '@babel/code-frame': 7.24.2 chalk: 4.1.2 @@ -30474,7 +30187,7 @@ snapshots: schema-utils: 3.3.0 semver: 7.6.0 tapable: 2.2.1 - typescript: 5.4.5 + typescript: 5.6.3 webpack: 5.90.1(esbuild@0.20.2) form-data-encoder@2.1.4: {} @@ -31234,37 +30947,9 @@ snapshots: tapable: 2.2.1 webpack: 5.90.1(esbuild@0.20.2) - htmlnano@2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.2.2): + htmlnano@2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.6.3): dependencies: - cosmiconfig: 8.3.6(typescript@5.2.2) - posthtml: 0.16.6 - timsort: 0.3.0 - optionalDependencies: - postcss: 8.4.47 - relateurl: 0.2.7 - srcset: 4.0.0 - svgo: 2.8.0 - terser: 5.30.3 - transitivePeerDependencies: - - typescript - - htmlnano@2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.4.2): - dependencies: - cosmiconfig: 8.3.6(typescript@5.4.2) - posthtml: 0.16.6 - timsort: 0.3.0 - optionalDependencies: - postcss: 8.4.47 - relateurl: 0.2.7 - srcset: 4.0.0 - svgo: 2.8.0 - terser: 5.30.3 - transitivePeerDependencies: - - typescript - - htmlnano@2.1.0(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(svgo@2.8.0)(terser@5.30.3)(typescript@5.4.5): - dependencies: - cosmiconfig: 8.3.6(typescript@5.4.5) + cosmiconfig: 8.3.6(typescript@5.6.3) posthtml: 0.16.6 timsort: 0.3.0 optionalDependencies: @@ -35121,10 +34806,6 @@ snapshots: dependencies: yocto-queue: 1.0.0 - p-limit@5.0.0: - dependencies: - yocto-queue: 1.0.0 - p-locate@3.0.0: dependencies: p-limit: 2.3.0 @@ -35268,63 +34949,9 @@ snapshots: dot-case: 3.0.4 tslib: 2.6.2 - parcel@2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2): + parcel@2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3): dependencies: - '@parcel/config-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.2.2) - '@parcel/core': 2.12.0(@swc/helpers@0.5.10) - '@parcel/diagnostic': 2.12.0 - '@parcel/events': 2.12.0 - '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/logger': 2.12.0 - '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/reporter-cli': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/reporter-tracer': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/utils': 2.12.0 - chalk: 4.1.2 - commander: 7.2.0 - get-port: 4.2.0 - transitivePeerDependencies: - - '@swc/helpers' - - cssnano - - postcss - - purgecss - - relateurl - - srcset - - terser - - typescript - - uncss - - parcel@2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2): - dependencies: - '@parcel/config-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.2) - '@parcel/core': 2.12.0(@swc/helpers@0.5.10) - '@parcel/diagnostic': 2.12.0 - '@parcel/events': 2.12.0 - '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/logger': 2.12.0 - '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/reporter-cli': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/reporter-tracer': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10) - '@parcel/utils': 2.12.0 - chalk: 4.1.2 - commander: 7.2.0 - get-port: 4.2.0 - transitivePeerDependencies: - - '@swc/helpers' - - cssnano - - postcss - - purgecss - - relateurl - - srcset - - terser - - typescript - - uncss - - parcel@2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5): - dependencies: - '@parcel/config-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.4.5) + '@parcel/config-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10))(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) '@parcel/core': 2.12.0(@swc/helpers@0.5.10) '@parcel/diagnostic': 2.12.0 '@parcel/events': 2.12.0 @@ -35534,9 +35161,9 @@ snapshots: dependencies: find-up: 3.0.0 - pnp-webpack-plugin@1.7.0(typescript@5.4.5): + pnp-webpack-plugin@1.7.0(typescript@5.6.3): dependencies: - ts-pnp: 1.2.0(typescript@5.4.5) + ts-pnp: 1.2.0(typescript@5.6.3) transitivePeerDependencies: - typescript @@ -36223,14 +35850,14 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)): + razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)): dependencies: '@babel/code-frame': 7.24.2 chalk: 4.1.2 filesize: 6.4.0 gzip-size: 6.0.0 jest-message-util: 26.6.2 - react-dev-utils: 11.0.4(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)) + react-dev-utils: 11.0.4(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)) react-error-overlay: 6.0.9 recursive-readdir: 2.2.3 resolve: 1.22.8 @@ -36244,7 +35871,7 @@ snapshots: - typescript - vue-template-compiler - razzle-plugin-scss@4.2.18(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(postcss@8.4.31)(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(razzle@4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)): + razzle-plugin-scss@4.2.18(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(postcss@8.4.31)(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(razzle@4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)): dependencies: autoprefixer: 10.4.8(postcss@8.4.31) css-loader: 5.2.7(webpack@5.90.1(esbuild@0.20.2)) @@ -36253,8 +35880,8 @@ snapshots: postcss-load-config: 3.1.4(postcss@8.4.31) postcss-loader: 4.3.0(postcss@8.4.31)(webpack@5.90.1(esbuild@0.20.2)) postcss-scss: 3.0.5 - razzle: 4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)) - razzle-dev-utils: 4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)) + razzle: 4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)) + razzle-dev-utils: 4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)) resolve-url-loader: 3.1.5 sass: 1.75.0 sass-loader: 10.5.2(sass@1.75.0)(webpack@5.90.1(esbuild@0.20.2)) @@ -36269,7 +35896,7 @@ snapshots: dependencies: webpack: 5.90.1(esbuild@0.20.2) - razzle@4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)): + razzle@4.2.18(@babel/core@7.24.4)(babel-preset-razzle@4.2.18)(eslint@8.57.0)(html-webpack-plugin@5.5.0(webpack@5.90.1(esbuild@0.20.2)))(mini-css-extract-plugin@2.7.2(webpack@5.90.1(esbuild@0.20.2)))(razzle-dev-utils@4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)))(sockjs-client@1.4.0)(type-fest@3.13.1)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)): dependencies: '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.0)(sockjs-client@1.4.0)(type-fest@3.13.1)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack-hot-middleware@2.26.1)(webpack@5.90.1(esbuild@0.20.2)) @@ -36295,14 +35922,14 @@ snapshots: mini-css-extract-plugin: 2.7.2(webpack@5.90.1(esbuild@0.20.2)) mri: 1.2.0 null-loader: 4.0.1(webpack@5.90.1(esbuild@0.20.2)) - pnp-webpack-plugin: 1.7.0(typescript@5.4.5) + pnp-webpack-plugin: 1.7.0(typescript@5.6.3) postcss: 8.4.31 postcss-load-config: 3.1.4(postcss@8.4.31) postcss-loader: 4.3.0(postcss@8.4.31)(webpack@5.90.1(esbuild@0.20.2)) process: 0.11.10 - razzle-dev-utils: 4.2.18(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)) + razzle-dev-utils: 4.2.18(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack-dev-server@4.11.1(debug@4.3.2)(webpack@5.90.1(esbuild@0.20.2)))(webpack@5.90.1(esbuild@0.20.2)) razzle-start-server-webpack-plugin: 4.2.18(webpack@5.90.1(esbuild@0.20.2)) - react-dev-utils: 11.0.4(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)) + react-dev-utils: 11.0.4(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)) react-refresh: 0.14.0 resolve: 1.22.8 sade: 1.8.1 @@ -36540,7 +36167,7 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-dev-utils@11.0.4(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)): + react-dev-utils@11.0.4(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)): dependencies: '@babel/code-frame': 7.10.4 address: 1.1.2 @@ -36551,7 +36178,7 @@ snapshots: escape-string-regexp: 2.0.0 filesize: 6.1.0 find-up: 4.1.0 - fork-ts-checker-webpack-plugin: 4.1.6(eslint@8.57.0)(typescript@5.4.5)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)) + fork-ts-checker-webpack-plugin: 4.1.6(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)) global-modules: 2.0.0 globby: 11.0.1 gzip-size: 5.1.1 @@ -36568,7 +36195,7 @@ snapshots: text-table: 0.2.0 webpack: 5.90.1(esbuild@0.20.2) optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 transitivePeerDependencies: - eslint - supports-color @@ -36591,23 +36218,23 @@ snapshots: recompose: 0.27.1(react@18.2.0) shallowequal: 1.1.0 - react-docgen-typescript-plugin@1.0.6(typescript@5.4.5)(webpack@5.90.1(esbuild@0.20.2)): + react-docgen-typescript-plugin@1.0.6(typescript@5.6.3)(webpack@5.90.1(esbuild@0.20.2)): dependencies: debug: 4.3.4(supports-color@8.1.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.5 - react-docgen-typescript: 2.2.2(typescript@5.4.5) + react-docgen-typescript: 2.2.2(typescript@5.6.3) tslib: 2.6.2 - typescript: 5.4.5 + typescript: 5.6.3 webpack: 5.90.1(esbuild@0.20.2) transitivePeerDependencies: - supports-color - react-docgen-typescript@2.2.2(typescript@5.4.5): + react-docgen-typescript@2.2.2(typescript@5.6.3): dependencies: - typescript: 5.4.5 + typescript: 5.6.3 react-docgen@7.0.3: dependencies: @@ -37232,47 +36859,13 @@ snapshots: relateurl@0.2.7: {} - release-it@16.2.1(encoding@0.1.13)(typescript@5.4.2): - dependencies: - '@iarna/toml': 2.2.5 - '@octokit/rest': 19.0.13(encoding@0.1.13) - async-retry: 1.3.3 - chalk: 5.3.0 - cosmiconfig: 8.3.6(typescript@5.4.2) - execa: 7.2.0 - git-url-parse: 13.1.0 - globby: 13.2.2 - got: 13.0.0 - inquirer: 9.2.11 - is-ci: 3.0.1 - issue-parser: 6.0.0 - lodash: 4.17.21 - mime-types: 2.1.35 - new-github-release-url: 2.0.0 - node-fetch: 3.3.2 - open: 9.1.0 - ora: 7.0.1 - os-name: 5.1.0 - promise.allsettled: 1.0.7 - proxy-agent: 6.3.1 - semver: 7.5.4 - shelljs: 0.8.5 - update-notifier: 6.0.2 - url-join: 5.0.0 - wildcard-match: 5.1.2 - yargs-parser: 21.1.1 - transitivePeerDependencies: - - encoding - - supports-color - - typescript - - release-it@16.2.1(encoding@0.1.13)(typescript@5.4.5): + release-it@16.2.1(encoding@0.1.13)(typescript@5.6.3): dependencies: '@iarna/toml': 2.2.5 '@octokit/rest': 19.0.13(encoding@0.1.13) async-retry: 1.3.3 chalk: 5.3.0 - cosmiconfig: 8.3.6(typescript@5.4.5) + cosmiconfig: 8.3.6(typescript@5.6.3) execa: 7.2.0 git-url-parse: 13.1.0 globby: 13.2.2 @@ -37300,79 +36893,13 @@ snapshots: - supports-color - typescript - release-it@17.1.1(typescript@5.2.2): + release-it@17.1.1(typescript@5.6.3): dependencies: '@iarna/toml': 2.2.5 '@octokit/rest': 20.0.2 async-retry: 1.3.3 chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.2.2) - execa: 8.0.1 - git-url-parse: 14.0.0 - globby: 14.0.1 - got: 13.0.0 - inquirer: 9.2.14 - is-ci: 3.0.1 - issue-parser: 6.0.0 - lodash: 4.17.21 - mime-types: 2.1.35 - new-github-release-url: 2.0.0 - node-fetch: 3.3.2 - open: 10.0.3 - ora: 8.0.1 - os-name: 5.1.0 - promise.allsettled: 1.0.7 - proxy-agent: 6.4.0 - semver: 7.6.0 - shelljs: 0.8.5 - update-notifier: 7.0.0 - url-join: 5.0.0 - wildcard-match: 5.1.2 - yargs-parser: 21.1.1 - transitivePeerDependencies: - - supports-color - - typescript - - release-it@17.1.1(typescript@5.4.2): - dependencies: - '@iarna/toml': 2.2.5 - '@octokit/rest': 20.0.2 - async-retry: 1.3.3 - chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.4.2) - execa: 8.0.1 - git-url-parse: 14.0.0 - globby: 14.0.1 - got: 13.0.0 - inquirer: 9.2.14 - is-ci: 3.0.1 - issue-parser: 6.0.0 - lodash: 4.17.21 - mime-types: 2.1.35 - new-github-release-url: 2.0.0 - node-fetch: 3.3.2 - open: 10.0.3 - ora: 8.0.1 - os-name: 5.1.0 - promise.allsettled: 1.0.7 - proxy-agent: 6.4.0 - semver: 7.6.0 - shelljs: 0.8.5 - update-notifier: 7.0.0 - url-join: 5.0.0 - wildcard-match: 5.1.2 - yargs-parser: 21.1.1 - transitivePeerDependencies: - - supports-color - - typescript - - release-it@17.1.1(typescript@5.4.5): - dependencies: - '@iarna/toml': 2.2.5 - '@octokit/rest': 20.0.2 - async-retry: 1.3.3 - chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.4.5) + cosmiconfig: 9.0.0(typescript@5.6.3) execa: 8.0.1 git-url-parse: 14.0.0 globby: 14.0.1 @@ -38626,56 +38153,56 @@ snapshots: postcss: 7.0.39 postcss-selector-parser: 3.1.2 - stylelint-config-idiomatic-order@10.0.0(stylelint@16.3.1(typescript@5.4.5)): + stylelint-config-idiomatic-order@10.0.0(stylelint@16.3.1(typescript@5.6.3)): dependencies: - stylelint: 16.3.1(typescript@5.4.5) - stylelint-order: 6.0.4(stylelint@16.3.1(typescript@5.4.5)) + stylelint: 16.3.1(typescript@5.6.3) + stylelint-order: 6.0.4(stylelint@16.3.1(typescript@5.6.3)) - stylelint-config-idiomatic-order@9.0.0(stylelint@15.10.3(typescript@5.4.5)): + stylelint-config-idiomatic-order@9.0.0(stylelint@15.10.3(typescript@5.6.3)): dependencies: - stylelint: 15.10.3(typescript@5.4.5) - stylelint-order: 5.0.0(stylelint@15.10.3(typescript@5.4.5)) + stylelint: 15.10.3(typescript@5.6.3) + stylelint-order: 5.0.0(stylelint@15.10.3(typescript@5.6.3)) - stylelint-config-sass-guidelines@10.0.0(postcss@8.4.31)(stylelint@15.10.3(typescript@5.4.5)): + stylelint-config-sass-guidelines@10.0.0(postcss@8.4.31)(stylelint@15.10.3(typescript@5.6.3)): dependencies: postcss: 8.4.31 postcss-scss: 4.0.8(postcss@8.4.31) - stylelint: 15.10.3(typescript@5.4.5) - stylelint-scss: 4.7.0(stylelint@15.10.3(typescript@5.4.5)) + stylelint: 15.10.3(typescript@5.6.3) + stylelint-scss: 4.7.0(stylelint@15.10.3(typescript@5.6.3)) - stylelint-order@5.0.0(stylelint@15.10.3(typescript@5.4.5)): + stylelint-order@5.0.0(stylelint@15.10.3(typescript@5.6.3)): dependencies: postcss: 8.4.31 postcss-sorting: 7.0.1(postcss@8.4.31) - stylelint: 15.10.3(typescript@5.4.5) + stylelint: 15.10.3(typescript@5.6.3) - stylelint-order@6.0.4(stylelint@16.3.1(typescript@5.4.5)): + stylelint-order@6.0.4(stylelint@16.3.1(typescript@5.6.3)): dependencies: postcss: 8.4.38 postcss-sorting: 8.0.2(postcss@8.4.38) - stylelint: 16.3.1(typescript@5.4.5) + stylelint: 16.3.1(typescript@5.6.3) - stylelint-prettier@4.0.2(prettier@3.0.3)(stylelint@15.10.3(typescript@5.4.5)): + stylelint-prettier@4.0.2(prettier@3.0.3)(stylelint@15.10.3(typescript@5.6.3)): dependencies: prettier: 3.0.3 prettier-linter-helpers: 1.0.0 - stylelint: 15.10.3(typescript@5.4.5) + stylelint: 15.10.3(typescript@5.6.3) - stylelint-prettier@5.0.0(prettier@3.2.5)(stylelint@16.3.1(typescript@5.4.5)): + stylelint-prettier@5.0.0(prettier@3.2.5)(stylelint@16.3.1(typescript@5.6.3)): dependencies: prettier: 3.2.5 prettier-linter-helpers: 1.0.0 - stylelint: 16.3.1(typescript@5.4.5) + stylelint: 16.3.1(typescript@5.6.3) - stylelint-scss@4.7.0(stylelint@15.10.3(typescript@5.4.5)): + stylelint-scss@4.7.0(stylelint@15.10.3(typescript@5.6.3)): dependencies: postcss-media-query-parser: 0.2.3 postcss-resolve-nested-selector: 0.1.1 postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 - stylelint: 15.10.3(typescript@5.4.5) + stylelint: 15.10.3(typescript@5.6.3) - stylelint@15.10.3(typescript@5.4.5): + stylelint@15.10.3(typescript@5.6.3): dependencies: '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) '@csstools/css-tokenizer': 2.2.4 @@ -38683,7 +38210,7 @@ snapshots: '@csstools/selector-specificity': 3.0.3(postcss-selector-parser@6.0.16) balanced-match: 2.0.0 colord: 2.9.3 - cosmiconfig: 8.3.6(typescript@5.4.5) + cosmiconfig: 8.3.6(typescript@5.6.3) css-functions-list: 3.2.1 css-tree: 2.3.1 debug: 4.3.4(supports-color@8.1.1) @@ -38721,7 +38248,7 @@ snapshots: - supports-color - typescript - stylelint@16.3.1(typescript@5.4.5): + stylelint@16.3.1(typescript@5.6.3): dependencies: '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) '@csstools/css-tokenizer': 2.2.4 @@ -38730,7 +38257,7 @@ snapshots: '@dual-bundle/import-meta-resolve': 4.1.0 balanced-match: 2.0.0 colord: 2.9.3 - cosmiconfig: 9.0.0(typescript@5.4.5) + cosmiconfig: 9.0.0(typescript@5.6.3) css-functions-list: 3.2.1 css-tree: 2.3.1 debug: 4.3.4(supports-color@8.1.1) @@ -39079,14 +38606,10 @@ snapshots: tiny-warning@1.0.3: {} - tinybench@2.7.0: {} - tinybench@2.9.0: {} tinyexec@0.3.0: {} - tinypool@0.8.4: {} - tinypool@1.0.1: {} tinyrainbow@1.2.0: {} @@ -39189,15 +38712,15 @@ snapshots: dependencies: typescript: 5.0.4 - ts-api-utils@1.3.0(typescript@5.4.5): + ts-api-utils@1.3.0(typescript@5.6.3): dependencies: - typescript: 5.4.5 + typescript: 5.6.3 ts-dedent@2.2.0: {} ts-interface-checker@0.1.13: {} - ts-jest@26.5.6(jest@26.6.3)(typescript@5.4.5): + ts-jest@26.5.6(jest@26.6.3)(typescript@5.6.3): dependencies: bs-logger: 0.2.6 buffer-from: 1.1.2 @@ -39209,25 +38732,25 @@ snapshots: make-error: 1.3.6 mkdirp: 1.0.4 semver: 7.6.0 - typescript: 5.4.5 + typescript: 5.6.3 yargs-parser: 20.2.9 - ts-loader@9.4.4(typescript@5.4.5)(webpack@5.90.1(esbuild@0.20.2)): + ts-loader@9.4.4(typescript@5.6.3)(webpack@5.90.1(esbuild@0.20.2)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.16.0 micromatch: 4.0.5 semver: 7.6.0 - typescript: 5.4.5 + typescript: 5.6.3 webpack: 5.90.1(esbuild@0.20.2) - ts-pnp@1.2.0(typescript@5.4.5): + ts-pnp@1.2.0(typescript@5.6.3): optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 - tsconfck@3.0.3(typescript@5.4.5): + tsconfck@3.0.3(typescript@5.6.3): optionalDependencies: - typescript: 5.4.5 + typescript: 5.6.3 tsconfig-paths@3.15.0: dependencies: @@ -39253,7 +38776,7 @@ snapshots: tslib@2.6.2: {} - tsup@8.0.2(@microsoft/api-extractor@7.43.0(@types/node@20.12.7))(@swc/core@1.4.16(@swc/helpers@0.5.10))(postcss@8.4.47)(typescript@5.4.2): + tsup@8.0.2(@microsoft/api-extractor@7.43.0(@types/node@20.12.7))(@swc/core@1.4.16(@swc/helpers@0.5.10))(postcss@8.4.47)(typescript@5.6.3): dependencies: bundle-require: 4.0.2(esbuild@0.19.12) cac: 6.7.14 @@ -39273,15 +38796,15 @@ snapshots: '@microsoft/api-extractor': 7.43.0(@types/node@20.12.7) '@swc/core': 1.4.16(@swc/helpers@0.5.10) postcss: 8.4.47 - typescript: 5.4.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - ts-node - tsutils@3.21.0(typescript@5.4.5): + tsutils@3.21.0(typescript@5.6.3): dependencies: tslib: 1.14.1 - typescript: 5.4.5 + typescript: 5.6.3 tty-browserify@0.0.0: {} @@ -39368,11 +38891,9 @@ snapshots: typescript@5.0.4: {} - typescript@5.2.2: {} - typescript@5.4.2: {} - typescript@5.4.5: {} + typescript@5.6.3: {} ua-parser-js@0.7.37: {} @@ -39836,7 +39357,7 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vinxi@0.2.1(@testing-library/jest-dom@6.4.2(vitest@1.5.0(@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)))(@types/node@20.12.7)(encoding@0.1.13)(less@3.11.1)(lightningcss@1.24.1)(preact@10.20.2)(rollup@4.14.3)(sass@1.75.0)(terser@5.30.3): + vinxi@0.2.1(@testing-library/jest-dom@6.4.2(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)))(@types/node@20.12.7)(encoding@0.1.13)(less@3.11.1)(lightningcss@1.24.1)(preact@10.20.2)(rollup@4.14.3)(sass@1.75.0)(terser@5.30.3): dependencies: '@babel/core': 7.24.4 '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) @@ -39844,7 +39365,7 @@ snapshots: '@types/micromatch': 4.0.7 '@types/serve-static': 1.15.7 '@types/ws': 8.5.10 - '@vinxi/devtools': 0.2.0(@babel/core@7.24.4)(@testing-library/jest-dom@6.4.2(vitest@1.5.0(@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)))(preact@10.20.2)(rollup@4.14.3)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@vinxi/devtools': 0.2.0(@babel/core@7.24.4)(@testing-library/jest-dom@6.4.2(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)))(preact@10.20.2)(rollup@4.14.3)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@vinxi/listhen': 1.5.6 boxen: 7.1.1 c12: 1.10.0 @@ -39951,7 +39472,7 @@ snapshots: - supports-color - terser - vite-node@2.1.2(@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): dependencies: cac: 6.7.14 debug: 4.3.7 @@ -39973,16 +39494,16 @@ snapshots: '@babel/core': 7.24.4 vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.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.4.2)(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-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.24.1)(sass@1.75.0)(terser@5.30.3)): dependencies: '@microsoft/api-extractor': 7.43.0(@types/node@20.12.7) '@rollup/pluginutils': 5.1.0(rollup@4.24.0) - '@vue/language-core': 1.8.27(typescript@5.4.2) + '@vue/language-core': 1.8.27(typescript@5.6.3) debug: 4.3.4(supports-color@8.1.1) kolorist: 1.8.0 magic-string: 0.30.10 - typescript: 5.4.2 - vue-tsc: 1.8.27(typescript@5.4.2) + 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.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: @@ -40005,7 +39526,7 @@ snapshots: - rollup - supports-color - vite-plugin-solid@2.10.2(@testing-library/jest-dom@6.4.2(vitest@1.5.0(@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)))(solid-js@1.8.16)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)): + vite-plugin-solid@2.10.2(@testing-library/jest-dom@6.4.2(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)))(solid-js@1.8.16)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)): dependencies: '@babel/core': 7.24.4 '@types/babel__core': 7.20.5 @@ -40016,15 +39537,15 @@ snapshots: vite: 4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) vitefu: 0.2.5(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) optionalDependencies: - '@testing-library/jest-dom': 6.4.2(vitest@1.5.0(@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)(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)) transitivePeerDependencies: - supports-color - vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)): + vite-tsconfig-paths@4.3.2(typescript@5.6.3)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.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.4.5) + tsconfck: 3.0.3(typescript@5.6.3) optionalDependencies: vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: @@ -40074,7 +39595,7 @@ snapshots: optionalDependencies: vite: 4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - vitest-axe@0.1.0(vitest@2.1.2(@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@20.12.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 @@ -40082,52 +39603,17 @@ snapshots: dom-accessibility-api: 0.5.16 lodash-es: 4.17.21 redent: 3.0.0 - vitest: 2.1.2(@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@1.5.0(@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): - dependencies: - '@vitest/expect': 1.5.0 - '@vitest/runner': 1.5.0 - '@vitest/snapshot': 1.5.0 - '@vitest/spy': 1.5.0 - '@vitest/utils': 1.5.0 - acorn-walk: 8.3.2 - chai: 4.4.1 - debug: 4.3.4(supports-color@8.1.1) - execa: 8.0.1 - local-pkg: 0.5.0 - magic-string: 0.30.10 - pathe: 1.1.2 - picocolors: 1.0.0 - std-env: 3.7.0 - strip-literal: 2.1.0 - tinybench: 2.7.0 - tinypool: 0.8.4 - 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-node: 1.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - why-is-node-running: 2.2.2 - optionalDependencies: - '@types/node': 20.12.7 - jsdom: 22.1.0 - transitivePeerDependencies: - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - 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.2(@types/node@20.12.7)(jsdom@16.7.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@16.7.0)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): dependencies: - '@vitest/expect': 2.1.2 - '@vitest/mocker': 2.1.2(@vitest/spy@2.1.2)(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)) - '@vitest/pretty-format': 2.1.2 - '@vitest/runner': 2.1.2 - '@vitest/snapshot': 2.1.2 - '@vitest/spy': 2.1.2 - '@vitest/utils': 2.1.2 + '@vitest/expect': 2.1.3 + '@vitest/mocker': 2.1.3(@vitest/spy@2.1.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)) + '@vitest/pretty-format': 2.1.3 + '@vitest/runner': 2.1.3 + '@vitest/snapshot': 2.1.3 + '@vitest/spy': 2.1.3 + '@vitest/utils': 2.1.3 chai: 5.1.1 debug: 4.3.7 magic-string: 0.30.11 @@ -40138,7 +39624,7 @@ snapshots: tinypool: 1.0.1 tinyrainbow: 1.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-node: 2.1.2(@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) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.12.7 @@ -40155,15 +39641,15 @@ snapshots: - terser optional: true - vitest@2.1.2(@types/node@20.12.7)(jsdom@21.1.2)(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@21.1.2)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): dependencies: - '@vitest/expect': 2.1.2 - '@vitest/mocker': 2.1.2(@vitest/spy@2.1.2)(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)) - '@vitest/pretty-format': 2.1.2 - '@vitest/runner': 2.1.2 - '@vitest/snapshot': 2.1.2 - '@vitest/spy': 2.1.2 - '@vitest/utils': 2.1.2 + '@vitest/expect': 2.1.3 + '@vitest/mocker': 2.1.3(@vitest/spy@2.1.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)) + '@vitest/pretty-format': 2.1.3 + '@vitest/runner': 2.1.3 + '@vitest/snapshot': 2.1.3 + '@vitest/spy': 2.1.3 + '@vitest/utils': 2.1.3 chai: 5.1.1 debug: 4.3.7 magic-string: 0.30.11 @@ -40174,7 +39660,7 @@ snapshots: tinypool: 1.0.1 tinyrainbow: 1.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-node: 2.1.2(@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) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.12.7 @@ -40190,15 +39676,15 @@ snapshots: - supports-color - terser - vitest@2.1.2(@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.24.1)(sass@1.75.0)(terser@5.30.3): dependencies: - '@vitest/expect': 2.1.2 - '@vitest/mocker': 2.1.2(@vitest/spy@2.1.2)(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)) - '@vitest/pretty-format': 2.1.2 - '@vitest/runner': 2.1.2 - '@vitest/snapshot': 2.1.2 - '@vitest/spy': 2.1.2 - '@vitest/utils': 2.1.2 + '@vitest/expect': 2.1.3 + '@vitest/mocker': 2.1.3(@vitest/spy@2.1.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)) + '@vitest/pretty-format': 2.1.3 + '@vitest/runner': 2.1.3 + '@vitest/snapshot': 2.1.3 + '@vitest/spy': 2.1.3 + '@vitest/utils': 2.1.3 chai: 5.1.1 debug: 4.3.7 magic-string: 0.30.11 @@ -40209,7 +39695,7 @@ snapshots: tinypool: 1.0.1 tinyrainbow: 1.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-node: 2.1.2(@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) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.12.7 @@ -40232,12 +39718,12 @@ snapshots: de-indent: 1.0.2 he: 1.2.0 - vue-tsc@1.8.27(typescript@5.4.2): + vue-tsc@1.8.27(typescript@5.6.3): dependencies: '@volar/typescript': 1.11.1 - '@vue/language-core': 1.8.27(typescript@5.4.2) + '@vue/language-core': 1.8.27(typescript@5.6.3) semver: 7.6.0 - typescript: 5.4.2 + typescript: 5.6.3 w3c-hr-time@1.0.2: dependencies: @@ -40621,11 +40107,6 @@ snapshots: dependencies: isexe: 2.0.0 - why-is-node-running@2.2.2: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 From 9a47ba6cd72e9c4dc12655f875d42db6be8b92e5 Mon Sep 17 00:00:00 2001 From: Piero Nicolli Date: Tue, 15 Oct 2024 21:56:03 +0200 Subject: [PATCH 06/50] Upgraded nextjs deps and configuration (#6388) --- apps/nextjs/.eslintrc.js | 10 - apps/nextjs/.eslintrc.json | 9 + apps/nextjs/.gitignore | 1 + apps/nextjs/LICENSE | 2 +- .../{next.config.js => next.config.mjs} | 4 +- apps/nextjs/package.json | 11 +- apps/nextjs/src/app/Providers.tsx | 2 +- apps/nextjs/src/app/content.tsx | 2 +- apps/nextjs/src/middleware.ts | 3 - apps/nextjs/tsconfig.json | 66 ++--- pnpm-lock.yaml | 276 +++++++----------- 11 files changed, 155 insertions(+), 231 deletions(-) delete mode 100644 apps/nextjs/.eslintrc.js create mode 100644 apps/nextjs/.eslintrc.json rename apps/nextjs/{next.config.js => next.config.mjs} (95%) diff --git a/apps/nextjs/.eslintrc.js b/apps/nextjs/.eslintrc.js deleted file mode 100644 index d0e37670c7..0000000000 --- a/apps/nextjs/.eslintrc.js +++ /dev/null @@ -1,10 +0,0 @@ -/** @type {import('eslint').Linter.Config} */ -module.exports = { - extends: 'next/core-web-vitals', - ignorePatterns: ['.next/**', 'dist/**', 'node_modules/**'], - settings: { - next: { - rootDir: 'apps/nextjs/', - }, - }, -}; diff --git a/apps/nextjs/.eslintrc.json b/apps/nextjs/.eslintrc.json new file mode 100644 index 0000000000..035e32e888 --- /dev/null +++ b/apps/nextjs/.eslintrc.json @@ -0,0 +1,9 @@ +{ + "extends": ["next/core-web-vitals", "next/typescript"], + "ignorePatterns": [".next/**", "dist/**", "node_modules/**"], + "settings": { + "next": { + "rootDir": "apps/nextjs/" + } + } +} diff --git a/apps/nextjs/.gitignore b/apps/nextjs/.gitignore index e5671ba458..29b159ef05 100644 --- a/apps/nextjs/.gitignore +++ b/apps/nextjs/.gitignore @@ -4,6 +4,7 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz # testing /coverage diff --git a/apps/nextjs/LICENSE b/apps/nextjs/LICENSE index c0af2b1b65..f6a5160bd5 100644 --- a/apps/nextjs/LICENSE +++ b/apps/nextjs/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Plone Foundation +Copyright (c) 2024 Plone Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/apps/nextjs/next.config.js b/apps/nextjs/next.config.mjs similarity index 95% rename from apps/nextjs/next.config.js rename to apps/nextjs/next.config.mjs index ae8d5d1813..9891677772 100644 --- a/apps/nextjs/next.config.js +++ b/apps/nextjs/next.config.mjs @@ -1,4 +1,4 @@ -const path = require('path'); +import path from 'path'; /** @type {import('next').NextConfig} */ const nextConfig = { @@ -46,4 +46,4 @@ const nextConfig = { }, }; -module.exports = nextConfig; +export default nextConfig; diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index baa7567b02..8b935ff8bb 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -13,21 +13,22 @@ "@plone/blocks": "workspace: *", "@plone/client": "workspace: *", "@plone/components": "workspace: *", - "@plone/registry": "workspace: *", "@plone/providers": "workspace: *", - "@tanstack/react-query": "^5.37.1", - "next": "14.2.2", + "@plone/registry": "workspace: *", + "@tanstack/react-query": "^5.59.0", + "next": "14.2.14", "react": "^18", "react-aria-components": "^1.4.0", "react-dom": "^18" }, "devDependencies": { - "@tanstack/react-query-devtools": "^5.37.1", + "@plone/types": "workspace: *", + "@tanstack/react-query-devtools": "^5.59.0", "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", "eslint": "^8", - "eslint-config-next": "14.2.2", + "eslint-config-next": "14.2.14", "typescript": "^5.6.3" } } diff --git a/apps/nextjs/src/app/Providers.tsx b/apps/nextjs/src/app/Providers.tsx index 27b47036f6..16b7255887 100644 --- a/apps/nextjs/src/app/Providers.tsx +++ b/apps/nextjs/src/app/Providers.tsx @@ -36,7 +36,7 @@ const Providers: React.FC<{ }), ); - let router = useRouter(); + const router = useRouter(); return ( diff --git a/apps/nextjs/src/app/content.tsx b/apps/nextjs/src/app/content.tsx index 92e757e7da..fc16cb72e0 100644 --- a/apps/nextjs/src/app/content.tsx +++ b/apps/nextjs/src/app/content.tsx @@ -11,7 +11,7 @@ import '@plone/components/dist/basic.css'; export default function Content() { const { getContentQuery } = usePloneClient(); const pathname = usePathname(); - const { data, isLoading } = useQuery(getContentQuery({ path: pathname })); + const { data } = useQuery(getContentQuery({ path: pathname })); if (data) { return ( diff --git a/apps/nextjs/src/middleware.ts b/apps/nextjs/src/middleware.ts index 59c2d7b5d4..736d67530c 100644 --- a/apps/nextjs/src/middleware.ts +++ b/apps/nextjs/src/middleware.ts @@ -2,10 +2,7 @@ import { NextResponse } from 'next/server'; import type { NextRequest } from 'next/server'; export function middleware(request: NextRequest) { - // Clone the request headers and set a new header `x-hello-from-middleware1` const requestHeaders = new Headers(request.headers); - // console.log(request.nextUrl.pathname); - // requestHeaders.set('x-hello-from-middleware1', 'hello'); // You can also set request headers in NextResponse.rewrite const response = NextResponse.next({ diff --git a/apps/nextjs/tsconfig.json b/apps/nextjs/tsconfig.json index 33bcb0c4f4..4b7888fa43 100644 --- a/apps/nextjs/tsconfig.json +++ b/apps/nextjs/tsconfig.json @@ -1,38 +1,34 @@ { - "compilerOptions": { - "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ] - }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx", - "**/*.js", - "**/*.jx", - ".next/types/**/*.ts" + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } ], - "exclude": [ - "node_modules", - ] + "paths": { + "@/*": ["./src/*"] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + "**/*.js", + "**/*.jsx", + ".next/types/**/*.ts" + ], + "exclude": ["node_modules"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c18828117c..8bf924a8bd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,11 +55,11 @@ importers: specifier: 'workspace: *' version: link:../../packages/registry '@tanstack/react-query': - specifier: ^5.37.1 - version: 5.37.1(react@18.2.0) + specifier: ^5.59.0 + version: 5.59.14(react@18.2.0) next: - specifier: 14.2.2 - version: 14.2.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.75.0) + specifier: 14.2.14 + version: 14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.75.0) react: specifier: ^18 version: 18.2.0 @@ -70,9 +70,12 @@ importers: specifier: ^18 version: 18.2.0(react@18.2.0) devDependencies: + '@plone/types': + specifier: 'workspace: *' + version: link:../../packages/types '@tanstack/react-query-devtools': - specifier: ^5.37.1 - version: 5.37.1(@tanstack/react-query@5.37.1(react@18.2.0))(react@18.2.0) + specifier: ^5.59.0 + version: 5.59.8(@tanstack/react-query@5.59.14(react@18.2.0))(react@18.2.0) '@types/node': specifier: ^20 version: 20.12.7 @@ -86,8 +89,8 @@ importers: specifier: ^8 version: 8.57.0 eslint-config-next: - specifier: 14.2.2 - version: 14.2.2(eslint@8.57.0)(typescript@5.6.3) + specifier: 14.2.14 + version: 14.2.14(eslint@8.57.0)(typescript@5.6.3) typescript: specifier: ^5.6.3 version: 5.6.3 @@ -4443,62 +4446,62 @@ packages: resolution: {integrity: sha512-HUNETLNvNiC2J+SB/YuRwJA9+agPrc0azSoWVk8H85GC+YE114hcS5JW+dstpKwVerp2xILE3vNWN7IMXP5Q5Q==} engines: {node: ^14.18.0 || >=16.0.0} - '@next/env@14.2.2': - resolution: {integrity: sha512-sk72qRfM1Q90XZWYRoJKu/UWlTgihrASiYw/scb15u+tyzcze3bOuJ/UV6TBOQEeUaxOkRqGeuGUdiiuxc5oqw==} + '@next/env@14.2.14': + resolution: {integrity: sha512-/0hWQfiaD5//LvGNgc8PjvyqV50vGK0cADYzaoOOGN8fxzBn3iAiaq3S0tCRnFBldq0LVveLcxCTi41ZoYgAgg==} - '@next/eslint-plugin-next@14.2.2': - resolution: {integrity: sha512-q+Ec2648JtBpKiu/FSJm8HAsFXlNvioHeBCbTP12T1SGcHYwhqHULSfQgFkPgHDu3kzNp2Kem4J54bK4rPQ5SQ==} + '@next/eslint-plugin-next@14.2.14': + resolution: {integrity: sha512-kV+OsZ56xhj0rnTn6HegyTGkoa16Mxjrpk7pjWumyB2P8JVQb8S9qtkjy/ye0GnTr4JWtWG4x/2qN40lKZ3iVQ==} - '@next/swc-darwin-arm64@14.2.2': - resolution: {integrity: sha512-3iPgMhzbalizGwHNFUcGnDhFPSgVBHQ8aqSTAMxB5BvJG0oYrDf1WOJZlbXBgunOEj/8KMVbejEur/FpvFsgFQ==} + '@next/swc-darwin-arm64@14.2.14': + resolution: {integrity: sha512-bsxbSAUodM1cjYeA4o6y7sp9wslvwjSkWw57t8DtC8Zig8aG8V6r+Yc05/9mDzLKcybb6EN85k1rJDnMKBd9Gw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@14.2.2': - resolution: {integrity: sha512-x7Afi/jt0ZBRUZHTi49yyej4o8znfIMHO4RvThuoc0P+uli8Jd99y5GKjxoYunPKsXL09xBXEM1+OQy2xEL0Ag==} + '@next/swc-darwin-x64@14.2.14': + resolution: {integrity: sha512-cC9/I+0+SK5L1k9J8CInahduTVWGMXhQoXFeNvF0uNs3Bt1Ub0Azb8JzTU9vNCr0hnaMqiWu/Z0S1hfKc3+dww==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@14.2.2': - resolution: {integrity: sha512-zbfPtkk7L41ODMJwSp5VbmPozPmMMQrzAc0HAUomVeVIIwlDGs/UCqLJvLNDt4jpWgc21SjjyIn762lNGrMaUA==} + '@next/swc-linux-arm64-gnu@14.2.14': + resolution: {integrity: sha512-RMLOdA2NU4O7w1PQ3Z9ft3PxD6Htl4uB2TJpocm+4jcllHySPkFaUIFacQ3Jekcg6w+LBaFvjSPthZHiPmiAUg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@14.2.2': - resolution: {integrity: sha512-wPbS3pI/JU16rm3XdLvvTmlsmm1nd+sBa2ohXgBZcShX4TgOjD4R+RqHKlI1cjo/jDZKXt6OxmcU0Iys0OC/yg==} + '@next/swc-linux-arm64-musl@14.2.14': + resolution: {integrity: sha512-WgLOA4hT9EIP7jhlkPnvz49iSOMdZgDJVvbpb8WWzJv5wBD07M2wdJXLkDYIpZmCFfo/wPqFsFR4JS4V9KkQ2A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@14.2.2': - resolution: {integrity: sha512-NqWOHqqq8iC9tuHvZxjQ2tX+jWy2X9y8NX2mcB4sj2bIccuCxbIZrU/ThFPZZPauygajZuVQ6zediejQHwZHwQ==} + '@next/swc-linux-x64-gnu@14.2.14': + resolution: {integrity: sha512-lbn7svjUps1kmCettV/R9oAvEW+eUI0lo0LJNFOXoQM5NGNxloAyFRNByYeZKL3+1bF5YE0h0irIJfzXBq9Y6w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@14.2.2': - resolution: {integrity: sha512-lGepHhwb9sGhCcU7999+iK1ZZT+6rrIoVg40MP7DZski9GIZP80wORSbt5kJzh9v2x2ev2lxC6VgwMQT0PcgTA==} + '@next/swc-linux-x64-musl@14.2.14': + resolution: {integrity: sha512-7TcQCvLQ/hKfQRgjxMN4TZ2BRB0P7HwrGAYL+p+m3u3XcKTraUFerVbV3jkNZNwDeQDa8zdxkKkw2els/S5onQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@14.2.2': - resolution: {integrity: sha512-TZSh/48SfcLEQ4rD25VVn2kdIgUWmMflRX3OiyPwGNXn3NiyPqhqei/BaqCYXViIQ+6QsG9R0C8LftMqy8JPMA==} + '@next/swc-win32-arm64-msvc@14.2.14': + resolution: {integrity: sha512-8i0Ou5XjTLEje0oj0JiI0Xo9L/93ghFtAUYZ24jARSeTMXLUx8yFIdhS55mTExq5Tj4/dC2fJuaT4e3ySvXU1A==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-ia32-msvc@14.2.2': - resolution: {integrity: sha512-M0tBVNMEBJN2ZNQWlcekMn6pvLria7Sa2Fai5znm7CCJz4pP3lrvlSxhKdkCerk0D9E0bqx5yAo3o2Q7RrD4gA==} + '@next/swc-win32-ia32-msvc@14.2.14': + resolution: {integrity: sha512-2u2XcSaDEOj+96eXpyjHjtVPLhkAFw2nlaz83EPeuK4obF+HmtDJHqgR1dZB7Gb6V/d55FL26/lYVd0TwMgcOQ==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@next/swc-win32-x64-msvc@14.2.2': - resolution: {integrity: sha512-a/20E/wtTJZ3Ykv3f/8F0l7TtgQa2LWHU2oNB9bsu0VjqGuGGHmm/q6waoUNQYTVPYrrlxxaHjJcDV6aiSTt/w==} + '@next/swc-win32-x64-msvc@14.2.14': + resolution: {integrity: sha512-MZom+OvZ1NZxuRovKt1ApevjiUJTcU2PmdJKL66xUPaJeRywnbGGRWUlaAOwunD6dX+pm83vj979NTC8QXjGWg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -6651,9 +6654,15 @@ packages: '@tanstack/query-core@5.36.1': resolution: {integrity: sha512-BteWYEPUcucEu3NBcDAgKuI4U25R9aPrHSP6YSf2NvaD2pSlIQTdqOfLRsxH9WdRYg7k0Uom35Uacb6nvbIMJg==} + '@tanstack/query-core@5.59.13': + resolution: {integrity: sha512-Oou0bBu/P8+oYjXsJQ11j+gcpLAMpqW42UlokQYEz4dE7+hOtVO9rVuolJKgEccqzvyFzqX4/zZWY+R/v1wVsQ==} + '@tanstack/query-devtools@5.37.1': resolution: {integrity: sha512-XcG4IIHIv0YQKrexTqo2zogQWR1Sz672tX2KsfE9kzB+9zhx44vRKH5si4WDILE1PIWQpStFs/NnrDQrBAUQpg==} + '@tanstack/query-devtools@5.58.0': + resolution: {integrity: sha512-iFdQEFXaYYxqgrv63ots+65FGI+tNp5ZS5PdMU1DWisxk3fez5HG3FyVlbUva+RdYS5hSLbxZ9aw3yEs97GNTw==} + '@tanstack/react-cross-context@1.26.10': resolution: {integrity: sha512-zZVwoaYlbffB6yyThBgoy/i+G8vScl5mvuhTaN34Pj1WXvnsIv3GyZIHS8RBvRd8geoOs7WucpYtU1pXQrTwdA==} peerDependencies: @@ -6666,11 +6675,22 @@ packages: '@tanstack/react-query': ^5.37.1 react: ^18.0.0 + '@tanstack/react-query-devtools@5.59.8': + resolution: {integrity: sha512-zcuPadRnbGcOz5YIPDbX2Tbpf0cFsoSACYdQzhRv7R2tyJxFby3u9bn4y1TaYTWSEolH8PlCklznEkS7F2OqFQ==} + peerDependencies: + '@tanstack/react-query': ^5.59.8 + react: ^18 || ^19 + '@tanstack/react-query@5.37.1': resolution: {integrity: sha512-EhtBNA8GL3XFeSx6VYUjXQ96n44xe3JGKZCzBINrCYlxbZP6UwBafv7ti4eSRWc2Fy+fybQre0w17gR6lMzULA==} peerDependencies: react: ^18.0.0 + '@tanstack/react-query@5.59.14': + resolution: {integrity: sha512-2cM4x3Ka4Thl7/wnjf++EMGA2Is/RgPynn83D4kfGiJOGSjb5T2D3EEOlC8Nt6U2htLS3imOXjOSMEjC3K7JNg==} + peerDependencies: + react: ^18 || ^19 + '@tanstack/react-router-server@1.29.2': resolution: {integrity: sha512-wDLWvGsKir15jePWZrjmay7pRF78pjZ1jgXy6poVstG8LSFg3gF+j1WXZuqkp/cI7TA3qaVO5RMmx32OM7CTNw==} engines: {node: '>=12'} @@ -7243,16 +7263,6 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.1.1': - resolution: {integrity: sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/parser@7.7.0': resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==} engines: {node: ^18.18.0 || >=20.0.0} @@ -7267,10 +7277,6 @@ packages: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/scope-manager@7.1.1': - resolution: {integrity: sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/scope-manager@7.7.0': resolution: {integrity: sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -7299,10 +7305,6 @@ packages: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/types@7.1.1': - resolution: {integrity: sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/types@7.7.0': resolution: {integrity: sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==} engines: {node: ^18.18.0 || >=20.0.0} @@ -7316,15 +7318,6 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.1.1': - resolution: {integrity: sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/typescript-estree@7.7.0': resolution: {integrity: sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==} engines: {node: ^18.18.0 || >=20.0.0} @@ -7350,10 +7343,6 @@ packages: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/visitor-keys@7.1.1': - resolution: {integrity: sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/visitor-keys@7.7.0': resolution: {integrity: sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -10068,8 +10057,8 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-config-next@14.2.2: - resolution: {integrity: sha512-12/uFc0KX+wUs7EDpOUGKMXBXZJiBVGdK5/m/QgXOCg2mQ0bQWoKSWNrCeOg7Vum6Kw1d1TW453W6xh+GbHquw==} + eslint-config-next@14.2.14: + resolution: {integrity: sha512-TXwyjGICAlWC9O0OufS3koTsBKQH8l1xt3SY/aDuvtKHIwjTHplJKWVb1WOEX0OsDaxGbFXmfD2EY1sNfG0Y/w==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -13525,10 +13514,6 @@ packages: resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} engines: {node: '>=10'} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} @@ -13728,8 +13713,8 @@ packages: next-tick@1.1.0: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - next@14.2.2: - resolution: {integrity: sha512-oGwUaa2bCs47FbuxWMpOoXtBMPYpvTPgdZr3UAo+pu7Ns00z9otmYpoeV1HEiYL06AlRQQIA/ypK526KjJfaxg==} + next@14.2.14: + resolution: {integrity: sha512-Q1coZG17MW0Ly5x76shJ4dkC23woLAhhnDnw+DfTc7EpZSGuWrlsZ3bZaO8t6u1Yu8FVfhkqJE+U8GC7E0GLPQ==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -20490,37 +20475,37 @@ snapshots: '@netlify/node-cookies': 0.1.0 urlpattern-polyfill: 8.0.2 - '@next/env@14.2.2': {} + '@next/env@14.2.14': {} - '@next/eslint-plugin-next@14.2.2': + '@next/eslint-plugin-next@14.2.14': dependencies: glob: 10.3.10 - '@next/swc-darwin-arm64@14.2.2': + '@next/swc-darwin-arm64@14.2.14': optional: true - '@next/swc-darwin-x64@14.2.2': + '@next/swc-darwin-x64@14.2.14': optional: true - '@next/swc-linux-arm64-gnu@14.2.2': + '@next/swc-linux-arm64-gnu@14.2.14': optional: true - '@next/swc-linux-arm64-musl@14.2.2': + '@next/swc-linux-arm64-musl@14.2.14': optional: true - '@next/swc-linux-x64-gnu@14.2.2': + '@next/swc-linux-x64-gnu@14.2.14': optional: true - '@next/swc-linux-x64-musl@14.2.2': + '@next/swc-linux-x64-musl@14.2.14': optional: true - '@next/swc-win32-arm64-msvc@14.2.2': + '@next/swc-win32-arm64-msvc@14.2.14': optional: true - '@next/swc-win32-ia32-msvc@14.2.2': + '@next/swc-win32-ia32-msvc@14.2.14': optional: true - '@next/swc-win32-x64-msvc@14.2.2': + '@next/swc-win32-x64-msvc@14.2.14': optional: true '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': @@ -24416,8 +24401,12 @@ snapshots: '@tanstack/query-core@5.36.1': {} + '@tanstack/query-core@5.59.13': {} + '@tanstack/query-devtools@5.37.1': {} + '@tanstack/query-devtools@5.58.0': {} + '@tanstack/react-cross-context@1.26.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: react: 18.2.0 @@ -24429,11 +24418,22 @@ snapshots: '@tanstack/react-query': 5.37.1(react@18.2.0) react: 18.2.0 + '@tanstack/react-query-devtools@5.59.8(@tanstack/react-query@5.59.14(react@18.2.0))(react@18.2.0)': + dependencies: + '@tanstack/query-devtools': 5.58.0 + '@tanstack/react-query': 5.59.14(react@18.2.0) + react: 18.2.0 + '@tanstack/react-query@5.37.1(react@18.2.0)': dependencies: '@tanstack/query-core': 5.36.1 react: 18.2.0 + '@tanstack/react-query@5.59.14(react@18.2.0)': + dependencies: + '@tanstack/query-core': 5.59.13 + react: 18.2.0 + '@tanstack/react-router-server@1.29.2(@testing-library/jest-dom@6.4.2(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)))(@types/node@20.12.7)(encoding@0.1.13)(less@3.11.1)(lightningcss@1.24.1)(preact@10.20.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.14.3)(sass@1.75.0)(terser@5.30.3)': dependencies: '@tanstack/react-cross-context': 1.26.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -25192,19 +25192,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3)': - dependencies: - '@typescript-eslint/scope-manager': 7.1.1 - '@typescript-eslint/types': 7.1.1 - '@typescript-eslint/typescript-estree': 7.1.1(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 7.1.1 - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.57.0 - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 7.7.0 @@ -25223,11 +25210,6 @@ snapshots: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - '@typescript-eslint/scope-manager@7.1.1': - dependencies: - '@typescript-eslint/types': 7.1.1 - '@typescript-eslint/visitor-keys': 7.1.1 - '@typescript-eslint/scope-manager@7.7.0': dependencies: '@typescript-eslint/types': 7.7.0 @@ -25271,8 +25253,6 @@ snapshots: '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/types@7.1.1': {} - '@typescript-eslint/types@7.7.0': {} '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.3)': @@ -25289,21 +25269,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.1.1(typescript@5.6.3)': - dependencies: - '@typescript-eslint/types': 7.1.1 - '@typescript-eslint/visitor-keys': 7.1.1 - debug: 4.3.4(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@7.7.0(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 7.7.0 @@ -25368,11 +25333,6 @@ snapshots: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.1.1': - dependencies: - '@typescript-eslint/types': 7.1.1 - eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.7.0': dependencies: '@typescript-eslint/types': 7.7.0 @@ -28970,15 +28930,16 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-next@14.2.2(eslint@8.57.0)(typescript@5.6.3): + eslint-config-next@14.2.14(eslint@8.57.0)(typescript@5.6.3): dependencies: - '@next/eslint-plugin-next': 14.2.2 + '@next/eslint-plugin-next': 14.2.14 '@rushstack/eslint-patch': 1.10.2 - '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3) + '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) @@ -29079,13 +29040,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.16.0 eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.3 is-core-module: 2.13.1 @@ -29134,14 +29095,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.6.3) + '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.6.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color @@ -29253,33 +29214,6 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7(supports-color@8.1.1) - doctrine: 2.1.0 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) - hasown: 2.0.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.6.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): dependencies: array-includes: 3.1.8 @@ -33891,10 +33825,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.4: dependencies: brace-expansion: 2.0.1 @@ -34142,9 +34072,9 @@ snapshots: next-tick@1.1.0: {} - next@14.2.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.75.0): + next@14.2.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.75.0): dependencies: - '@next/env': 14.2.2 + '@next/env': 14.2.14 '@swc/helpers': 0.5.5 busboy: 1.6.0 caniuse-lite: 1.0.30001611 @@ -34154,15 +34084,15 @@ snapshots: react-dom: 18.2.0(react@18.2.0) styled-jsx: 5.1.1(react@18.2.0) optionalDependencies: - '@next/swc-darwin-arm64': 14.2.2 - '@next/swc-darwin-x64': 14.2.2 - '@next/swc-linux-arm64-gnu': 14.2.2 - '@next/swc-linux-arm64-musl': 14.2.2 - '@next/swc-linux-x64-gnu': 14.2.2 - '@next/swc-linux-x64-musl': 14.2.2 - '@next/swc-win32-arm64-msvc': 14.2.2 - '@next/swc-win32-ia32-msvc': 14.2.2 - '@next/swc-win32-x64-msvc': 14.2.2 + '@next/swc-darwin-arm64': 14.2.14 + '@next/swc-darwin-x64': 14.2.14 + '@next/swc-linux-arm64-gnu': 14.2.14 + '@next/swc-linux-arm64-musl': 14.2.14 + '@next/swc-linux-x64-gnu': 14.2.14 + '@next/swc-linux-x64-musl': 14.2.14 + '@next/swc-win32-arm64-msvc': 14.2.14 + '@next/swc-win32-ia32-msvc': 14.2.14 + '@next/swc-win32-x64-msvc': 14.2.14 sass: 1.75.0 transitivePeerDependencies: - '@babel/core' From 85a1555bfee3a33422a1d203f3f5438b5d8b9c26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Tue, 15 Oct 2024 22:23:19 +0200 Subject: [PATCH 07/50] Update caniuse Oct24 (#6408) --- packages/volto/news/6408.internal | 1 + pnpm-lock.yaml | 90 ++++++++++++++++++++++--------- 2 files changed, 66 insertions(+), 25 deletions(-) create mode 100644 packages/volto/news/6408.internal diff --git a/packages/volto/news/6408.internal b/packages/volto/news/6408.internal new file mode 100644 index 0000000000..49ce0fb0f8 --- /dev/null +++ b/packages/volto/news/6408.internal @@ -0,0 +1 @@ +Update `caniuse` Oct24 @sneridagh diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8bf924a8bd..ac6ca30d57 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8336,6 +8336,10 @@ packages: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + brcast@2.0.2: resolution: {integrity: sha512-Tfn5JSE7hrUlFcOoaLzVvkbgIemIorMIyoMr3TgvszWW7jFt2C9PdeMLtysYD9RU0MmU17b69+XJG1eRY2OBRg==} @@ -10573,6 +10577,10 @@ packages: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + filter-obj@1.1.0: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} engines: {node: '>=0.10.0'} @@ -13416,6 +13424,10 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} hasBin: true @@ -13548,6 +13560,9 @@ packages: minipass-json-stream@1.0.1: resolution: {integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==} + minipass-json-stream@1.0.2: + resolution: {integrity: sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==} + minipass-pipeline@1.2.4: resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} engines: {node: '>=8'} @@ -14763,8 +14778,8 @@ packages: preact@10.20.2: resolution: {integrity: sha512-S1d1ernz3KQ+Y2awUxKakpfOg2CEmJmwOP+6igPx6dgr6pgDvenqYviyokWso2rhHvGtTlWWnJDa7RaPbQerTg==} - preferred-pm@3.1.3: - resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} + preferred-pm@3.1.4: + resolution: {integrity: sha512-lEHd+yEm22jXdCphDrkvIJQU66EuLojPPtvZkpKIkiD+l0DMThF/niqZKJSoU8Vl7iuvtmzyMhir9LdVy5WMnA==} engines: {node: '>=10'} prelude-ls@1.2.1: @@ -16060,6 +16075,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -18153,8 +18173,8 @@ packages: which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} + which-pm@2.2.0: + resolution: {integrity: sha512-MOiaDbA5ZZgUjkeMWM5EkJp4loW5ZRoa5bc3/aeMox/PJelMhE6t7S/mLuiY43DBupyxH+S0U1bTui9kWUlmsw==} engines: {node: '>=8.15'} which-typed-array@1.1.15: @@ -20554,7 +20574,7 @@ snapshots: read-package-json-fast: 2.0.3 readdir-scoped-modules: 1.1.0 rimraf: 3.0.2 - semver: 7.6.0 + semver: 7.6.3 ssri: 8.0.1 treeverse: 1.0.4 walk-up-path: 1.0.0 @@ -20584,7 +20604,7 @@ snapshots: npm-pick-manifest: 6.1.1 promise-inflight: 1.0.1(bluebird@3.7.2) promise-retry: 2.0.1 - semver: 7.6.0 + semver: 7.6.3 which: 2.0.2 transitivePeerDependencies: - bluebird @@ -20624,7 +20644,7 @@ snapshots: cacache: 15.3.0 json-parse-even-better-errors: 2.3.1 pacote: 12.0.3 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - bluebird - supports-color @@ -25067,7 +25087,7 @@ snapshots: '@types/vinyl@2.0.12': dependencies: '@types/expect': 1.20.4 - '@types/node': 20.12.7 + '@types/node': 15.14.9 '@types/webpack-env@1.18.4': {} @@ -26805,6 +26825,10 @@ snapshots: dependencies: fill-range: 7.0.1 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + brcast@2.0.2: {} brorand@1.1.0: {} @@ -29942,6 +29966,10 @@ snapshots: dependencies: to-regex-range: 5.0.1 + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + filter-obj@1.1.0: {} filter-obj@5.1.0: {} @@ -30000,7 +30028,7 @@ snapshots: find-yarn-workspace-root2@1.2.16: dependencies: - micromatch: 4.0.5 + micromatch: 4.0.8 pkg-dir: 4.2.0 first-chunk-stream@2.0.0: @@ -33752,6 +33780,11 @@ snapshots: braces: 3.0.2 picomatch: 2.3.1 + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + miller-rabin@4.0.1: dependencies: bn.js: 4.12.0 @@ -33874,6 +33907,11 @@ snapshots: jsonparse: 1.3.1 minipass: 3.3.6 + minipass-json-stream@1.0.2: + dependencies: + jsonparse: 1.3.1 + minipass: 3.3.6 + minipass-pipeline@1.2.4: dependencies: minipass: 3.3.6 @@ -34242,13 +34280,13 @@ snapshots: node-gyp@8.4.1: dependencies: env-paths: 2.2.1 - glob: 7.1.6 + glob: 7.2.3 graceful-fs: 4.2.11 make-fetch-happen: 9.1.0 nopt: 5.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.6.0 + semver: 7.6.3 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -34372,7 +34410,7 @@ snapshots: npm-install-checks@4.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.3 npm-install-checks@6.3.0: dependencies: @@ -34394,12 +34432,12 @@ snapshots: npm-package-arg@8.1.5: dependencies: hosted-git-info: 4.1.0 - semver: 7.6.0 + semver: 7.6.3 validate-npm-package-name: 3.0.0 npm-packlist@3.0.0: dependencies: - glob: 7.1.6 + glob: 7.2.3 ignore-walk: 4.0.1 npm-bundled: 1.1.2 npm-normalize-package-bin: 1.0.1 @@ -34413,7 +34451,7 @@ snapshots: npm-install-checks: 4.0.0 npm-normalize-package-bin: 1.0.1 npm-package-arg: 8.1.5 - semver: 7.6.0 + semver: 7.6.3 npm-pick-manifest@8.0.2: dependencies: @@ -34427,7 +34465,7 @@ snapshots: make-fetch-happen: 10.2.1 minipass: 3.3.6 minipass-fetch: 1.4.1 - minipass-json-stream: 1.0.1 + minipass-json-stream: 1.0.2 minizlib: 2.1.2 npm-package-arg: 8.1.5 transitivePeerDependencies: @@ -34776,7 +34814,7 @@ snapshots: p-transform@1.3.0: dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7 p-queue: 6.6.2 transitivePeerDependencies: - supports-color @@ -35476,12 +35514,12 @@ snapshots: preact@10.20.2: {} - preferred-pm@3.1.3: + preferred-pm@3.1.4: dependencies: find-up: 5.0.0 find-yarn-workspace-root2: 1.2.16 path-exists: 4.0.0 - which-pm: 2.0.0 + which-pm: 2.2.0 prelude-ls@1.2.1: {} @@ -37339,6 +37377,8 @@ snapshots: dependencies: lru-cache: 6.0.0 + semver@7.6.3: {} + send@0.18.0: dependencies: debug: 2.6.9 @@ -37637,7 +37677,7 @@ snapshots: socks-proxy-agent@6.2.1: dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7 socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -40012,7 +40052,7 @@ snapshots: which-module@2.0.1: {} - which-pm@2.0.0: + which-pm@2.2.0: dependencies: load-yaml-file: 0.2.0 path-exists: 4.0.0 @@ -40205,7 +40245,7 @@ snapshots: cli-table: 0.3.11 commander: 7.1.0 dateformat: 4.6.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7 diff: 5.2.0 error: 10.4.0 escape-string-regexp: 4.0.0 @@ -40225,10 +40265,10 @@ snapshots: p-queue: 6.6.2 p-transform: 1.3.0 pacote: 12.0.3 - preferred-pm: 3.1.3 - pretty-bytes: 5.3.0 + preferred-pm: 3.1.4 + pretty-bytes: 5.6.0 readable-stream: 4.5.2 - semver: 7.6.0 + semver: 7.6.3 slash: 3.0.0 strip-ansi: 6.0.1 text-table: 0.2.0 From 2046e91afeba68d97720baf6d9ea19d55c077089 Mon Sep 17 00:00:00 2001 From: Eric BREHAULT Date: Tue, 15 Oct 2024 23:51:44 +0200 Subject: [PATCH 08/50] support depth in getNavigationQuery (#6400) Co-authored-by: Victor Fernandez de Alba --- packages/client/news/6400.feature | 1 + .../client/src/restapi/content/add.test.tsx | 35 ++++++++++ .../src/restapi/navigation/get.test.tsx | 67 ++++++++++++++++++- packages/client/src/restapi/navigation/get.ts | 16 ++++- 4 files changed, 115 insertions(+), 4 deletions(-) create mode 100644 packages/client/news/6400.feature diff --git a/packages/client/news/6400.feature b/packages/client/news/6400.feature new file mode 100644 index 0000000000..c28403c93a --- /dev/null +++ b/packages/client/news/6400.feature @@ -0,0 +1 @@ +Add support for the `depth` parameter on `getNavigationQuery`. @ebrehault \ No newline at end of file diff --git a/packages/client/src/restapi/content/add.test.tsx b/packages/client/src/restapi/content/add.test.tsx index f62c221efe..4d65805d6c 100644 --- a/packages/client/src/restapi/content/add.test.tsx +++ b/packages/client/src/restapi/content/add.test.tsx @@ -6,6 +6,7 @@ import { beforeEach } from 'vitest'; import { expect, test } from 'vitest'; import PloneClient from '../../client'; import { CreateContentArgs } from './add'; +import { createContent } from '../content/add'; const cli = PloneClient.initialize({ apiPath: 'http://localhost:55001/plone', @@ -46,6 +47,40 @@ describe('[POST] Content', () => { expect(result.current.data?.title).toBe('My Page'); }); + test('Hook - create content in path', async () => { + const myPageData = { + '@type': 'Document', + title: 'My Page', + }; + + await createContent({ + path: '/', + data: myPageData, + config: cli.config, + }); + + const path = '/my-page'; + const data: CreateContentArgs['data'] = { + '@type': 'Document', + title: 'My nested Page', + }; + + const { result } = renderHook(() => useMutation(createContentMutation()), { + wrapper: createWrapper(), + }); + + act(() => { + result.current.mutate({ path, data }); + }); + + await waitFor(() => expect(result.current.isSuccess).toBe(true)); + + expect(result.current.data?.['@id']).toBe( + 'http://localhost:55001/plone/my-page/my-nested-page', + ); + expect(result.current.data?.title).toBe('My nested Page'); + }); + test('Hook - Successful - setup/tearingDown setup', async () => { const path = '/'; const data: CreateContentArgs['data'] = { diff --git a/packages/client/src/restapi/navigation/get.test.tsx b/packages/client/src/restapi/navigation/get.test.tsx index f6a47d68e5..e456738842 100644 --- a/packages/client/src/restapi/navigation/get.test.tsx +++ b/packages/client/src/restapi/navigation/get.test.tsx @@ -2,12 +2,24 @@ import { renderHook, waitFor } from '@testing-library/react'; import { createWrapper } from '../../testUtils'; import { useQuery } from '@tanstack/react-query'; import ploneClient from '../../client'; +import { setup, teardown } from '../../resetFixture'; +import { createContent } from '../content/add'; const cli = ploneClient.initialize({ apiPath: 'http://localhost:55001/plone', }); -const { getNavigationQuery } = cli; +const { getNavigationQuery, login } = cli; + +await login({ username: 'admin', password: 'secret' }); + +beforeEach(async () => { + await setup(); +}); + +afterEach(async () => { + await teardown(); +}); describe('[GET] Navigation', () => { test('Hook - Successful', async () => { @@ -39,4 +51,57 @@ describe('[GET] Navigation', () => { expect(result.current.error).toBeDefined(); }); + + test('Depth parameter', async () => { + await createContent({ + path: '/', + data: { + '@type': 'Document', + title: 'Level 1', + }, + config: cli.config, + }); + await createContent({ + path: '/level-1', + data: { + '@type': 'Document', + title: 'Level 2', + }, + config: cli.config, + }); + await createContent({ + path: '/level-1/level-2', + data: { + '@type': 'Document', + title: 'Level 3', + }, + config: cli.config, + }); + + const depth2 = renderHook( + () => useQuery(getNavigationQuery({ path: '/', depth: 2 })), + { + wrapper: createWrapper(), + }, + ); + await waitFor(() => expect(depth2.result.current.isSuccess).toBe(true)); + const level1_1 = depth2.result.current.data?.items.find( + (item) => item.title === 'Level 1', + ); + expect(level1_1.items[0].title).toBe('Level 2'); + expect(level1_1.items[0].items.length).toBe(0); + + const depth3 = renderHook( + () => useQuery(getNavigationQuery({ path: '/', depth: 3 })), + { + wrapper: createWrapper(), + }, + ); + await waitFor(() => expect(depth3.result.current.isSuccess).toBe(true)); + const level1_2 = depth3.result.current.data?.items.find( + (item) => item.title === 'Level 1', + ); + expect(level1_2.items[0].items.length).toBe(1); + expect(level1_2.items[0].items[0].title).toBe('Level 3'); + }); }); diff --git a/packages/client/src/restapi/navigation/get.ts b/packages/client/src/restapi/navigation/get.ts index 8f4c6b6211..d5b6577a17 100644 --- a/packages/client/src/restapi/navigation/get.ts +++ b/packages/client/src/restapi/navigation/get.ts @@ -5,6 +5,7 @@ import { z } from 'zod'; const getNavigationSchema = z.object({ path: z.string(), + depth: z.number().optional(), }); export type NavigationArgs = z.infer & { @@ -13,10 +14,12 @@ export type NavigationArgs = z.infer & { export const getNavigation = async ({ path, + depth, config, }: NavigationArgs): Promise => { const validatedArgs = getNavigationSchema.parse({ path, + depth, }); const options: ApiRequestParams = { @@ -25,11 +28,18 @@ export const getNavigation = async ({ }; const navigationPath = `${validatedArgs.path}/@navigation`; + if (validatedArgs.depth) { + options.params['expand.navigation.depth'] = validatedArgs.depth; + } return apiRequest('get', navigationPath, options); }; -export const getNavigationQuery = ({ path, config }: NavigationArgs) => ({ - queryKey: [path, 'get', 'navigation'], - queryFn: () => getNavigation({ path, config }), +export const getNavigationQuery = ({ + path, + depth, + config, +}: NavigationArgs) => ({ + queryKey: [path, depth, 'get', 'navigation'], + queryFn: () => getNavigation({ path, depth, config }), }); From 4d0a701a85f2d86e7515dce99d97604e69caeb2b Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Tue, 15 Oct 2024 22:38:52 -1000 Subject: [PATCH 09/50] Test whether commenting out the `ignore` command has any affect on the Netlify build. --- packages/components/netlify.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/components/netlify.toml b/packages/components/netlify.toml index dd96154375..1fee21991a 100644 --- a/packages/components/netlify.toml +++ b/packages/components/netlify.toml @@ -1,2 +1,2 @@ -[build] - ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF ./src/" +#[build] +# ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF ./src/" From 04402e53cc655eded0ec60657c12562bd1838d30 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Wed, 16 Oct 2024 03:37:18 -0700 Subject: [PATCH 10/50] =?UTF-8?q?Adjust=20the=20path=20to=20perform=20a=20?= =?UTF-8?q?proper=20`git=20diff`=20between=20the=20cached=20and=E2=80=A6?= =?UTF-8?q?=20(#6410)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/components/netlify.toml | 4 ++-- packages/components/news/6410.internal | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 packages/components/news/6410.internal diff --git a/packages/components/netlify.toml b/packages/components/netlify.toml index 1fee21991a..dbedbc629a 100644 --- a/packages/components/netlify.toml +++ b/packages/components/netlify.toml @@ -1,2 +1,2 @@ -#[build] -# ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF ./src/" +[build] + ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF -- packages/components/src/" diff --git a/packages/components/news/6410.internal b/packages/components/news/6410.internal new file mode 100644 index 0000000000..23df896212 --- /dev/null +++ b/packages/components/news/6410.internal @@ -0,0 +1 @@ +Adjust the path to perform a proper `git diff` between the cached and current commits to determine whether to build the Storybook for the components package on Netlify. @stevepiercy From 5660ae42b430aa0c18ddc65006badb0319c23e94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Thu, 17 Oct 2024 17:05:41 +0200 Subject: [PATCH 11/50] [providers] Improve and group providers (#6069) Co-authored-by: Piero Nicolli Co-authored-by: Steve Piercy --- apps/nextjs/README.md | 5 + apps/nextjs/next.config.mjs | 3 + apps/nextjs/src/app/Providers.tsx | 53 +- apps/nextjs/src/app/config.ts | 13 +- apps/nextjs/src/app/content.tsx | 32 +- apps/nextjs/src/app/layout.tsx | 2 +- apps/remix/README.md | 4 + apps/remix/app/client.ts | 8 + apps/remix/app/config.ts | 12 +- apps/remix/app/entry.client.tsx | 1 + apps/remix/app/entry.server.tsx | 1 + apps/remix/app/root.tsx | 47 +- apps/remix/app/routes/$.tsx | 79 + apps/remix/app/routes/_index.tsx | 36 +- apps/remix/app/utils.ts | 6 +- apps/remix/package.json | 19 +- apps/remix/vite.config.ts | 14 +- apps/vite-ssr/README.md | 5 + apps/vite-ssr/package.json | 12 +- apps/vite-ssr/src/entry-client.tsx | 2 +- apps/vite-ssr/src/entry-server.tsx | 2 +- apps/vite-ssr/src/routeTree.gen.ts | 37 +- apps/vite-ssr/src/router.tsx | 17 +- apps/vite-ssr/src/routes/__root.tsx | 20 +- apps/vite-ssr/src/utils.ts | 4 +- apps/vite/README.md | 5 + apps/vite/package.json | 9 +- apps/vite/src/main.tsx | 35 +- apps/vite/src/routeTree.gen.ts | 65 +- apps/vite/src/routes/__root.tsx | 14 +- apps/vite/src/routes/index.tsx | 3 +- apps/vite/src/utils.ts | 1 + apps/vite/tsconfig.json | 5 +- apps/vite/vite.config.js | 2 +- packages/blocks/README.md | 5 + packages/client/news/6069.internal | 1 + packages/client/package.json | 2 +- packages/components/news/6069.breaking | 6 + .../components/src/components/Link/Link.tsx | 21 +- packages/components/src/index.ts | 3 - .../src/providers/flattenToAppURL.tsx | 36 - packages/coresandbox/README.md | 4 + packages/helpers/README.md | 5 + packages/helpers/news/6069.internal | 1 + packages/providers/README.md | 185 ++ packages/providers/news/6069.breaking | 3 + packages/providers/package.json | 4 +- packages/providers/src/AppRouter.tsx | 77 + packages/providers/src/PloneClient.tsx | 5 +- packages/providers/src/PloneProvider.tsx | 101 + packages/providers/src/RouterLocation.tsx | 51 - packages/providers/src/index.ts | 10 +- packages/slots/README.md | 5 + packages/tsconfig/README.md | 5 + pnpm-lock.yaml | 2319 ++++++++++++----- 55 files changed, 2446 insertions(+), 976 deletions(-) create mode 100644 apps/remix/app/client.ts create mode 100644 apps/remix/app/routes/$.tsx create mode 100644 packages/client/news/6069.internal create mode 100644 packages/components/news/6069.breaking delete mode 100644 packages/components/src/providers/flattenToAppURL.tsx create mode 100644 packages/coresandbox/README.md create mode 100644 packages/helpers/news/6069.internal create mode 100644 packages/providers/news/6069.breaking create mode 100644 packages/providers/src/AppRouter.tsx create mode 100644 packages/providers/src/PloneProvider.tsx delete mode 100644 packages/providers/src/RouterLocation.tsx diff --git a/apps/nextjs/README.md b/apps/nextjs/README.md index 88a23215b6..c04dca61ad 100644 --- a/apps/nextjs/README.md +++ b/apps/nextjs/README.md @@ -2,6 +2,11 @@ This is a proof of concept of a [Next.js](https://nextjs.org) app, using the app router and the `@plone/client` and `@plone/components` library. This is intended to serve as both a playground for the development of both packages and as demo of Plone using Next.js. +> [!WARNING] +> This package or app is experimental. +> The community offers no support whatsoever for it. +> Breaking changes may occur without notice. + ## Development To start, from the root of the monorepo: diff --git a/apps/nextjs/next.config.mjs b/apps/nextjs/next.config.mjs index 9891677772..f214d4f86b 100644 --- a/apps/nextjs/next.config.mjs +++ b/apps/nextjs/next.config.mjs @@ -2,6 +2,9 @@ import path from 'path'; /** @type {import('next').NextConfig} */ const nextConfig = { + typescript: { + ignoreBuildErrors: true, + }, // sassOptions: { // includePaths: [path.join(__dirname, 'src/lib/components/src/styles')], // }, diff --git a/apps/nextjs/src/app/Providers.tsx b/apps/nextjs/src/app/Providers.tsx index 16b7255887..e1c0fa9295 100644 --- a/apps/nextjs/src/app/Providers.tsx +++ b/apps/nextjs/src/app/Providers.tsx @@ -1,15 +1,32 @@ 'use client'; import React from 'react'; -import { useRouter } from 'next/navigation'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { PloneClientProvider } from '@plone/providers'; +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 { RouterProvider } from 'react-aria-components'; -import { FlattenToAppURLProvider } from '@plone/components'; import { flattenToAppURL } from './utils'; import config from './config'; +// Custom hook to unify the location object between NextJS and Plone +function useLocation() { + const pathname = usePathname(); + const 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 }) => { @@ -39,16 +56,22 @@ const Providers: React.FC<{ const router = useRouter(); return ( - - - - - {children} - - - - - + { + router.push(to); + }} + useParams={useParams} + useHref={(to) => flattenToAppURL(to)} + flattenToAppURL={flattenToAppURL} + > + {children} + + ); }; diff --git a/apps/nextjs/src/app/config.ts b/apps/nextjs/src/app/config.ts index 47bad754da..2bbdde6a9a 100644 --- a/apps/nextjs/src/app/config.ts +++ b/apps/nextjs/src/app/config.ts @@ -1,12 +1,19 @@ +import config from '@plone/registry'; +import { slate } from '@plone/blocks'; +import { blocksConfig } from '@plone/blocks'; + const settings = { apiPath: process.env.NEXT_PUBLIC_VERCEL_URL ? // Vercel does not prepend the schema to the NEXT_PUBLIC_VERCEL_URL automatic env var `https://${process.env.NEXT_PUBLIC_VERCEL_URL}` : 'http://localhost:3000', + slate, }; -const config = { - settings, -}; +// @ts-expect-error Improve typings +config.set('settings', settings); + +// @ts-expect-error Improve typings +config.set('blocks', { blocksConfig }); export default config; diff --git a/apps/nextjs/src/app/content.tsx b/apps/nextjs/src/app/content.tsx index fc16cb72e0..84e2b244b7 100644 --- a/apps/nextjs/src/app/content.tsx +++ b/apps/nextjs/src/app/content.tsx @@ -1,11 +1,10 @@ 'use client'; - import { useQuery } from '@tanstack/react-query'; import { usePathname } from 'next/navigation'; -import Link from 'next/link'; -import { flattenToAppURL } from './utils'; import { usePloneClient } from '@plone/providers'; -import { Breadcrumbs } from '@plone/components'; +import { Breadcrumbs, RenderBlocks } from '@plone/components'; +import config from '@plone/registry'; + import '@plone/components/dist/basic.css'; export default function Content() { @@ -16,31 +15,16 @@ export default function Content() { if (data) { return (
-

{data.title}

- {/* */} -
    - {data?.['@components']?.navigation?.items?.map((item) => ( -
  • - - {flattenToAppURL(item['@id'])} - -
  • - ))} -
-
-
{JSON.stringify(data, null, 2)}
-
+
); } diff --git a/apps/nextjs/src/app/layout.tsx b/apps/nextjs/src/app/layout.tsx index 3c118fb9fa..8d254759a2 100644 --- a/apps/nextjs/src/app/layout.tsx +++ b/apps/nextjs/src/app/layout.tsx @@ -5,7 +5,7 @@ import Providers from './Providers'; const inter = Inter({ subsets: ['latin'] }); export const metadata: Metadata = { - title: 'NextJS-powered Plone', + title: 'Next.js app powered by Plone', description: '', }; diff --git a/apps/remix/README.md b/apps/remix/README.md index a339650494..f9d62166c0 100644 --- a/apps/remix/README.md +++ b/apps/remix/README.md @@ -3,6 +3,10 @@ This is a proof of concept of a [Remix](https://remix.run) app, using the `@plone/client` and `@plone/components` libraries. This is intended to serve as both a playground for the development of both packages and as a demo of Plone using Remix. +> [!WARNING] +> This package or app is experimental. +> The community offers no support whatsoever for it. +> Breaking changes may occur without notice. ## Development diff --git a/apps/remix/app/client.ts b/apps/remix/app/client.ts new file mode 100644 index 0000000000..0eec9cd62e --- /dev/null +++ b/apps/remix/app/client.ts @@ -0,0 +1,8 @@ +import ploneClient from '@plone/client'; +import config from '@plone/registry'; + +const cli = ploneClient.initialize({ + apiPath: config.settings.apiPath, +}); + +export { cli as ploneClient }; diff --git a/apps/remix/app/config.ts b/apps/remix/app/config.ts index c2f3c47921..ae8881a358 100644 --- a/apps/remix/app/config.ts +++ b/apps/remix/app/config.ts @@ -1,9 +1,15 @@ +import config from '@plone/registry'; +import { blocksConfig, slate } from '@plone/blocks'; + const settings = { apiPath: 'http://localhost:8080/Plone', + slate, }; -const config = { - settings, -}; +// @ts-expect-error We need to fix typing +config.set('settings', settings); + +// @ts-expect-error We need to fix typing +config.set('blocks', { blocksConfig }); export default config; diff --git a/apps/remix/app/entry.client.tsx b/apps/remix/app/entry.client.tsx index 3f01ce18b1..4680b84a57 100644 --- a/apps/remix/app/entry.client.tsx +++ b/apps/remix/app/entry.client.tsx @@ -7,6 +7,7 @@ import { RemixBrowser } from '@remix-run/react'; import { startTransition, StrictMode } from 'react'; import { hydrateRoot } from 'react-dom/client'; +import './config'; startTransition(() => { hydrateRoot( diff --git a/apps/remix/app/entry.server.tsx b/apps/remix/app/entry.server.tsx index dda7030aea..9af132970a 100644 --- a/apps/remix/app/entry.server.tsx +++ b/apps/remix/app/entry.server.tsx @@ -11,6 +11,7 @@ import { createReadableStreamFromReadable } from '@remix-run/node'; import { RemixServer } from '@remix-run/react'; import { isbot } from 'isbot'; import { renderToPipeableStream } from 'react-dom/server'; +import './config'; const ABORT_DELAY = 5_000; diff --git a/apps/remix/app/root.tsx b/apps/remix/app/root.tsx index f76fa2596c..ecfb28c8be 100644 --- a/apps/remix/app/root.tsx +++ b/apps/remix/app/root.tsx @@ -2,22 +2,33 @@ import { cssBundleHref } from '@remix-run/css-bundle'; import type { LinksFunction } from '@remix-run/node'; import { Links, - LiveReload, Meta, Outlet, Scripts, ScrollRestoration, + useHref, + useLocation, + useNavigate, + useParams, } from '@remix-run/react'; import { useState } from 'react'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { PloneClientProvider } from '@plone/providers'; +import { QueryClient } from '@tanstack/react-query'; import PloneClient from '@plone/client'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import '@plone/components/dist/basic.css'; +import { flattenToAppURL } from './utils'; +import { PloneProvider } from '@plone/providers'; +import config from '@plone/registry'; + export const links: LinksFunction = () => [ ...(cssBundleHref ? [{ rel: 'stylesheet', href: cssBundleHref }] : []), ]; +function useHrefLocal(to: string) { + return useHref(flattenToAppURL(to)); +} + export default function App() { const [queryClient] = useState( () => @@ -34,10 +45,16 @@ export default function App() { const [ploneClient] = useState(() => PloneClient.initialize({ - apiPath: 'http://localhost:8080/Plone', + apiPath: config.settings.apiPath, }), ); + const RRNavigate = useNavigate(); + + const navigate = (to: string) => { + return RRNavigate(flattenToAppURL(to)); + }; + return ( @@ -47,15 +64,19 @@ export default function App() { - - - - - - - - - + + + + + + ); diff --git a/apps/remix/app/routes/$.tsx b/apps/remix/app/routes/$.tsx new file mode 100644 index 0000000000..abd1fd4bbd --- /dev/null +++ b/apps/remix/app/routes/$.tsx @@ -0,0 +1,79 @@ +import { + json, + type LoaderFunctionArgs, + type MetaFunction, +} from '@remix-run/node'; +import { + dehydrate, + QueryClient, + HydrationBoundary, + useQuery, +} from '@tanstack/react-query'; +import { flattenToAppURL } from '../utils'; +import { useLoaderData, useLocation } from '@remix-run/react'; +import { usePloneClient } from '@plone/providers'; +import { Breadcrumbs, RenderBlocks } from '@plone/components'; +import config from '@plone/registry'; +import { ploneClient } from '../client'; + +export const meta: MetaFunction = () => { + return [ + { title: 'Plone on Remix' }, + { name: 'description', content: 'Welcome to Plone on Remix!' }, + ]; +}; + +const expand = ['breadcrumbs', 'navigation']; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export const loader = async ({ params, request }: LoaderFunctionArgs) => { + const queryClient = 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 { getContentQuery } = ploneClient; + + await queryClient.prefetchQuery( + getContentQuery({ path: flattenToAppURL(request.url), expand }), + ); + + return json({ dehydratedState: dehydrate(queryClient) }); +}; + +function Page() { + const { getContentQuery } = usePloneClient(); + const pathname = useLocation().pathname; + const { data } = useQuery(getContentQuery({ path: pathname, expand })); + + if (!data) return null; + return ( + <> + + + + ); +} + +export default function Index() { + const { dehydratedState } = useLoaderData(); + + return ( + + + + ); +} diff --git a/apps/remix/app/routes/_index.tsx b/apps/remix/app/routes/_index.tsx index 1736d4a86b..2ad6a19bbe 100644 --- a/apps/remix/app/routes/_index.tsx +++ b/apps/remix/app/routes/_index.tsx @@ -9,10 +9,12 @@ import { HydrationBoundary, useQuery, } from '@tanstack/react-query'; -import ploneClient from '@plone/client'; import { flattenToAppURL } from '../utils'; import { useLoaderData, useLocation } from '@remix-run/react'; import { usePloneClient } from '@plone/providers'; +import { Breadcrumbs, RenderBlocks } from '@plone/components'; +import config from '@plone/registry'; +import { ploneClient } from '../client'; export const meta: MetaFunction = () => { return [ @@ -35,10 +37,7 @@ export const loader = async ({ params, request }: LoaderFunctionArgs) => { }, }); - const cli = ploneClient.initialize({ - apiPath: 'http://localhost:8080/Plone', - }); - const { getContentQuery } = cli; + const { getContentQuery } = ploneClient; await queryClient.prefetchQuery( getContentQuery({ path: flattenToAppURL(request.url), expand }), @@ -47,17 +46,34 @@ export const loader = async ({ params, request }: LoaderFunctionArgs) => { return json({ dehydratedState: dehydrate(queryClient) }); }; -export default function Index() { - const { dehydratedState } = useLoaderData(); +function Page() { const { getContentQuery } = usePloneClient(); const pathname = useLocation().pathname; const { data } = useQuery(getContentQuery({ path: pathname, expand })); + if (!data) return null; + return ( + <> + + + + ); +} + +export default function Index() { + const { dehydratedState } = useLoaderData(); + return ( -
-
{JSON.stringify(data, null, 2)}
-
+
); } diff --git a/apps/remix/app/utils.ts b/apps/remix/app/utils.ts index f6513198f8..c297613f90 100644 --- a/apps/remix/app/utils.ts +++ b/apps/remix/app/utils.ts @@ -9,9 +9,9 @@ import config from './config'; */ export function flattenToAppURL(url: string) { const { settings } = config; + return ( - (url && - url.replace(settings.apiPath, '').replace('http://localhost:3000', '')) || - '/' + url && + url.replace(settings.apiPath, '').replace('http://localhost:3000', '') ); } diff --git a/apps/remix/package.json b/apps/remix/package.json index 06b5085260..31d7ec65e8 100644 --- a/apps/remix/package.json +++ b/apps/remix/package.json @@ -11,24 +11,27 @@ "typecheck": "tsc" }, "dependencies": { + "@plone/blocks": "workspace: *", "@plone/client": "workspace: *", + "@plone/components": "workspace: *", "@plone/providers": "workspace: *", - "@remix-run/css-bundle": "^2.4.0", - "@remix-run/node": "^2.8.1", - "@remix-run/react": "^2.8.1", - "@remix-run/serve": "^2.8.1", - "@tanstack/react-query": "^5.37.1", + "@plone/registry": "workspace: *", + "@remix-run/css-bundle": "^2.13.1", + "@remix-run/node": "^2.13.1", + "@remix-run/react": "^2.13.1", + "@remix-run/serve": "^2.13.1", + "@tanstack/react-query": "^5.59.0", "isbot": "^4.1.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { - "@remix-run/dev": "^2.8.1", - "@tanstack/react-query-devtools": "^5.37.1", + "@remix-run/dev": "^2.13.1", + "@tanstack/react-query-devtools": "^5.59.0", "@types/react": "^18.2.20", "@types/react-dom": "^18.2.7", "typescript": "^5.6.3", - "vite": "^5.1.0", + "vite": "^5.4.9", "vite-tsconfig-paths": "^4.2.1" }, "engines": { diff --git a/apps/remix/vite.config.ts b/apps/remix/vite.config.ts index eeb1fd83d0..1a43ce37db 100644 --- a/apps/remix/vite.config.ts +++ b/apps/remix/vite.config.ts @@ -1,12 +1,18 @@ import { vitePlugin as remix } from '@remix-run/dev'; -import { installGlobals } from '@remix-run/node'; import { defineConfig } from 'vite'; import tsconfigPaths from 'vite-tsconfig-paths'; -installGlobals(); - export default defineConfig({ - plugins: [remix(), tsconfigPaths()], + plugins: [ + remix({ + future: { + v3_fetcherPersist: true, + v3_relativeSplatPath: true, + v3_throwAbortReason: true, + }, + }), + tsconfigPaths(), + ], server: { port: 3000, }, diff --git a/apps/vite-ssr/README.md b/apps/vite-ssr/README.md index ec603dc2af..f672cf5770 100644 --- a/apps/vite-ssr/README.md +++ b/apps/vite-ssr/README.md @@ -4,3 +4,8 @@ This is a proof of concept of a [Vite](https://vite.dev/) build, using `@plone/c This is intended to serve as both a playground for the development of both packages and as a demo of Plone using Vite built with server side rendering (SSR). It also uses [TanStack Router](https://tanstack.com/router/latest/docs/framework/react/overview) for its routing library. + +> [!WARNING] +> This package or app is experimental. +> The community offers no support whatsoever for it. +> Breaking changes may occur without notice. diff --git a/apps/vite-ssr/package.json b/apps/vite-ssr/package.json index 54e847b83d..6a25419d6e 100644 --- a/apps/vite-ssr/package.json +++ b/apps/vite-ssr/package.json @@ -17,11 +17,10 @@ "@plone/providers": "workspace:*", "@plone/registry": "workspace:*", "@plone/blocks": "workspace:*", - "@tanstack/react-query": "^5.37.1", - "@tanstack/react-router": "^1.28.2", - "@tanstack/react-router-server": "^1.28.2", - "@tanstack/router-devtools": "^1.28.2", - "@tanstack/router-vite-plugin": "^1.28.2", + "@tanstack/react-query": "^5.59.0", + "@tanstack/react-router": "^1.34.9", + "@tanstack/start": "^1.34.9", + "@tanstack/router-vite-plugin": "^1.34.8", "axios": "^1.6.5", "get-port": "^7.0.0", "react": "^18.2.0", @@ -34,7 +33,8 @@ "@babel/generator": "^7.23.6", "@plone/types": "workspace:*", "@rollup/plugin-babel": "^6.0.4", - "@tanstack/react-query-devtools": "^5.37.1", + "@tanstack/react-query-devtools": "^5.59.0", + "@tanstack/router-devtools": "^1.34.9", "@types/express": "^4.17.21", "@types/react": "^18.2.55", "@types/react-dom": "^18.2.19", diff --git a/apps/vite-ssr/src/entry-client.tsx b/apps/vite-ssr/src/entry-client.tsx index e178ab84f1..1f2e057b2c 100644 --- a/apps/vite-ssr/src/entry-client.tsx +++ b/apps/vite-ssr/src/entry-client.tsx @@ -1,6 +1,6 @@ import ReactDOM from 'react-dom/client'; -import { StartClient } from '@tanstack/react-router-server/client'; +import { StartClient } from '@tanstack/start/client'; import { createRouter } from './router'; import './config'; diff --git a/apps/vite-ssr/src/entry-server.tsx b/apps/vite-ssr/src/entry-server.tsx index f701a08446..af56e3e91f 100644 --- a/apps/vite-ssr/src/entry-server.tsx +++ b/apps/vite-ssr/src/entry-server.tsx @@ -3,7 +3,7 @@ import ReactDOMServer from 'react-dom/server'; import { createMemoryHistory } from '@tanstack/react-router'; import { ServerResponse } from 'http'; import express from 'express'; -import { StartServer } from '@tanstack/react-router-server/server'; +import { StartServer } from '@tanstack/start/server'; import { createRouter } from './router'; import './config'; diff --git a/apps/vite-ssr/src/routeTree.gen.ts b/apps/vite-ssr/src/routeTree.gen.ts index 81ad7b6840..64cb826aac 100644 --- a/apps/vite-ssr/src/routeTree.gen.ts +++ b/apps/vite-ssr/src/routeTree.gen.ts @@ -37,14 +37,23 @@ const IndexRoute = IndexImport.update({ declare module '@tanstack/react-router' { interface FileRoutesByPath { '/': { + id: '/' + path: '/' + fullPath: '/' preLoaderRoute: typeof IndexImport parentRoute: typeof rootRoute } '/$': { + id: '/$' + path: '/$' + fullPath: '/$' preLoaderRoute: typeof SplatImport parentRoute: typeof rootRoute } '/error': { + id: '/error' + path: '/error' + fullPath: '/error' preLoaderRoute: typeof ErrorImport parentRoute: typeof rootRoute } @@ -53,10 +62,34 @@ declare module '@tanstack/react-router' { // Create and export the route tree -export const routeTree = rootRoute.addChildren([ +export const routeTree = rootRoute.addChildren({ IndexRoute, SplatRoute, ErrorRoute, -]) +}) /* prettier-ignore-end */ + +/* ROUTE_MANIFEST_START +{ + "routes": { + "__root__": { + "filePath": "__root.tsx", + "children": [ + "/", + "/$", + "/error" + ] + }, + "/": { + "filePath": "index.tsx" + }, + "/$": { + "filePath": "$.tsx" + }, + "/error": { + "filePath": "error.tsx" + } + } +} +ROUTE_MANIFEST_END */ diff --git a/apps/vite-ssr/src/router.tsx b/apps/vite-ssr/src/router.tsx index 7a3a80f339..512782c598 100644 --- a/apps/vite-ssr/src/router.tsx +++ b/apps/vite-ssr/src/router.tsx @@ -1,16 +1,9 @@ -import { - QueryClient, - QueryClientProvider, - dehydrate, - hydrate, -} from '@tanstack/react-query'; +import { QueryClient, dehydrate, hydrate } from '@tanstack/react-query'; import PloneClient from '@plone/client'; import { createRouter as createReactRouter } from '@tanstack/react-router'; import { routeTree } from './routeTree.gen'; import { PloneClientProvider } from '@plone/providers'; -import { FlattenToAppURLProvider } from '@plone/components'; -import { flattenToAppURL } from './utils'; const queryClient = new QueryClient({ defaultOptions: { @@ -45,12 +38,8 @@ export function createRouter() { }, Wrap: ({ children }: { children: any }) => { return ( - - - - {children} - - + + {children} ); }, diff --git a/apps/vite-ssr/src/routes/__root.tsx b/apps/vite-ssr/src/routes/__root.tsx index ef78a13d81..74bc65767a 100644 --- a/apps/vite-ssr/src/routes/__root.tsx +++ b/apps/vite-ssr/src/routes/__root.tsx @@ -4,14 +4,16 @@ import { Outlet, createRootRouteWithContext, useRouter, - useRouterState, + useLocation, } from '@tanstack/react-router'; -import { DehydrateRouter } from '@tanstack/react-router-server/client'; +import { DehydrateRouter } from '@tanstack/start/client'; import { RouterContext } from '../routerContext'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { RouterProvider } from 'react-aria-components'; import '@plone/components/dist/basic.css'; +import { AppRouterProvider } from '@plone/providers'; +import { flattenToAppURL } from '../utils'; export const Route = createRootRouteWithContext()({ component: RootComponent, @@ -54,11 +56,19 @@ function RootComponent() { )} - router.navigate({ to: path })} + + router.navigate({ to: flattenToAppURL(path) }) + } + // TODO: Investigate why this fails in @tanstack/router :/ + useHref={(to) => { + return flattenToAppURL(to); + }} + flattenToAppURL={flattenToAppURL} > {/* Start rendering router matches */} - + diff --git a/apps/vite-ssr/src/utils.ts b/apps/vite-ssr/src/utils.ts index 4c1b6f5968..044a5b66dd 100644 --- a/apps/vite-ssr/src/utils.ts +++ b/apps/vite-ssr/src/utils.ts @@ -12,7 +12,9 @@ export function flattenToAppURL(url: string | undefined) { const { settings } = config; return ( (url && - url.replace(settings.apiPath, '').replace('http://localhost:3000', '')) || + url + .replace(settings.apiPath, '') + .replace('http://localhost:8080/Plone', '')) || '/' ); } diff --git a/apps/vite/README.md b/apps/vite/README.md index 97978cb92e..3e508c1a97 100644 --- a/apps/vite/README.md +++ b/apps/vite/README.md @@ -4,3 +4,8 @@ This is a proof of concept of a [Vite](https://vite.dev/) build, using `@plone/c This is intended to serve as both a playground for the development of both packages and as a demo of Plone using Vite. It also uses [TanStack Router](https://tanstack.com/router/latest/docs/framework/react/overview) for its routing library. + +> [!WARNING] +> This package or app is experimental. +> The community offers no support whatsoever for it. +> Breaking changes may occur without notice. diff --git a/apps/vite/package.json b/apps/vite/package.json index a29acbb65b..ec91f232ee 100644 --- a/apps/vite/package.json +++ b/apps/vite/package.json @@ -15,7 +15,8 @@ "@plone/registry": "workspace:*", "@plone/blocks": "workspace:*", "@tanstack/react-query": "^5.37.1", - "@tanstack/react-router": "^1.29.2", + "@tanstack/react-router": "^1.67.0", + "@tanstack/router-devtools": "^1.67.0", "axios": "^1.6.5", "react": "^18.2.0", "react-aria-components": "^1.4.0", @@ -23,10 +24,10 @@ }, "devDependencies": { "@tanstack/react-query-devtools": "^5.37.1", - "@tanstack/router-devtools": "^1.29.2", + "@tanstack/router-plugin": "^1.66.1", "@types/react": "^18.2.47", "@types/react-dom": "^18.2.18", - "@vitejs/plugin-react": "^4.2.1", - "vite": "^5.0.13" + "@vitejs/plugin-react": "^4.3.2", + "vite": "^5.4.9" } } diff --git a/apps/vite/src/main.tsx b/apps/vite/src/main.tsx index 7bdb58def6..204f5a8a31 100644 --- a/apps/vite/src/main.tsx +++ b/apps/vite/src/main.tsx @@ -1,12 +1,16 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; -import { RouterProvider, createRouter } from '@tanstack/react-router'; +import { + RouterProvider, + createRouter, + useLocation, + useParams, +} from '@tanstack/react-router'; import { routeTree } from './routeTree.gen'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { QueryClient } from '@tanstack/react-query'; import PloneClient from '@plone/client'; -import { PloneClientProvider } from '@plone/providers'; -import { FlattenToAppURLProvider } from '@plone/providers'; +import { PloneProvider } from '@plone/providers'; import { flattenToAppURL } from './utils'; import './config'; @@ -50,12 +54,21 @@ const rootElement = document.getElementById('app')!; if (!rootElement.innerHTML) { const root = ReactDOM.createRoot(rootElement); root.render( - - - - - - - , + + router.navigate({ to: flattenToAppURL(path) }) + } + // TODO: Investigate why this fails in @tanstack/router :/ + useHref={(to) => { + return flattenToAppURL(to); + }} + useParams={useParams} + flattenToAppURL={flattenToAppURL} + > + + , ); } diff --git a/apps/vite/src/routeTree.gen.ts b/apps/vite/src/routeTree.gen.ts index 20ade03340..2c6342ccd1 100644 --- a/apps/vite/src/routeTree.gen.ts +++ b/apps/vite/src/routeTree.gen.ts @@ -31,10 +31,16 @@ const IndexRoute = IndexImport.update({ declare module '@tanstack/react-router' { interface FileRoutesByPath { '/': { + id: '/' + path: '/' + fullPath: '/' preLoaderRoute: typeof IndexImport parentRoute: typeof rootRoute } '/$': { + id: '/$' + path: '/$' + fullPath: '/$' preLoaderRoute: typeof SplatImport parentRoute: typeof rootRoute } @@ -43,6 +49,63 @@ declare module '@tanstack/react-router' { // Create and export the route tree -export const routeTree = rootRoute.addChildren([IndexRoute, SplatRoute]) +export interface FileRoutesByFullPath { + '/': typeof IndexRoute + '/$': typeof SplatRoute +} + +export interface FileRoutesByTo { + '/': typeof IndexRoute + '/$': typeof SplatRoute +} + +export interface FileRoutesById { + __root__: typeof rootRoute + '/': typeof IndexRoute + '/$': typeof SplatRoute +} + +export interface FileRouteTypes { + fileRoutesByFullPath: FileRoutesByFullPath + fullPaths: '/' | '/$' + fileRoutesByTo: FileRoutesByTo + to: '/' | '/$' + id: '__root__' | '/' | '/$' + fileRoutesById: FileRoutesById +} + +export interface RootRouteChildren { + IndexRoute: typeof IndexRoute + SplatRoute: typeof SplatRoute +} + +const rootRouteChildren: RootRouteChildren = { + IndexRoute: IndexRoute, + SplatRoute: SplatRoute, +} + +export const routeTree = rootRoute + ._addFileChildren(rootRouteChildren) + ._addFileTypes() /* prettier-ignore-end */ + +/* ROUTE_MANIFEST_START +{ + "routes": { + "__root__": { + "filePath": "__root.tsx", + "children": [ + "/", + "/$" + ] + }, + "/": { + "filePath": "index.tsx" + }, + "/$": { + "filePath": "$.tsx" + } + } +} +ROUTE_MANIFEST_END */ diff --git a/apps/vite/src/routes/__root.tsx b/apps/vite/src/routes/__root.tsx index da25473043..a60ef833f4 100644 --- a/apps/vite/src/routes/__root.tsx +++ b/apps/vite/src/routes/__root.tsx @@ -1,15 +1,9 @@ import * as React from 'react'; -import { - Link, - Outlet, - createRootRouteWithContext, - useRouter, -} from '@tanstack/react-router'; +import { Outlet, createRootRouteWithContext } from '@tanstack/react-router'; import { TanStackRouterDevtools } from '@tanstack/router-devtools'; import { QueryClient } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; -import { RouterProvider } from 'react-aria-components'; import PloneClient from '@plone/client'; import '@plone/components/dist/basic.css'; @@ -22,13 +16,11 @@ export const Route = createRootRouteWithContext<{ }); function RootComponent() { - const router = useRouter(); - return ( - router.navigate({ to: path })}> + <> - + ); } diff --git a/apps/vite/src/routes/index.tsx b/apps/vite/src/routes/index.tsx index 81b7ae161c..b7619d303c 100644 --- a/apps/vite/src/routes/index.tsx +++ b/apps/vite/src/routes/index.tsx @@ -1,5 +1,5 @@ -import { createFileRoute } from '@tanstack/react-router'; import * as React from 'react'; +import { createFileRoute } from '@tanstack/react-router'; import { flattenToAppURL } from '../utils'; import { useSuspenseQuery } from '@tanstack/react-query'; import { usePloneClient } from '@plone/providers'; @@ -23,6 +23,7 @@ function IndexComponent() { const { data } = useSuspenseQuery( getContentQuery({ path: flattenToAppURL('/'), expand }), ); + return ( <> [!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/client/news/6069.internal b/packages/client/news/6069.internal new file mode 100644 index 0000000000..d62f585cd5 --- /dev/null +++ b/packages/client/news/6069.internal @@ -0,0 +1 @@ +Upgrade `@tanstack/react-query`. @sneridagh diff --git a/packages/client/package.json b/packages/client/package.json index ecb547cf5f..89b4b87ba5 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -92,7 +92,7 @@ "wait-on": "^7.2.0" }, "dependencies": { - "@tanstack/react-query": "^5.37.1", + "@tanstack/react-query": "^5.59.0", "axios": "^1.6.7", "debug": "4.3.4", "query-string": "^9.0.0", diff --git a/packages/components/news/6069.breaking b/packages/components/news/6069.breaking new file mode 100644 index 0000000000..c2801c7201 --- /dev/null +++ b/packages/components/news/6069.breaking @@ -0,0 +1,6 @@ +Removed the `FlattenToAppURLProvider` since it's no longer needed. @sneridagh +The components in here need it. +Refactored the `Link` component to not use it, since `react-aria-components` uses the React Client Routing facilities that can be injected into the React tree. + +Breaking: + - Use the new providers in `@plone/providers` instead to make the new `Link` work with them. diff --git a/packages/components/src/components/Link/Link.tsx b/packages/components/src/components/Link/Link.tsx index 307c6528d3..4923f3218c 100644 --- a/packages/components/src/components/Link/Link.tsx +++ b/packages/components/src/components/Link/Link.tsx @@ -1,20 +1 @@ -import React from 'react'; -import { forwardRef, ForwardedRef } from 'react'; -import { Link as RACLink, LinkProps } from 'react-aria-components'; -import { useFlattenToAppURL } from '../../providers/flattenToAppURL'; - -type forwardRefType = typeof forwardRef; - -const Link = (props: LinkProps, ref: ForwardedRef) => { - const { flattenToAppURL } = useFlattenToAppURL(); - const flattenedURL = flattenToAppURL(props.href); - - return ( - - {props.children} - - ); -}; - -const _Link = /*#__PURE__*/ (forwardRef as forwardRefType)(Link); -export { _Link as Link }; +export { Link } from 'react-aria-components'; diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts index 6e403919b2..a7e2df464f 100644 --- a/packages/components/src/index.ts +++ b/packages/components/src/index.ts @@ -55,9 +55,6 @@ export { Tooltip } from './components/Tooltip/Tooltip'; export { RenderBlocks } from './views/RenderBlocks/RenderBlocks'; export { DefaultBlockView } from './views/RenderBlocks/DefaultBlockView'; -export { FlattenToAppURLProvider } from './providers/flattenToAppURL'; -export { useFlattenToAppURL } from './providers/flattenToAppURL'; - // Quanta components export { QuantaTextField } from './components/quanta/TextField/TextField'; export { QuantaTextAreaField } from './components/quanta/TextAreaField/TextAreaField'; diff --git a/packages/components/src/providers/flattenToAppURL.tsx b/packages/components/src/providers/flattenToAppURL.tsx deleted file mode 100644 index 56d32da0e9..0000000000 --- a/packages/components/src/providers/flattenToAppURL.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import { createContext, ReactNode, useContext, useMemo } from 'react'; - -interface FlattenToAppURL { - flattenToAppURL: (path: string | undefined) => string; -} - -const FlattenToAppURLContext = createContext({ - flattenToAppURL: (path) => path ?? '', -}); - -interface FlattenToAppURLProps { - flattenToAppURL: (path: string | undefined) => string; - children: ReactNode; -} - -export function FlattenToAppURLProvider(props: FlattenToAppURLProps) { - let { children, flattenToAppURL } = props; - - let ctx = useMemo( - () => ({ - flattenToAppURL, - }), - [flattenToAppURL], - ); - - return ( - - {children} - - ); -} - -export function useFlattenToAppURL(): FlattenToAppURL { - return useContext(FlattenToAppURLContext); -} diff --git a/packages/coresandbox/README.md b/packages/coresandbox/README.md new file mode 100644 index 0000000000..1f01acdc34 --- /dev/null +++ b/packages/coresandbox/README.md @@ -0,0 +1,4 @@ +# @plone/volto-coresandbox + +This package is part of the Volto CI fixtures. +It's used to provide example use cases that are not present in vanilla Volto. diff --git a/packages/helpers/README.md b/packages/helpers/README.md index 6226029a0f..f9c90bc51b 100644 --- a/packages/helpers/README.md +++ b/packages/helpers/README.md @@ -1 +1,6 @@ # @plone/helpers + +> [!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/helpers/news/6069.internal b/packages/helpers/news/6069.internal new file mode 100644 index 0000000000..003eb2470b --- /dev/null +++ b/packages/helpers/news/6069.internal @@ -0,0 +1 @@ +Added experimental notice @sneridagh diff --git a/packages/providers/README.md b/packages/providers/README.md index 05502673e0..75ba6475a9 100644 --- a/packages/providers/README.md +++ b/packages/providers/README.md @@ -1,3 +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/providers/news/6069.breaking b/packages/providers/news/6069.breaking new file mode 100644 index 0000000000..5425f3e2f7 --- /dev/null +++ b/packages/providers/news/6069.breaking @@ -0,0 +1,3 @@ +Improve and group providers. @sneridagh +Breaking: + - The interface of the providers has changed. Please check the new one, and adapt your apps accordingly. diff --git a/packages/providers/package.json b/packages/providers/package.json index 20b00201ca..df5d4bc247 100644 --- a/packages/providers/package.json +++ b/packages/providers/package.json @@ -62,7 +62,9 @@ "dependencies": { "@plone/client": "workspace:*", "@plone/components": "workspace:*", - "@plone/registry": "workspace:*" + "@plone/registry": "workspace:*", + "@tanstack/react-query": "^5.59.0", + "react-aria-components": "^1.4.0" }, "devDependencies": { "@parcel/config-default": "^2.12.0", diff --git a/packages/providers/src/AppRouter.tsx b/packages/providers/src/AppRouter.tsx new file mode 100644 index 0000000000..86b2547114 --- /dev/null +++ b/packages/providers/src/AppRouter.tsx @@ -0,0 +1,77 @@ +import React, { createContext, ReactNode, useContext, useMemo } from 'react'; +import { RouterProvider } from 'react-aria-components'; +import { flattenToAppURL as defaultFlattenToAppURL } from './utils'; + +export type AnySearchSchema = {}; +export interface Location { + href?: string; // TSR + searchStr?: string; // TSR + pathname: string; // TSR, RR and Remix + search: TSearchObj; // TSR, RR and Remix + hash: string; // TSR, RR and Remix + state?: any; // TSR, RR and Remix + key?: string; // RR and Remix +} + +interface AppRouter { + useLocation: () => Location | undefined; + useParams: (opts?: any) => Record; + navigate: (path: string) => void; + useHref: (to: string, options?: any) => string; + flattenToAppURL: (path: string | undefined) => string | undefined; +} + +const AppRouterContext = createContext({ + useLocation: () => ({ + href: '', + pathname: '', + search: {}, + searchStr: '', + hash: '', + }), + useParams: () => ({}), + navigate: () => {}, + useHref: () => '', + flattenToAppURL: defaultFlattenToAppURL, +}); + +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; +} + +export function AppRouterProvider(props: AppRouterProps) { + let { children, navigate, useLocation, useParams, useHref, flattenToAppURL } = + props; + + if (!flattenToAppURL) { + flattenToAppURL = defaultFlattenToAppURL; + } + + let ctx = useMemo( + () => ({ + useLocation, + useParams, + navigate, + useHref, + flattenToAppURL, + }), + [useLocation, useParams, navigate, useHref, flattenToAppURL], + ); + + return ( + + + {children} + + + ); +} + +export function useAppRouter() { + return useContext(AppRouterContext); +} diff --git a/packages/providers/src/PloneClient.tsx b/packages/providers/src/PloneClient.tsx index 621f797746..50a319a6f4 100644 --- a/packages/providers/src/PloneClient.tsx +++ b/packages/providers/src/PloneClient.tsx @@ -1,4 +1,5 @@ import * as React from 'react'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import PloneClient from '@plone/client'; @@ -18,16 +19,18 @@ export const usePloneClient = () => { export type PloneClientProviderProps = { client: InstanceType; + queryClient: QueryClient; children?: React.ReactNode; }; export const PloneClientProvider = ({ client, + queryClient, children, }: PloneClientProviderProps): JSX.Element => { return ( - {children} + {children} ); }; diff --git a/packages/providers/src/PloneProvider.tsx b/packages/providers/src/PloneProvider.tsx new file mode 100644 index 0000000000..31bae3d27f --- /dev/null +++ b/packages/providers/src/PloneProvider.tsx @@ -0,0 +1,101 @@ +import React, { createContext, ReactNode, useContext, useMemo } from 'react'; +import { QueryClient } from '@tanstack/react-query'; +import { AppRouterProvider, Location } from './AppRouter'; +import { PloneClientProvider } from './PloneClient'; +import PloneClient from '@plone/client'; +import { flattenToAppURL as defaultFlattenToAppURL } from './utils'; + +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; +} + +const PloneProviderContext = createContext({ + ploneClient: null, + queryClient: null, + useLocation: () => ({ + href: '', + pathname: '', + search: {}, + searchStr: '', + hash: '', + }), + useParams: () => ({}), + navigate: () => {}, + useHref: () => '', + flattenToAppURL: defaultFlattenToAppURL, +}); + +interface PloneProviderProps { + 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; + children: ReactNode; +} + +export function PloneProvider(props: PloneProviderProps) { + let { + children, + navigate, + useLocation, + useParams, + useHref, + ploneClient, + queryClient, + flattenToAppURL, + } = props; + + if (!flattenToAppURL) { + flattenToAppURL = defaultFlattenToAppURL; + } + + let ctx = useMemo( + () => ({ + ploneClient, + queryClient, + useLocation, + useParams, + navigate, + useHref, + flattenToAppURL, + }), + [ + ploneClient, + queryClient, + useLocation, + useParams, + navigate, + useHref, + flattenToAppURL, + ], + ); + + return ( + + + + {children} + + + + ); +} + +export function usePloneProvider() { + return useContext(PloneProviderContext); +} diff --git a/packages/providers/src/RouterLocation.tsx b/packages/providers/src/RouterLocation.tsx deleted file mode 100644 index f2881957d4..0000000000 --- a/packages/providers/src/RouterLocation.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React, { createContext, ReactNode, useContext, useMemo } from 'react'; - -export type AnySearchSchema = {}; -export interface Location { - href: string; - pathname: string; - search: TSearchObj; - searchStr: string; - hash: string; -} - -interface RouterLocation { - useLocation: () => Location | undefined; -} - -const RouterLocationContext = createContext({ - useLocation: () => ({ - href: '', - pathname: '', - search: {}, - searchStr: '', - hash: '', - }), -}); - -interface RouterLocationProps { - useLocation: () => Location | undefined; - children: ReactNode; -} - -export function RouterLocationProvider(props: RouterLocationProps) { - let { children, useLocation } = props; - - let ctx = useMemo( - () => ({ - useLocation, - }), - [useLocation], - ); - - return ( - - {children} - - ); -} - -export function useRouterLocation() { - const { useLocation } = useContext(RouterLocationContext); - return useLocation(); -} diff --git a/packages/providers/src/index.ts b/packages/providers/src/index.ts index 37d404ef95..5978c8c821 100644 --- a/packages/providers/src/index.ts +++ b/packages/providers/src/index.ts @@ -1,6 +1,6 @@ -export * from './RouterLocation'; +export * from './AppRouter'; export * from './PloneClient'; -// FlattenToAppURL provider should live on the components -// but @plone/components can't depend on other packages -// we are proxying it here for convenience and centralization -export { FlattenToAppURLProvider, useFlattenToAppURL } from '@plone/components'; +export * from './PloneProvider'; + +// Proxying RouterProvider from react-aria-components +export { RouterProvider } from 'react-aria-components'; diff --git a/packages/slots/README.md b/packages/slots/README.md index c53c030b59..c77e2bb2de 100644 --- a/packages/slots/README.md +++ b/packages/slots/README.md @@ -1,3 +1,8 @@ # `@plone/blocks` This package contains the default blocks provided by Plone. + +> [!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/tsconfig/README.md b/packages/tsconfig/README.md index c94118473f..840f722880 100644 --- a/packages/tsconfig/README.md +++ b/packages/tsconfig/README.md @@ -27,3 +27,8 @@ In `package.json`: ] } ``` + +> [!WARNING] +> This package or app is experimental. +> The community offers no support whatsoever for it. +> Breaking changes may occur without notice. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ac6ca30d57..e0959e7454 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -803,27 +803,36 @@ importers: apps/remix: dependencies: + '@plone/blocks': + specifier: 'workspace: *' + version: link:../../packages/blocks '@plone/client': specifier: 'workspace: *' version: link:../../packages/client + '@plone/components': + specifier: 'workspace: *' + version: link:../../packages/components '@plone/providers': specifier: 'workspace: *' version: link:../../packages/providers + '@plone/registry': + specifier: 'workspace: *' + version: link:../../packages/registry '@remix-run/css-bundle': - specifier: ^2.4.0 - version: 2.8.1 + specifier: ^2.13.1 + version: 2.13.1 '@remix-run/node': - specifier: ^2.8.1 - version: 2.8.1(typescript@5.6.3) + specifier: ^2.13.1 + version: 2.13.1(typescript@5.6.3) '@remix-run/react': - specifier: ^2.8.1 - version: 2.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + specifier: ^2.13.1 + version: 2.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) '@remix-run/serve': - specifier: ^2.8.1 - version: 2.8.1(typescript@5.6.3) + specifier: ^2.13.1 + version: 2.13.1(typescript@5.6.3) '@tanstack/react-query': - specifier: ^5.37.1 - version: 5.37.1(react@18.2.0) + specifier: ^5.59.0 + version: 5.59.14(react@18.2.0) isbot: specifier: ^4.1.0 version: 4.4.0 @@ -835,11 +844,11 @@ importers: version: 18.2.0(react@18.2.0) devDependencies: '@remix-run/dev': - specifier: ^2.8.1 - version: 2.8.1(@remix-run/serve@2.8.1(typescript@5.6.3))(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + 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.24.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.24.1)(sass@1.75.0)(terser@5.30.3)) '@tanstack/react-query-devtools': - specifier: ^5.37.1 - version: 5.37.1(@tanstack/react-query@5.37.1(react@18.2.0))(react@18.2.0) + specifier: ^5.59.0 + version: 5.59.8(@tanstack/react-query@5.59.14(react@18.2.0))(react@18.2.0) '@types/react': specifier: ^18.2.20 version: 18.2.79 @@ -850,11 +859,11 @@ importers: specifier: ^5.6.3 version: 5.6.3 vite: - specifier: ^5.1.0 - version: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + specifier: ^5.4.9 + version: 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-tsconfig-paths: specifier: ^4.2.1 - version: 4.3.2(typescript@5.6.3)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + version: 4.3.2(typescript@5.6.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)) apps/vite: dependencies: @@ -877,8 +886,11 @@ importers: specifier: ^5.37.1 version: 5.37.1(react@18.2.0) '@tanstack/react-router': - specifier: ^1.29.2 - version: 1.29.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: ^1.67.0 + version: 1.67.0(@tanstack/router-generator@1.65.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/router-devtools': + specifier: ^1.67.0 + version: 1.67.0(@tanstack/react-router@1.67.0(@tanstack/router-generator@1.65.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) axios: specifier: ^1.6.5 version: 1.6.8(debug@4.3.4) @@ -895,9 +907,9 @@ importers: '@tanstack/react-query-devtools': specifier: ^5.37.1 version: 5.37.1(@tanstack/react-query@5.37.1(react@18.2.0))(react@18.2.0) - '@tanstack/router-devtools': - specifier: ^1.29.2 - version: 1.29.2(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/router-plugin': + specifier: ^1.66.1 + version: 1.66.1(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))(webpack-sources@3.2.3) '@types/react': specifier: ^18.2.47 version: 18.2.79 @@ -905,11 +917,11 @@ importers: specifier: ^18.2.18 version: 18.2.25 '@vitejs/plugin-react': - specifier: ^4.2.1 - version: 4.2.1(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + specifier: ^4.3.2 + version: 4.3.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: - specifier: ^5.0.13 - version: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + specifier: ^5.4.9 + version: 5.4.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) apps/vite-ssr: dependencies: @@ -929,20 +941,17 @@ importers: specifier: workspace:* version: link:../../packages/registry '@tanstack/react-query': - specifier: ^5.37.1 - version: 5.37.1(react@18.2.0) + specifier: ^5.59.0 + version: 5.59.14(react@18.2.0) '@tanstack/react-router': - specifier: ^1.28.2 - version: 1.29.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tanstack/react-router-server': - specifier: ^1.28.2 - version: 1.29.2(@testing-library/jest-dom@6.4.2(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)))(@types/node@20.12.7)(encoding@0.1.13)(less@3.11.1)(lightningcss@1.24.1)(preact@10.20.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.14.3)(sass@1.75.0)(terser@5.30.3) - '@tanstack/router-devtools': - specifier: ^1.28.2 - version: 1.29.2(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: ^1.34.9 + version: 1.35.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/router-vite-plugin': - specifier: ^1.28.2 - version: 1.28.2(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + specifier: ^1.34.8 + version: 1.34.8(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@tanstack/start': + specifier: ^1.34.9 + version: 1.35.1(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.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.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) axios: specifier: ^1.6.5 version: 1.6.8(debug@4.3.4) @@ -973,10 +982,13 @@ importers: version: link:../../packages/types '@rollup/plugin-babel': specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(@types/babel__core@7.20.5)(rollup@4.14.3) + version: 6.0.4(@babel/core@7.24.4)(@types/babel__core@7.20.5)(rollup@4.24.0) '@tanstack/react-query-devtools': - specifier: ^5.37.1 - version: 5.37.1(@tanstack/react-query@5.37.1(react@18.2.0))(react@18.2.0) + specifier: ^5.59.0 + version: 5.59.8(@tanstack/react-query@5.59.14(react@18.2.0))(react@18.2.0) + '@tanstack/router-devtools': + specifier: ^1.34.9 + version: 1.35.1(@tanstack/react-router@1.35.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/express': specifier: ^4.17.21 version: 4.17.21 @@ -1060,8 +1072,8 @@ importers: packages/client: dependencies: '@tanstack/react-query': - specifier: ^5.37.1 - version: 5.37.1(react@18.2.0) + specifier: ^5.59.0 + version: 5.59.14(react@18.2.0) axios: specifier: ^1.6.7 version: 1.6.8(debug@4.3.4) @@ -1448,9 +1460,15 @@ importers: '@plone/registry': specifier: workspace:* version: link:../registry + '@tanstack/react-query': + specifier: ^5.59.0 + version: 5.59.14(react@18.2.0) react: specifier: ^16.8.0 || ^17.0.0 || ^18.0.0 version: 18.2.0 + react-aria-components: + specifier: ^1.4.0 + version: 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-dom: specifier: ^16.8.0 || ^17.0.0 || ^18.0.0 version: 18.2.0(react@18.2.0) @@ -2437,9 +2455,6 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@antfu/utils@0.7.7': - resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==} - '@aw-web-design/x-default-browser@1.4.126': resolution: {integrity: sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==} hasBin: true @@ -2451,14 +2466,26 @@ packages: resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.25.7': + resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.24.4': resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.25.8': + resolution: {integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==} + engines: {node: '>=6.9.0'} + '@babel/core@7.24.4': resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} engines: {node: '>=6.9.0'} + '@babel/core@7.25.8': + resolution: {integrity: sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==} + engines: {node: '>=6.9.0'} + '@babel/eslint-parser@7.22.15': resolution: {integrity: sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} @@ -2470,6 +2497,10 @@ packages: resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.25.7': + resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.22.5': resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} @@ -2482,6 +2513,10 @@ packages: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.25.7': + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.24.4': resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==} engines: {node: '>=6.9.0'} @@ -2520,20 +2555,26 @@ packages: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.18.6': - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} - engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.3': resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.25.7': + resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.23.3': resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.25.7': + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.22.5': resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} @@ -2542,6 +2583,10 @@ packages: resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.25.7': + resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.22.20': resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} @@ -2558,6 +2603,10 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} + '@babel/helper-simple-access@7.25.7': + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} @@ -2570,14 +2619,26 @@ packages: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.25.7': + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.7': + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.23.5': resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.25.7': + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.22.20': resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} engines: {node: '>=6.9.0'} @@ -2586,15 +2647,28 @@ packages: resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.25.7': + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.24.2': resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} + '@babel/highlight@7.25.7': + resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.24.4': resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.25.8': + resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4': resolution: {integrity: sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==} engines: {node: '>=6.9.0'} @@ -2783,6 +2857,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.25.7': + resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -2837,6 +2917,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.25.7': + resolution: {integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} @@ -3089,12 +3175,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.25.7': + resolution: {integrity: sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-source@7.24.1': resolution: {integrity: sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-source@7.25.7': + resolution: {integrity: sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx@7.23.4': resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} engines: {node: '>=6.9.0'} @@ -3239,10 +3337,18 @@ packages: resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} + '@babel/template@7.25.7': + resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.24.1': resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.25.7': + resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} + engines: {node: '>=6.9.0'} + '@babel/types@7.20.5': resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==} engines: {node: '>=6.9.0'} @@ -3251,6 +3357,10 @@ packages: resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} + '@babel/types@7.25.8': + resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} + engines: {node: '>=6.9.0'} + '@base2/pretty-print-object@1.0.1': resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} @@ -3299,6 +3409,12 @@ packages: '@cypress/xvfb@1.2.4': resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} + '@deno/shim-deno-test@0.5.0': + resolution: {integrity: sha512-4nMhecpGlPi0cSzT67L+Tm+GOJqvuk8gqHBziqcUQOarnuIax1z96/gJHCSIz2Z0zhxE6Rzwb3IZXPtFh51j+w==} + + '@deno/shim-deno@0.19.1': + resolution: {integrity: sha512-8hYIpmDqpG76sn+UY1853RCi+CI7ZWz9tt37nfyDL8rwr6xbW0+GHUwCLcsGbh1uMIKURuJy6xtrIcnW+a0duA==} + '@discoveryjs/json-ext@0.5.7': resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} @@ -3387,6 +3503,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.17.6': resolution: {integrity: sha512-YnYSCceN/dUzUr5kdtUzB+wZprCafuD89Hs0Aqv9QSdwhYQybhXTaSTcrl6X/aWThn1a/j0eEpUBGOE7269REg==} engines: {node: '>=12'} @@ -3417,6 +3539,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.17.6': resolution: {integrity: sha512-bSC9YVUjADDy1gae8RrioINU6e1lCkg3VGVwm0QQ2E1CWcC4gnMce9+B6RpxuSsrsXsk1yojn7sp1fnG8erE2g==} engines: {node: '>=12'} @@ -3447,6 +3575,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.17.6': resolution: {integrity: sha512-MVcYcgSO7pfu/x34uX9u2QIZHmXAB7dEiLQC5bBl5Ryqtpj9lT2sg3gNDEsrPEmimSJW2FXIaxqSQ501YLDsZQ==} engines: {node: '>=12'} @@ -3477,6 +3611,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.17.6': resolution: {integrity: sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==} engines: {node: '>=12'} @@ -3507,6 +3647,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.17.6': resolution: {integrity: sha512-xh2A5oPrYRfMFz74QXIQTQo8uA+hYzGWJFoeTE8EvoZGHb+idyV4ATaukaUvnnxJiauhs/fPx3vYhU4wiGfosg==} engines: {node: '>=12'} @@ -3537,6 +3683,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.17.6': resolution: {integrity: sha512-EnUwjRc1inT4ccZh4pB3v1cIhohE2S4YXlt1OvI7sw/+pD+dIE4smwekZlEPIwY6PhU6oDWwITrQQm5S2/iZgg==} engines: {node: '>=12'} @@ -3567,6 +3719,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.17.6': resolution: {integrity: sha512-Uh3HLWGzH6FwpviUcLMKPCbZUAFzv67Wj5MTwK6jn89b576SR2IbEp+tqUHTr8DIl0iDmBAf51MVaP7pw6PY5Q==} engines: {node: '>=12'} @@ -3597,6 +3755,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.17.6': resolution: {integrity: sha512-bUR58IFOMJX523aDVozswnlp5yry7+0cRLCXDsxnUeQYJik1DukMY+apBsLOZJblpH+K7ox7YrKrHmJoWqVR9w==} engines: {node: '>=12'} @@ -3627,6 +3791,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.17.6': resolution: {integrity: sha512-7YdGiurNt7lqO0Bf/U9/arrPWPqdPqcV6JCZda4LZgEn+PTQ5SMEI4MGR52Bfn3+d6bNEGcWFzlIxiQdS48YUw==} engines: {node: '>=12'} @@ -3657,6 +3827,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.17.6': resolution: {integrity: sha512-ujp8uoQCM9FRcbDfkqECoARsLnLfCUhKARTP56TFPog8ie9JG83D5GVKjQ6yVrEVdMie1djH86fm98eY3quQkQ==} engines: {node: '>=12'} @@ -3687,6 +3863,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.17.6': resolution: {integrity: sha512-y2NX1+X/Nt+izj9bLoiaYB9YXT/LoaQFYvCkVD77G/4F+/yuVXYCWz4SE9yr5CBMbOxOfBcy/xFL4LlOeNlzYQ==} engines: {node: '>=12'} @@ -3717,6 +3899,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.17.6': resolution: {integrity: sha512-09AXKB1HDOzXD+j3FdXCiL/MWmZP0Ex9eR8DLMBVcHorrWJxWmY8Nms2Nm41iRM64WVx7bA/JVHMv081iP2kUA==} engines: {node: '>=12'} @@ -3747,6 +3935,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.17.6': resolution: {integrity: sha512-AmLhMzkM8JuqTIOhxnX4ubh0XWJIznEynRnZAVdA2mMKE6FAfwT2TWKTwdqMG+qEaeyDPtfNoZRpJbD4ZBv0Tg==} engines: {node: '>=12'} @@ -3777,6 +3971,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.17.6': resolution: {integrity: sha512-Y4Ri62PfavhLQhFbqucysHOmRamlTVK10zPWlqjNbj2XMea+BOs4w6ASKwQwAiqf9ZqcY9Ab7NOU4wIgpxwoSQ==} engines: {node: '>=12'} @@ -3807,6 +4007,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.17.6': resolution: {integrity: sha512-SPUiz4fDbnNEm3JSdUW8pBJ/vkop3M1YwZAVwvdwlFLoJwKEZ9L98l3tzeyMzq27CyepDQ3Qgoba44StgbiN5Q==} engines: {node: '>=12'} @@ -3837,6 +4043,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.17.6': resolution: {integrity: sha512-a3yHLmOodHrzuNgdpB7peFGPx1iJ2x6m+uDvhP2CKdr2CwOaqEFMeSqYAHU7hG+RjCq8r2NFujcd/YsEsFgTGw==} engines: {node: '>=12'} @@ -3867,6 +4079,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-x64@0.17.6': resolution: {integrity: sha512-EanJqcU/4uZIBreTrnbnre2DXgXSa+Gjap7ifRfllpmyAU7YMvaXmljdArptTHmjrkkKm9BK6GH5D5Yo+p6y5A==} engines: {node: '>=12'} @@ -3897,6 +4115,18 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.17.6': resolution: {integrity: sha512-xaxeSunhQRsTNGFanoOkkLtnmMn5QbA0qBhNet/XLVsc+OVkpIWPHcr3zTW2gxVU5YOHFbIHR9ODuaUdNza2Vw==} engines: {node: '>=12'} @@ -3927,6 +4157,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.17.6': resolution: {integrity: sha512-gnMnMPg5pfMkZvhHee21KbKdc6W3GR8/JuE0Da1kjwpK6oiFU3nqfHuVPgUX2rsOx9N2SadSQTIYV1CIjYG+xw==} engines: {node: '>=12'} @@ -3957,6 +4193,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.17.6': resolution: {integrity: sha512-G95n7vP1UnGJPsVdKXllAJPtqjMvFYbN20e8RK8LVLhlTiSOH1sd7+Gt7rm70xiG+I5tM58nYgwWrLs6I1jHqg==} engines: {node: '>=12'} @@ -3987,6 +4229,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.17.6': resolution: {integrity: sha512-96yEFzLhq5bv9jJo5JhTs1gI+1cKQ83cUpyxHuGqXVwQtY5Eq54ZEsKs8veKtiKwlrNimtckHEkj4mRh4pPjsg==} engines: {node: '>=12'} @@ -4017,6 +4265,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.17.6': resolution: {integrity: sha512-n6d8MOyUrNp6G4VSpRcgjs5xj4A91svJSaiwLIDWVWEsZtpN5FA9NlBbZHDmAJc2e8e6SF4tkBD3HAvPF+7igA==} engines: {node: '>=12'} @@ -4047,6 +4301,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4159,6 +4419,9 @@ packages: '@internationalized/string@3.2.4': resolution: {integrity: sha512-BcyadXPn89Ae190QGZGDUZPqxLj/xsP4U1Br1oSy8yfIjmpJ8cJtGYleaodqW/EmzFjwELtwDojLkf3FhV6SjA==} + '@ioredis/commands@1.2.0': + resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -5744,16 +6007,17 @@ packages: peerDependencies: redux: ^3.1.0 || ^4.0.0 || ^5.0.0 - '@remix-run/css-bundle@2.8.1': - resolution: {integrity: sha512-rn72xyUJ+rR5I0IxjlDWPPBddV1kpLvOT2FY9SMIUTFqyxq3ZK2W7FCtFzBt2JZQGZ9oDYidXYMWkW6tXY//rg==} + '@remix-run/css-bundle@2.13.1': + resolution: {integrity: sha512-ukams+HcEaovitySAmH2Q8Gg8c6A3fKr5RJEpAn0NYk1Cc2t0fH05GVAGToOgtWeFeOUjREXAqk3+C76o0cHkg==} engines: {node: '>=18.0.0'} - '@remix-run/dev@2.8.1': - resolution: {integrity: sha512-qFt4jAsAJeIOyg6ngeSnTG/9Z5N9QJfeThP/8wRHc1crqYgTiEtcI3DZ8WlAXjVSF5emgn/ZZKqzLAI02OgMfQ==} + '@remix-run/dev@2.13.1': + resolution: {integrity: sha512-7+06Dail6zMyRlRvgrZ4cmQjs2gUb+M24iP4jbmql+0B7VAAPwzCRU0x+BF5z8GSef13kDrH3iXv/BQ2O2yOgw==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@remix-run/serve': ^2.8.1 + '@remix-run/react': ^2.13.1 + '@remix-run/serve': ^2.13.1 typescript: ^5.1.0 vite: ^5.1.0 wrangler: ^3.28.2 @@ -5767,18 +6031,18 @@ packages: wrangler: optional: true - '@remix-run/express@2.8.1': - resolution: {integrity: sha512-p1eo8uwZk8uLihSDpUnPOPsTDfghWikVPQfa+e0ZMk6tnJCjcpHAyENKDFtn9vDh9h7YNUg6A7+19CStHgxd7Q==} + '@remix-run/express@2.13.1': + resolution: {integrity: sha512-yl3/BSJ8eyvwUyWCLDq3NlS81mZFll9hnADNuSCCBrQgkMhEx7stk5JUmWdvmcmGqHw04Ahkq07ZqJeD4F1FMA==} engines: {node: '>=18.0.0'} peerDependencies: - express: ^4.17.1 + express: ^4.20.0 typescript: ^5.1.0 peerDependenciesMeta: typescript: optional: true - '@remix-run/node@2.8.1': - resolution: {integrity: sha512-ddCwBVlfLvRxTQJHPcaM1lhfMjsFYG3EGmYpWJIWnnzDX5EbX9pUNHBWisMuH1eA0c7pbw0PbW0UtCttKYx2qg==} + '@remix-run/node@2.13.1': + resolution: {integrity: sha512-2ly7bENj2n2FNBdEN60ZEbNCs5dAOex/QJoo6EZ8RNFfUQxVKAZkMwfQ4ETV2SLWDgkRLj3Jo5n/dx7O2ZGhGw==} engines: {node: '>=18.0.0'} peerDependencies: typescript: ^5.1.0 @@ -5786,8 +6050,8 @@ packages: typescript: optional: true - '@remix-run/react@2.8.1': - resolution: {integrity: sha512-HTPm1U8+xz2jPaVjZnssrckfmFMA8sUZUdaWnoF5lmLWdReqcQv+XlBhIrQQ3jO9L8iYYdnzaSZZcRFYSdpTYg==} + '@remix-run/react@2.13.1': + resolution: {integrity: sha512-kZevCoKMz0ZDOOzTnG95yfM7M9ju38FkWNY1wtxCy+NnUJYrmTerGQtiBsJgMzYD6i29+w4EwoQsdqys7DmMSg==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0.0 @@ -5797,21 +6061,17 @@ packages: typescript: optional: true - '@remix-run/router@1.15.3': - resolution: {integrity: sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==} + '@remix-run/router@1.20.0': + resolution: {integrity: sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==} engines: {node: '>=14.0.0'} - '@remix-run/router@1.15.3-pre.0': - resolution: {integrity: sha512-JUQb6sztqJpRbsdKpx3D4+6eaGmHU4Yb/QeKrES/ZbLuijlZMOmZ+gV0ohX5vrRDnJHJmcQPq3Tpk0GGPNM9gg==} - engines: {node: '>=14.0.0'} - - '@remix-run/serve@2.8.1': - resolution: {integrity: sha512-PyCV7IMnRshwfFw7JJ2hZJppX88VAhZyYjeTAmYb6PK7IDtdmqUf5eOrYDi8gCu914C+aZRu6blxpLRlpyCY8Q==} + '@remix-run/serve@2.13.1': + resolution: {integrity: sha512-lKCU1ZnHaGknRAYII5PQOGch9xzK3Q68mcyN8clN6WoKQTn5fvWVE1nEDd1L7vyt5LPVI2b7HNQtVMow1g1vHg==} engines: {node: '>=18.0.0'} hasBin: true - '@remix-run/server-runtime@2.8.1': - resolution: {integrity: sha512-fh4SOEoONrN73Kvzc0gMDCmYpVRVbvoj9j3BUXHAcn0An8iX+HD/22gU7nTkIBzExM/F9xgEcwTewOnWqLw0Bg==} + '@remix-run/server-runtime@2.13.1': + resolution: {integrity: sha512-2DfBPRcHKVzE4bCNsNkKB50BhCCKF73x+jiS836OyxSIAL+x0tguV2AEjmGXefEXc5AGGzoxkus0AUUEYa29Vg==} engines: {node: '>=18.0.0'} peerDependencies: typescript: ^5.1.0 @@ -5911,15 +6171,6 @@ packages: rollup: optional: true - '@rollup/plugin-wasm@6.2.2': - resolution: {integrity: sha512-gpC4R1G9Ni92ZIRTexqbhX7U+9estZrbhP+9SRb0DW9xpB9g7j34r+J2hqrcW/lRI7dJaU84MxZM0Rt82tqYPQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/pluginutils@4.2.1': resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} @@ -6194,11 +6445,6 @@ packages: '@sinonjs/text-encoding@0.7.2': resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} - '@solidjs/router@0.8.4': - resolution: {integrity: sha512-Gi/WVoVseGMKS1DBdT3pNAMgOzEOp6Q3dpgNd2mW9GUEnVocPmtyBjDvXwN6m7tjSGsqqfqJFXk7bm1hxabSRw==} - peerDependencies: - solid-js: ^1.5.3 - '@storybook/addon-actions@8.0.8': resolution: {integrity: sha512-F3qpN0n53d058EroW1A2IlzrsFNR5p2srLY4FmXB80nxAKV8oqoDI4jp15zYlf8ThcJoQl36plT8gx3r1BpANA==} @@ -6647,8 +6893,12 @@ packages: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} - '@tanstack/history@1.28.9': - resolution: {integrity: sha512-WgTFJhHaZnGZPyt0H11xFhGGDj1MtA1mrUmdAjB/nhVpmsAYXsSB5O+hkF9N66u7MjbNb405wTb9diBsztvI5w==} + '@tanstack/history@1.31.16': + resolution: {integrity: sha512-rahAZXlR879P7dngDH7BZwGYiODA9D5Hqo6nUHn9GAURcqZU5IW0ZiT54dPtV5EPES7muZZmknReYueDHs7FFQ==} + engines: {node: '>=12'} + + '@tanstack/history@1.61.1': + resolution: {integrity: sha512-2CqERleeqO3hkhJmyJm37tiL3LYgeOpmo8szqdjgtnnG0z7ZpvzkZz6HkfOr9Ca/ha7mhAiouSvLYuLkM37AMg==} engines: {node: '>=12'} '@tanstack/query-core@5.36.1': @@ -6691,19 +6941,23 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-server@1.29.2': - resolution: {integrity: sha512-wDLWvGsKir15jePWZrjmay7pRF78pjZ1jgXy6poVstG8LSFg3gF+j1WXZuqkp/cI7TA3qaVO5RMmx32OM7CTNw==} + '@tanstack/react-router@1.35.1': + resolution: {integrity: sha512-hdQynBRSnOF/D06INIAxQY8gR36I/RIVdrIyQeoFCqYZEWvjEtGy7yWtXUbpbb4paisdHnH1rbBHlNk+UYBXvQ==} engines: {node: '>=12'} peerDependencies: - react: '>=18' - react-dom: '>=18' + react: '>=16.8' + react-dom: '>=16.8' - '@tanstack/react-router@1.29.2': - resolution: {integrity: sha512-rSSLyI+AaVg79qeeH5fH6KA8ZQkckinH9mFdLrGUhA4wX2B7Az7eloepha2TqvsFJon0HgeV7heMqPkq9nyAeg==} + '@tanstack/react-router@1.67.0': + resolution: {integrity: sha512-8AmtDpJZpoC+TnHf9qS0FbRz7qnLkQ336Oi6fyhfbHH+BPvf27tlj+YxbVrt7sVrdvI8n3AZveUGx38/JUkLDQ==} engines: {node: '>=12'} peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' + '@tanstack/router-generator': 1.65.0 + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + '@tanstack/router-generator': + optional: true '@tanstack/react-store@0.2.1': resolution: {integrity: sha512-tEbMCQjbeVw9KOP/202LfqZMSNAVi6zYkkp1kBom8nFuMx/965Hzes3+6G6b/comCwVxoJU8Gg9IrcF8yRPthw==} @@ -6711,24 +6965,72 @@ packages: react: '>=16' react-dom: '>=16' - '@tanstack/router-devtools@1.29.2': - resolution: {integrity: sha512-8w8wH4++U9WU/CFWN+GbKnoxPeZjTCGX8T9K3qsPYi5dp43H0599RkfQj7nch0fecT3S9HLWIGWdIX74NEU0Jw==} + '@tanstack/react-store@0.5.5': + resolution: {integrity: sha512-1orYXGatBqXCYKuroFwV8Ll/6aDa5E3pU6RR4h7RvRk7TmxF1+zLCsWALZaeijXkySNMGmvawSbUXRypivg2XA==} + peerDependencies: + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + + '@tanstack/router-devtools@1.35.1': + resolution: {integrity: sha512-lwsZAwrFpWHYYMkJI37uqy99aCIMCgQmZ5AHmGbYTTo+Z23GUdgnb2AE+OO2Pd0zurIzEYjRIX8OOGMzaPy1Kw==} engines: {node: '>=12'} peerDependencies: + '@tanstack/react-router': ^1.35.1 react: '>=16.8' react-dom: '>=16.8' - '@tanstack/router-generator@1.28.2': - resolution: {integrity: sha512-CBvLWduHLwr7EIMUqPFGWrHMR3+GsSWTk+zjlEmHT0IWVKhQyTAz21V3OE3Y6RJ+yD6S6WZV1sq8+09HFA0pYw==} + '@tanstack/router-devtools@1.67.0': + resolution: {integrity: sha512-20mk4wGX7FAgJNnjsSb2RJH2Z5BMNrxdNX3CT41QMp83S/SXlnRaknxfbfWuoToQtQTHvyWRV0ZYpMIvG5Y6Zg==} engines: {node: '>=12'} + peerDependencies: + '@tanstack/react-router': ^1.67.0 + react: '>=18' + react-dom: '>=18' - '@tanstack/router-vite-plugin@1.28.2': - resolution: {integrity: sha512-LJLGg1apPo9KLgaib+JNcy7rSPXT0fVp8qvU9nQKf28xdTyeEk9bVDQRGCjy4pKflopufSoM0nXjFJjpGf+5Aw==} + '@tanstack/router-generator@1.34.8': + resolution: {integrity: sha512-xi0otLis4zQ8lYVgvNfUTDHKnboL2swXpHcLiG+bKYDihPnw4r3qRO0ULGsqV1n/w6yZAaQ2tZwvZ7Zf0G2pPg==} engines: {node: '>=12'} + '@tanstack/router-generator@1.65.0': + resolution: {integrity: sha512-N2H2cHBbUNLqx/ySd5g0R1GR8gGc4UagoBWmQKaTD5gHjFwWojJhigllZlQN4U1nxZLb4yJ3eJYuxRQZCoqaJw==} + engines: {node: '>=12'} + + '@tanstack/router-plugin@1.66.1': + resolution: {integrity: sha512-0oeO4x1AKwL9lP9WMJ4ysVcNCUdXHffjFKBWYaEt1Cj2RkWgaWXtSzgg3dhFFemYgn/Zm1NOGQlA4f6/q/PPZw==} + engines: {node: '>=12'} + peerDependencies: + '@rsbuild/core': '>=1.0.2' + vite: '>=5.0.0' + webpack: '>=5.92.0' + peerDependenciesMeta: + '@rsbuild/core': + optional: true + vite: + optional: true + webpack: + optional: true + + '@tanstack/router-vite-plugin@1.34.8': + resolution: {integrity: sha512-FZRl7GVda/1NMEbnalXhYI2e9Qe8MduxXRNZ2cJMYgPR/FxMiao+XQAN+mTD4OoMxJ8gKY+IshgRxCc3xwu6bA==} + engines: {node: '>=12'} + + '@tanstack/start@1.35.1': + resolution: {integrity: sha512-tcknIAM2HXMa8FJvyHaLvG0vpONX7eJ6ZqOcNWsMvIAgh7A9HNy+3efCB8/Pspyt0Cr7ulwtPsZU21r7PlaG7A==} + engines: {node: '>=12'} + peerDependencies: + react: '>=18.0.0 || >=19.0.0' + react-dom: '>=18.0.0 || >=19.0.0' + '@tanstack/store@0.1.3': resolution: {integrity: sha512-GnolmC8Fr4mvsHE1fGQmR3Nm0eBO3KnZjDU0a+P3TeQNM/dDscFGxtA7p31NplQNW3KwBw4t1RVFmz0VeKLxcw==} + '@tanstack/store@0.5.5': + resolution: {integrity: sha512-EOSrgdDAJExbvRZEQ/Xhh9iZchXpMN+ga1Bnk8Nmygzs8TfiE6hbzThF+Pr2G19uHL6+DTDTHhJ8VQiOd7l4tA==} + + '@tanstack/virtual-file-routes@1.64.0': + resolution: {integrity: sha512-soW+gE9QTmMaqXM17r7y1p8NiQVIIECjdTaYla8BKL5Flj030m3KuxEQoiG1XgjtA0O7ayznFz2YvPcXIy3qDg==} + engines: {node: '>=12'} + '@testing-library/cypress@10.0.1': resolution: {integrity: sha512-e8uswjTZIBhaIXjzEcrQQ8nHRWHgZH7XBxKuIWxZ/T7FxfWhCR48nFhUX5nfPizjVOKSThEfOSv67jquc1ASkw==} engines: {node: '>=12', npm: '>=6'} @@ -6873,6 +7175,9 @@ packages: '@types/babel__traverse@7.20.5': resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} @@ -7362,24 +7667,45 @@ packages: '@vanilla-extract/private@1.0.4': resolution: {integrity: sha512-8FGD6AejeC/nXcblgNCM5rnZb9KXa4WNkR03HCWtdJBpANjTgjHEglNLFnhuvdQ78tC6afaxBPI+g7F2NX3tgg==} - '@vercel/nft@0.24.4': - resolution: {integrity: sha512-KjYAZty7boH5fi5udp6p+lNu6nawgs++pHW+3koErMgbRkkHuToGX/FwjN5clV1FcaM3udfd4zW/sUapkMgpZw==} + '@vercel/nft@0.26.5': + resolution: {integrity: sha512-NHxohEqad6Ra/r4lGknO52uc/GrWILXAMs1BB4401GTqww0fw1bAqzpG1XHuDO+dprg4GvsD9ZLLSsdo78p9hQ==} engines: {node: '>=16'} hasBin: true - '@vinxi/devtools@0.2.0': - resolution: {integrity: sha512-LpQp5zbiBhV4eo2w6AiJFtpZZj4LaRBOnzggIPTeSJYvgrxRMAqe/34Har3vVo+b7sPOjxFbE1zHZhLzaAcidw==} - '@vinxi/listhen@1.5.6': resolution: {integrity: sha512-WSN1z931BtasZJlgPp704zJFnQFRg7yzSjkm3MzAWQYe4uXFXlFr1hc5Ac2zae5/HDOz5x1/zDM5Cb54vTCnWw==} hasBin: true + '@vinxi/plugin-directives@0.3.1': + resolution: {integrity: sha512-4qz5WifjmJ864VS8Ik9nUG0wAkt/xIcxFpP29RXogGLgccRnceBpWQi+ghw5rm0F6LP/YMAhhO5iFORXclWd0Q==} + peerDependencies: + vinxi: ^0.3.10 + + '@vinxi/react@0.2.2': + resolution: {integrity: sha512-70tVy08zrWp3b8FbUuUKXsESmUC2D16ddy/Y++C3GA0Zcx61ax5WnNXMVSLWv2WQU3CQEV0ObnpVzcfuxSYMvw==} + + '@vinxi/server-components@0.3.3': + resolution: {integrity: sha512-xaW92nj9HUMLyswPcCmsIXOsS3TJll0m9u3WEjWjLrtZWheHggina6+kTCSeltp/Qe8WlUfNU5G02Xy8L4xQxA==} + peerDependencies: + vinxi: ^0.3.10 + + '@vinxi/server-functions@0.3.2': + resolution: {integrity: sha512-PoARb1X480UE9jysPqltpzginBftna34GmZ3HyvRT+pnPfsGcuHOzZe/a18V/K04qk2yMRd7eeW42JF5O+wunw==} + peerDependencies: + vinxi: ^0.3.10 + '@vitejs/plugin-react@4.2.1': resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 + '@vitejs/plugin-react@4.3.2': + resolution: {integrity: sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + '@vitest/coverage-v8@1.5.0': resolution: {integrity: sha512-1igVwlcqw1QUMdfcMlzzY4coikSIBN944pkueGi0pawrX5I5Z+9hxdTR+w3Sg6Q3eZhvdMAs8ZaF9JuTG1uYOQ==} peerDependencies: @@ -7610,11 +7936,25 @@ packages: peerDependencies: acorn: ^8 + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-loose@8.4.0: + resolution: {integrity: sha512-M0EUka6rb+QC4l9Z3T0nJEzNOO7JcoJlYMrBlyBCiFSXRyxjLKayd4TbQs2FDRWQU1h9FR7QVNHt+PEaoNL5rQ==} + engines: {node: '>=0.4.0'} + + acorn-typescript@1.4.13: + resolution: {integrity: sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==} + peerDependencies: + acorn: '>=8.9.0' + acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} @@ -7638,6 +7978,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + add-dom-event-listener@1.1.0: resolution: {integrity: sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==} @@ -7800,13 +8145,13 @@ packages: arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - archiver-utils@4.0.1: - resolution: {integrity: sha512-Q4Q99idbvzmgCTEAAhi32BkOyq8iVI5EwdO0PmBDSGIzzjYNdcFn7Q7k3OzbLy4kLUPXfJtG6fO2RjftXbobBg==} - engines: {node: '>= 12.0.0'} + archiver-utils@5.0.2: + resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} + engines: {node: '>= 14'} - archiver@6.0.2: - resolution: {integrity: sha512-UQ/2nW7NMl1G+1UnrLypQw1VdT9XZg/ECcKPq7l+STzStrSivFIXIp34D8M5zeNGW5NoOupdYCHv6VySCPNNlw==} - engines: {node: '>= 12.0.0'} + archiver@7.0.1: + resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} + engines: {node: '>= 14'} are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} @@ -8059,6 +8404,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + babel-dead-code-elimination@1.0.6: + resolution: {integrity: sha512-JxFi9qyRJpN0LjEbbjbN8g0ux71Qppn9R8Qe3k6QzHg2CaKsbUQtbn307LQGiDLGjV6JCtEFqfxzVig9MyDCHQ==} + babel-helper-function-name@6.24.1: resolution: {integrity: sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==} @@ -8106,11 +8454,6 @@ packages: resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} engines: {node: '>= 10.14.2'} - babel-plugin-jsx-dom-expressions@0.37.19: - resolution: {integrity: sha512-nef2eLpWBgFggwrYwN6O3dNKn3RnlX6n4DIamNEAeHwp03kVQUaKUiLaEPnHPJHwxie1KwPelyIY9QikU03vUA==} - peerDependencies: - '@babel/core': ^7.20.12 - babel-plugin-lodash@3.3.4: resolution: {integrity: sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==} @@ -8189,11 +8532,6 @@ packages: babel-preset-react-app@10.0.1: resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} - babel-preset-solid@1.8.16: - resolution: {integrity: sha512-b4HFg/xaKM+H3Tu5iUlZ/43TJOZnhi85xrm3JrXDQ0s4cmtmU37bXXYzb2m55G4QKiFjxLAjvb7sUorPrAMs5w==} - peerDependencies: - '@babel/core': ^7.0.0 - babel-runtime@6.26.0: resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} @@ -8279,9 +8617,6 @@ packages: bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - birpc@0.2.17: - resolution: {integrity: sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==} - bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -8304,6 +8639,10 @@ packages: resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + bonjour-service@1.2.1: resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} @@ -8384,6 +8723,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.24.0: + resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} @@ -8394,6 +8738,10 @@ packages: buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} + buffer-equal-constant-time@1.0.1: resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=} @@ -8547,6 +8895,9 @@ packages: caniuse-lite@1.0.30001611: resolution: {integrity: sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==} + caniuse-lite@1.0.30001668: + resolution: {integrity: sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==} + capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} engines: {node: 6.* || 8.* || >= 10.*} @@ -8787,6 +9138,10 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + cluster-key-slot@1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + engines: {node: '>=0.10.0'} + cmd-shim@5.0.0: resolution: {integrity: sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -8921,9 +9276,9 @@ packages: compose-function@3.0.3: resolution: {integrity: sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==} - compress-commons@5.0.3: - resolution: {integrity: sha512-/UIcLWvwAQyVibgpQDPtfNM3SvqN7G9elAPAV7GM0L53EbNWwWiCsWtK8Fwed/APEbptPHXs5PuW+y8Bq8lFTA==} - engines: {node: '>= 12.0.0'} + compress-commons@6.0.2: + resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} + engines: {node: '>= 14'} compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} @@ -9040,6 +9395,10 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + cookiejar@2.1.4: resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} @@ -9119,9 +9478,9 @@ packages: engines: {node: '>=0.8'} hasBin: true - crc32-stream@5.0.1: - resolution: {integrity: sha512-lO1dFui+CEUh/ztYIpgpKItKW9Bb4NWakCRJrnqAbFIYD+OZAwb2VfD5T5eXMw2FNcsDHkQcNl/Wh3iVXYwU6g==} - engines: {node: '>= 12.0.0'} + crc32-stream@6.0.0: + resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} + engines: {node: '>= 14'} create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} @@ -9132,6 +9491,10 @@ packages: create-hmac@1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + croner@8.0.2: + resolution: {integrity: sha512-HgSdlSUX8mIgDTTiQpWUP4qY4IFRMsduPCYdca34Pelt8MVdxdaDOzreFtCscA6R+cRZd7UbD1CD3uyx6J3X1A==} + engines: {node: '>=18.0'} + cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} @@ -9370,9 +9733,26 @@ packages: dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + dax-sh@0.39.2: + resolution: {integrity: sha512-gpuGEkBQM+5y6p4cWaw9+ePy5TNon+fdwFVtTI8leU3UhwhsBfPewRxMXGuQNC+M2b/MDGMlfgpqynkcd0C3FQ==} + dayjs@1.11.10: resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + db0@0.1.4: + resolution: {integrity: sha512-Ft6eCwONYxlwLjBXSJxw0t0RYtA5gW9mq8JfBXn9TtC0nDPlqePAhpv9v4g9aONBi6JI1OXHTKKkUYGd+BOrCA==} + peerDependencies: + '@libsql/client': ^0.5.2 + better-sqlite3: ^9.4.3 + drizzle-orm: ^0.29.4 + peerDependenciesMeta: + '@libsql/client': + optional: true + better-sqlite3: + optional: true + drizzle-orm: + optional: true + de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} @@ -9584,6 +9964,10 @@ packages: delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -9805,10 +10189,6 @@ packages: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} - dts-buddy@0.2.5: - resolution: {integrity: sha512-66HTWHyXS3JwgpRwcu88rsDyZfPUb0oPYmiNg5f4BgCAFTVorJXpygf339QyXOXX1PuqHpvB+qo7O+8Ni1vXUQ==} - hasBin: true - duplexer3@0.1.5: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} @@ -9838,6 +10218,9 @@ packages: electron-to-chromium@1.4.745: resolution: {integrity: sha512-tRbzkaRI5gbUn5DEvF0dV4TQbMZ5CLkWeTAXmpC9IrYT+GE+x76i9p+o3RJ5l9XmdQlI1pPhVtE9uNcJJ0G0EA==} + electron-to-chromium@1.5.38: + resolution: {integrity: sha512-VbeVexmZ1IFh+5EfrYz1I0HTzHVIlJa112UEWhciPyeOcKJGeTv6N8WnG4wsQB81DGCaVEGhpSb6o6a8WYFXXg==} + elliptic@6.5.5: resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} @@ -9862,6 +10245,10 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -9916,9 +10303,6 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - error-stack-parser-es@0.1.1: - resolution: {integrity: sha512-g/9rfnvnagiNf+DRMHEVGuGuIBlCIMDFoTA616HaP2l9PlCjGjVhD98PNbVSJvmK4TttqT5mV5tInMhoFgi+aA==} - error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -10025,10 +10409,19 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-goat@2.1.1: resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} engines: {node: '>=8'} @@ -10433,6 +10826,10 @@ packages: resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} engines: {node: '>= 0.10.0'} + express@4.21.1: + resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} + engines: {node: '>= 0.10.0'} + ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} @@ -10593,6 +10990,10 @@ packages: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + find-cache-dir@2.1.0: resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} engines: {node: '>=6'} @@ -10884,10 +11285,6 @@ packages: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} - get-port@6.1.2: - resolution: {integrity: sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - get-port@7.1.0: resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} engines: {node: '>=16'} @@ -10919,6 +11316,9 @@ packages: get-tsconfig@4.7.3: resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + get-uri@6.0.3: resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} engines: {node: '>= 14'} @@ -11044,9 +11444,6 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} - globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - globby@11.0.1: resolution: {integrity: sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==} engines: {node: '>=10'} @@ -11074,6 +11471,11 @@ packages: peerDependencies: csstype: ^3.0.10 + goober@2.1.16: + resolution: {integrity: sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==} + peerDependencies: + csstype: ^3.0.10 + gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} @@ -11124,9 +11526,6 @@ packages: resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - h3@1.10.1: - resolution: {integrity: sha512-UBAUp47hmm4BB5/njB4LrEa9gpuvZj4/Qf/ynSMzO6Ku2RXaouxEfiG2E2IFnv6fxbhAkzjasDxmo6DFdEeXRg==} - h3@1.11.1: resolution: {integrity: sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A==} @@ -11302,9 +11701,6 @@ packages: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} - html-entities@2.3.3: - resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} - html-entities@2.5.2: resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} @@ -11540,6 +11936,9 @@ packages: engines: {node: '>=8'} hasBin: true + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -11621,6 +12020,10 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + ioredis@5.4.1: + resolution: {integrity: sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==} + engines: {node: '>=12.22.0'} + ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} @@ -12015,10 +12418,6 @@ packages: resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} engines: {node: '>= 0.4'} - is-what@4.1.16: - resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} - engines: {node: '>=12.13'} - is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -12067,9 +12466,17 @@ packages: resolution: {integrity: sha512-8ZvOWUA68kyJO4hHJdWjyreq7TYNWTS9y15IzeqVdKxR9pPr3P/3r9AHcoIv9M0Rllkao5qWz2v1lmcyKIVCzQ==} engines: {node: '>=18'} + isbot@5.1.9: + resolution: {integrity: sha512-NITFjA2Jpcv1qWCpzqZQoW/66H3xXbF+n4yJIXr/gIn/wgaSKOPXTTczswiKMYx+BVymG9lm30ZGPtFWqAD4hA==} + engines: {node: '>=18'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + isobject@2.1.0: resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} engines: {node: '>=0.10.0'} @@ -12842,9 +13249,6 @@ packages: resolution: {integrity: sha512-rY3ZMnUkMfaZEix1fp/pjdwsHJkDQcE0UEcXHuYI77J03K8gddL3iD+UuJCLAmT2Z2oz5A70/0QS4J9OLCCvXw==} engines: {node: '>0.8.x'} - locate-character@3.0.0: - resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} - locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -12881,6 +13285,9 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + lodash.difference@4.5.0: resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} @@ -12890,6 +13297,9 @@ packages: lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + lodash.isarguments@3.1.0: + resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} @@ -13019,6 +13429,9 @@ packages: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} + magicast@0.2.11: + resolution: {integrity: sha512-6saXbRDA1HMkqbsvHOU6HBjCVgZT460qheRkLhJQHWAbhXoWESI3Kn/dGGXyKs15FFKR85jsUqFx2sMK0wy/5g==} + magicast@0.3.4: resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==} @@ -13221,13 +13634,12 @@ packages: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} - merge-anything@5.1.7: - resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} - engines: {node: '>=12.13'} - merge-descriptors@1.0.1: resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -13455,6 +13867,11 @@ packages: engines: {node: '>=10.0.0'} hasBin: true + mime@4.0.3: + resolution: {integrity: sha512-KgUb15Oorc0NEKPbvfa0wRU+PItIEZmiv+pyAO2i0oTIVTJhlzMclU7w4RXWQrSOVH5ax/p/CkIO7KI4OyFJTQ==} + engines: {node: '>=16'} + hasBin: true + mimic-fn@1.2.0: resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} engines: {node: '>=4'} @@ -13752,8 +14169,8 @@ packages: nise@5.1.9: resolution: {integrity: sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==} - nitropack@2.8.1: - resolution: {integrity: sha512-pODv2kEEzZSDQR+1UMXbGyNgMedUDq/qUomtiAnQKQvLy52VGlecXO1xDfH3i0kP1yKEcKTnWsx1TAF5gHM7xQ==} + nitropack@2.9.6: + resolution: {integrity: sha512-HP2PE0dREcDIBVkL8Zm6eVyrDd10/GI9hTL00PHvjUM8I9Y/2cv73wRDmxNyInfrx/CJKHATb2U/pQrqpzJyXA==} engines: {node: ^16.11.0 || >=17.0.0} hasBin: true peerDependencies: @@ -13846,6 +14263,9 @@ packages: node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} @@ -14365,6 +14785,9 @@ packages: resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} engines: {node: '>=16 || 14 >=14.17'} + path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} + path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -14775,9 +15198,6 @@ packages: resolution: {integrity: sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==} engines: {node: '>=12.0.0'} - preact@10.20.2: - resolution: {integrity: sha512-S1d1ernz3KQ+Y2awUxKakpfOg2CEmJmwOP+6igPx6dgr6pgDvenqYviyokWso2rhHvGtTlWWnJDa7RaPbQerTg==} - preferred-pm@3.1.4: resolution: {integrity: sha512-lEHd+yEm22jXdCphDrkvIJQU66EuLojPPtvZkpKIkiD+l0DMThF/niqZKJSoU8Vl7iuvtmzyMhir9LdVy5WMnA==} engines: {node: '>=10'} @@ -14809,6 +15229,11 @@ packages: engines: {node: '>=14'} hasBin: true + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + pretty-bytes@5.3.0: resolution: {integrity: sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==} engines: {node: '>=6'} @@ -15007,6 +15432,10 @@ packages: resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} engines: {node: '>=0.6'} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + qs@6.5.3: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} @@ -15366,8 +15795,8 @@ packages: peerDependencies: react: '>=15' - react-router-dom@6.22.3: - resolution: {integrity: sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==} + react-router-dom@6.27.0: + resolution: {integrity: sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' @@ -15384,8 +15813,8 @@ packages: peerDependencies: react: '>=15' - react-router@6.22.3: - resolution: {integrity: sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==} + react-router@6.27.0: + resolution: {integrity: sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' @@ -15569,6 +15998,14 @@ packages: resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} engines: {node: '>=12'} + redis-errors@1.2.0: + resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} + engines: {node: '>=4'} + + redis-parser@3.0.0: + resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} + engines: {node: '>=4'} + reduce-reducers@1.0.4: resolution: {integrity: sha512-Mb2WZ2bJF597exiqX7owBzrqJ74DHLK3yOQjCyPAaNifRncE8OD0wFIuoMhXxTnHK07+8zZ2SJEKy/qtiyR7vw==} @@ -15865,7 +16302,6 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true ripemd160@2.0.2: @@ -15881,11 +16317,6 @@ packages: rollup: optional: true - rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.14.3: resolution: {integrity: sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -16084,6 +16515,10 @@ packages: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + serialize-javascript@3.1.0: resolution: {integrity: sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==} @@ -16096,16 +16531,6 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - seroval-plugins@1.0.5: - resolution: {integrity: sha512-8+pDC1vOedPXjKG7oz8o+iiHrtF2WswaMQJ7CKFpccvSYfrzmvKY9zOJWCg+881722wIHfwkdnRmiiDm9ym+zQ==} - engines: {node: '>=10'} - peerDependencies: - seroval: ^1.0 - - seroval@1.0.5: - resolution: {integrity: sha512-TM+Z11tHHvQVQKeNlOUonOWnsNM+2IBwZ4vwoi4j3zKzIpc5IDw8WPwCfcc8F17wy6cBcJGbZbFOR0UCuTZHQA==} - engines: {node: '>=10'} - serve-index@1.9.1: resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} engines: {node: '>= 0.8.0'} @@ -16117,6 +16542,10 @@ packages: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -16320,14 +16749,6 @@ packages: resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - solid-js@1.8.16: - resolution: {integrity: sha512-rja94MNU9flF3qQRLNsu60QHKBDKBkVE1DldJZPIfn2ypIn3NV2WpSbGTQIvsyGPBo+9E2IMjwqnqpbgfWuzeg==} - - solid-refresh@0.6.3: - resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} - peerDependencies: - solid-js: ^1.3 - sort-keys@4.2.0: resolution: {integrity: sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==} engines: {node: '>=8'} @@ -16462,6 +16883,9 @@ packages: stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + standard-as-callback@2.1.0: + resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} + start-server-and-test@1.14.0: resolution: {integrity: sha512-on5ELuxO2K0t8EmNj9MtVlFqwBMxfWOhu4U7uZD1xccVpFlOQKR93CSe0u98iQzfNxRyaNTb/CdadbNllplTsw==} engines: {node: '>=6'} @@ -17003,9 +17427,6 @@ packages: tiny-async-pool@1.3.0: resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==} - tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - tiny-invariant@1.0.6: resolution: {integrity: sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==} @@ -17235,6 +17656,11 @@ packages: peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tsx@4.19.1: + resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} + engines: {node: '>=18.0.0'} + hasBin: true + tty-browserify@0.0.0: resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} @@ -17245,6 +17671,9 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + turbo-stream@2.4.0: + resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} @@ -17317,11 +17746,6 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript@5.0.4: - resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} - engines: {node: '>=12.20'} - hasBin: true - typescript@5.4.2: resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} engines: {node: '>=14.17'} @@ -17362,6 +17786,10 @@ packages: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} + undici@6.20.1: + resolution: {integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==} + engines: {node: '>=18.17'} + undoo@0.5.0: resolution: {integrity: sha512-SPlDcde+AUHoFKeVlH2uBJxqVkw658I4WR2rPoygC1eRCzm3GeoP8S6xXZVJeBVOQQid8X2xUBW0N4tOvvHH3Q==} @@ -17505,6 +17933,15 @@ packages: resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} engines: {node: '>=14.0.0'} + unplugin@1.14.1: + resolution: {integrity: sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==} + engines: {node: '>=14.0.0'} + peerDependencies: + webpack-sources: ^3 + peerDependenciesMeta: + webpack-sources: + optional: true + unquote@1.1.1: resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} @@ -17564,6 +18001,9 @@ packages: resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==} hasBin: true + unwasm@0.3.9: + resolution: {integrity: sha512-LDxTx/2DkFURUd+BU1vUsF/moj0JsoTvl+2tcg2AUOiEzVturhGGx17/IMgGvKUYdZwr33EJHtChCJuhu9Ouvg==} + upath@1.2.0: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} @@ -17574,6 +18014,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + update-notifier@5.1.0: resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} engines: {node: '>=10'} @@ -17639,6 +18085,11 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + use-trace-update@1.3.2: resolution: {integrity: sha512-iQ5/z1IgFNTM/gYGineNa/i+Tq/efDY5m7cvema//YoWT5C0tP5rY0ttwiJKbLiAgfdIPptMI3mCc18iVfEu6Q==} @@ -17694,9 +18145,6 @@ packages: resolution: {integrity: sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==} engines: {node: '>=10.10.0'} - validate-html-nesting@1.2.2: - resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -17737,8 +18185,8 @@ packages: vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} - vinxi@0.2.1: - resolution: {integrity: sha512-zrgFO2XuKpdoW5VwlbieeQ0YhzMuuYCJyFWFyj41h9BnymHZ5dnKElALvFQn5JVzHhyrsdmlm8GU7tIuH786hw==} + vinxi@0.3.11: + resolution: {integrity: sha512-ASEpiwldZIsViv2/ZlO6qnRhDAwxr92nKXxMOinA+5nCY7nlaKgekaLDjTyUmFzB8DSiXVZqmHnd6OZVkn4vzw==} hasBin: true vinyl-file@3.0.0: @@ -17775,26 +18223,6 @@ packages: vite: optional: true - vite-plugin-inspect@0.7.42: - resolution: {integrity: sha512-JCyX86wr3siQc+p9Kd0t8VkFHAJag0RaQVIpdFGSv5FEaePEVB6+V/RGtz2dQkkGSXQzRWrPs4cU3dRKg32bXw==} - engines: {node: '>=14'} - peerDependencies: - '@nuxt/kit': '*' - vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0 - peerDependenciesMeta: - '@nuxt/kit': - optional: true - - vite-plugin-solid@2.10.2: - resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} - peerDependencies: - '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* - solid-js: ^1.7.2 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - '@testing-library/jest-dom': - optional: true - vite-tsconfig-paths@4.3.2: resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} peerDependencies: @@ -17803,12 +18231,12 @@ packages: vite: optional: true - vite@4.5.0: - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} - engines: {node: ^14.18.0 || >=16.0.0} + vite@5.2.9: + resolution: {integrity: sha512-uOQWfuZBlc6Y3W/DTuQ1Sr+oIXWvqljLvS881SVmAj00d5RdgShLcuXWxseWPd4HXwiYBFW/vXHfKFeqj9uQnw==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - '@types/node': '>= 14' + '@types/node': ^18.0.0 || >=20.0.0 less: '*' lightningcss: ^1.21.0 sass: '*' @@ -17831,8 +18259,8 @@ packages: terser: optional: true - vite@5.2.9: - resolution: {integrity: sha512-uOQWfuZBlc6Y3W/DTuQ1Sr+oIXWvqljLvS881SVmAj00d5RdgShLcuXWxseWPd4HXwiYBFW/vXHfKFeqj9uQnw==} + vite@5.4.8: + resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -17840,6 +18268,7 @@ packages: less: '*' lightningcss: ^1.21.0 sass: '*' + sass-embedded: '*' stylus: '*' sugarss: '*' terser: ^5.4.0 @@ -17852,6 +18281,8 @@ packages: optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true sugarss: @@ -17859,8 +18290,8 @@ packages: terser: optional: true - vite@5.4.8: - resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} + vite@5.4.9: + resolution: {integrity: sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -17890,14 +18321,6 @@ packages: terser: optional: true - vitefu@0.2.5: - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - vite: - optional: true - vitest-axe@0.1.0: resolution: {integrity: sha512-jvtXxeQPg8R/2ANTY8QicA5pvvdRP4F0FsVUAHANJ46YCDASie/cuhlSzu0DGcLmZvGBSBNsNuK3HqfaeknyvA==} peerDependencies: @@ -18091,6 +18514,9 @@ packages: webpack-virtual-modules@0.6.1: resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + webpack@4.47.0: resolution: {integrity: sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==} engines: {node: '>=6.11.5'} @@ -18195,6 +18621,11 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true + which@4.0.0: + resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} + engines: {node: ^16.13.0 || >=18.0.0} + hasBin: true + why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} @@ -18264,6 +18695,18 @@ packages: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} @@ -18404,13 +18847,16 @@ packages: engines: {node: '>=8.0.0'} hasBin: true - zip-stream@5.0.2: - resolution: {integrity: sha512-LfOdrUvPB8ZoXtvOBz6DlNClfvi//b5d56mSWyJi7XbH/HfhOHfUhOqxhT/rUiR7yiktlunqRo+jY6y/cWC/5g==} - engines: {node: '>= 12.0.0'} + zip-stream@6.0.1: + resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} + engines: {node: '>= 14'} zod@3.22.5: resolution: {integrity: sha512-HqnGsCdVZ2xc0qWPLdO25WnseXThh0kEYKIdV5F/hTHO75hNZFp8thxSeHhiPrHZKrFTo1SOgkAj9po5bexZlw==} + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -18425,8 +18871,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/utils@0.7.7': {} - '@aw-web-design/x-default-browser@1.4.126': dependencies: default-browser-id: 3.0.0 @@ -18438,10 +18882,17 @@ snapshots: '@babel/code-frame@7.24.2': dependencies: '@babel/highlight': 7.24.2 - picocolors: 1.0.0 + picocolors: 1.1.0 + + '@babel/code-frame@7.25.7': + dependencies: + '@babel/highlight': 7.25.7 + picocolors: 1.1.0 '@babel/compat-data@7.24.4': {} + '@babel/compat-data@7.25.8': {} + '@babel/core@7.24.4': dependencies: '@ampproject/remapping': 2.3.0 @@ -18462,6 +18913,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.25.8': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8) + '@babel/helpers': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + convert-source-map: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/eslint-parser@7.22.15(@babel/core@7.24.4)(eslint@8.49.0)': dependencies: '@babel/core': 7.24.4 @@ -18485,6 +18956,13 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + '@babel/generator@7.25.7': + dependencies: + '@babel/types': 7.25.8 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + '@babel/helper-annotate-as-pure@7.22.5': dependencies: '@babel/types': 7.24.0 @@ -18501,6 +18979,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.25.7': + dependencies: + '@babel/compat-data': 7.25.8 + '@babel/helper-validator-option': 7.25.7 + browserslist: 4.24.0 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -18559,16 +19045,19 @@ snapshots: '@babel/helper-member-expression-to-functions@7.23.0': dependencies: - '@babel/types': 7.24.0 - - '@babel/helper-module-imports@7.18.6': - dependencies: - '@babel/types': 7.20.5 + '@babel/types': 7.25.8 '@babel/helper-module-imports@7.24.3': dependencies: '@babel/types': 7.24.0 + '@babel/helper-module-imports@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -18578,12 +19067,24 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.22.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.8 '@babel/helper-plugin-utils@7.24.0': {} + '@babel/helper-plugin-utils@7.25.7': {} + '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -18602,6 +19103,13 @@ snapshots: dependencies: '@babel/types': 7.24.0 + '@babel/helper-simple-access@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': dependencies: '@babel/types': 7.24.0 @@ -18612,10 +19120,16 @@ snapshots: '@babel/helper-string-parser@7.24.1': {} + '@babel/helper-string-parser@7.25.7': {} + '@babel/helper-validator-identifier@7.22.20': {} + '@babel/helper-validator-identifier@7.25.7': {} + '@babel/helper-validator-option@7.23.5': {} + '@babel/helper-validator-option@7.25.7': {} + '@babel/helper-wrap-function@7.22.20': dependencies: '@babel/helper-function-name': 7.23.0 @@ -18630,17 +19144,33 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helpers@7.25.7': + dependencies: + '@babel/template': 7.25.7 + '@babel/types': 7.25.8 + '@babel/highlight@7.24.2': dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.0 + picocolors: 1.1.0 + + '@babel/highlight@7.25.7': + dependencies: + '@babel/helper-validator-identifier': 7.25.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 '@babel/parser@7.24.4': dependencies: '@babel/types': 7.20.5 + '@babel/parser@7.25.8': + dependencies: + '@babel/types': 7.25.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -18818,6 +19348,11 @@ snapshots: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -18868,6 +19403,11 @@ snapshots: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -19126,11 +19666,21 @@ snapshots: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-transform-react-jsx-self@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-transform-react-jsx-source@7.24.1(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-transform-react-jsx-source@7.25.7(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -19376,6 +19926,12 @@ snapshots: '@babel/parser': 7.24.4 '@babel/types': 7.24.0 + '@babel/template@7.25.7': + dependencies: + '@babel/code-frame': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/types': 7.25.8 + '@babel/traverse@7.24.1': dependencies: '@babel/code-frame': 7.24.2 @@ -19391,6 +19947,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.25.7': + dependencies: + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/template': 7.25.7 + '@babel/types': 7.25.8 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.20.5': dependencies: '@babel/helper-string-parser': 7.24.1 @@ -19403,6 +19971,12 @@ snapshots: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + '@babel/types@7.25.8': + dependencies: + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + to-fast-properties: 2.0.0 + '@base2/pretty-print-object@1.0.1': {} '@bcoe/v8-coverage@0.2.3': {} @@ -19462,6 +20036,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@deno/shim-deno-test@0.5.0': {} + + '@deno/shim-deno@0.19.1': + dependencies: + '@deno/shim-deno-test': 0.5.0 + which: 4.0.0 + '@discoveryjs/json-ext@0.5.7': {} '@dnd-kit/accessibility@3.1.0(react@18.2.0)': @@ -19560,6 +20141,9 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true + '@esbuild/aix-ppc64@0.23.1': + optional: true + '@esbuild/android-arm64@0.17.6': optional: true @@ -19575,6 +20159,9 @@ snapshots: '@esbuild/android-arm64@0.21.5': optional: true + '@esbuild/android-arm64@0.23.1': + optional: true + '@esbuild/android-arm@0.17.6': optional: true @@ -19590,6 +20177,9 @@ snapshots: '@esbuild/android-arm@0.21.5': optional: true + '@esbuild/android-arm@0.23.1': + optional: true + '@esbuild/android-x64@0.17.6': optional: true @@ -19605,6 +20195,9 @@ snapshots: '@esbuild/android-x64@0.21.5': optional: true + '@esbuild/android-x64@0.23.1': + optional: true + '@esbuild/darwin-arm64@0.17.6': optional: true @@ -19620,6 +20213,9 @@ snapshots: '@esbuild/darwin-arm64@0.21.5': optional: true + '@esbuild/darwin-arm64@0.23.1': + optional: true + '@esbuild/darwin-x64@0.17.6': optional: true @@ -19635,6 +20231,9 @@ snapshots: '@esbuild/darwin-x64@0.21.5': optional: true + '@esbuild/darwin-x64@0.23.1': + optional: true + '@esbuild/freebsd-arm64@0.17.6': optional: true @@ -19650,6 +20249,9 @@ snapshots: '@esbuild/freebsd-arm64@0.21.5': optional: true + '@esbuild/freebsd-arm64@0.23.1': + optional: true + '@esbuild/freebsd-x64@0.17.6': optional: true @@ -19665,6 +20267,9 @@ snapshots: '@esbuild/freebsd-x64@0.21.5': optional: true + '@esbuild/freebsd-x64@0.23.1': + optional: true + '@esbuild/linux-arm64@0.17.6': optional: true @@ -19680,6 +20285,9 @@ snapshots: '@esbuild/linux-arm64@0.21.5': optional: true + '@esbuild/linux-arm64@0.23.1': + optional: true + '@esbuild/linux-arm@0.17.6': optional: true @@ -19695,6 +20303,9 @@ snapshots: '@esbuild/linux-arm@0.21.5': optional: true + '@esbuild/linux-arm@0.23.1': + optional: true + '@esbuild/linux-ia32@0.17.6': optional: true @@ -19710,6 +20321,9 @@ snapshots: '@esbuild/linux-ia32@0.21.5': optional: true + '@esbuild/linux-ia32@0.23.1': + optional: true + '@esbuild/linux-loong64@0.17.6': optional: true @@ -19725,6 +20339,9 @@ snapshots: '@esbuild/linux-loong64@0.21.5': optional: true + '@esbuild/linux-loong64@0.23.1': + optional: true + '@esbuild/linux-mips64el@0.17.6': optional: true @@ -19740,6 +20357,9 @@ snapshots: '@esbuild/linux-mips64el@0.21.5': optional: true + '@esbuild/linux-mips64el@0.23.1': + optional: true + '@esbuild/linux-ppc64@0.17.6': optional: true @@ -19755,6 +20375,9 @@ snapshots: '@esbuild/linux-ppc64@0.21.5': optional: true + '@esbuild/linux-ppc64@0.23.1': + optional: true + '@esbuild/linux-riscv64@0.17.6': optional: true @@ -19770,6 +20393,9 @@ snapshots: '@esbuild/linux-riscv64@0.21.5': optional: true + '@esbuild/linux-riscv64@0.23.1': + optional: true + '@esbuild/linux-s390x@0.17.6': optional: true @@ -19785,6 +20411,9 @@ snapshots: '@esbuild/linux-s390x@0.21.5': optional: true + '@esbuild/linux-s390x@0.23.1': + optional: true + '@esbuild/linux-x64@0.17.6': optional: true @@ -19800,6 +20429,9 @@ snapshots: '@esbuild/linux-x64@0.21.5': optional: true + '@esbuild/linux-x64@0.23.1': + optional: true + '@esbuild/netbsd-x64@0.17.6': optional: true @@ -19815,6 +20447,12 @@ snapshots: '@esbuild/netbsd-x64@0.21.5': optional: true + '@esbuild/netbsd-x64@0.23.1': + optional: true + + '@esbuild/openbsd-arm64@0.23.1': + optional: true + '@esbuild/openbsd-x64@0.17.6': optional: true @@ -19830,6 +20468,9 @@ snapshots: '@esbuild/openbsd-x64@0.21.5': optional: true + '@esbuild/openbsd-x64@0.23.1': + optional: true + '@esbuild/sunos-x64@0.17.6': optional: true @@ -19845,6 +20486,9 @@ snapshots: '@esbuild/sunos-x64@0.21.5': optional: true + '@esbuild/sunos-x64@0.23.1': + optional: true + '@esbuild/win32-arm64@0.17.6': optional: true @@ -19860,6 +20504,9 @@ snapshots: '@esbuild/win32-arm64@0.21.5': optional: true + '@esbuild/win32-arm64@0.23.1': + optional: true + '@esbuild/win32-ia32@0.17.6': optional: true @@ -19875,6 +20522,9 @@ snapshots: '@esbuild/win32-ia32@0.21.5': optional: true + '@esbuild/win32-ia32@0.23.1': + optional: true + '@esbuild/win32-x64@0.17.6': optional: true @@ -19890,6 +20540,9 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true + '@esbuild/win32-x64@0.23.1': + optional: true + '@eslint-community/eslint-utils@4.4.0(eslint@8.49.0)': dependencies: eslint: 8.49.0 @@ -20020,6 +20673,8 @@ snapshots: dependencies: '@swc/helpers': 0.5.10 + '@ioredis/commands@1.2.0': {} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -20209,7 +20864,7 @@ snapshots: '@jest/transform@26.6.2': dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.8 '@jest/types': 26.6.2 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -21034,7 +21689,7 @@ snapshots: '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10)) abortcontroller-polyfill: 1.7.5 base-x: 3.0.9 - browserslist: 4.23.0 + browserslist: 4.24.0 clone: 2.1.2 dotenv: 7.0.0 dotenv-expand: 5.1.0 @@ -21412,7 +22067,7 @@ snapshots: '@parcel/utils': 2.12.0 '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.10)) '@swc/helpers': 0.5.10 - browserslist: 4.23.0 + browserslist: 4.24.0 nullthrows: 1.1.1 regenerator-runtime: 0.13.11 semver: 7.6.0 @@ -21648,26 +22303,6 @@ snapshots: '@popperjs/core@2.11.8': {} - '@preact/preset-vite@2.8.2(@babel/core@7.24.4)(preact@10.20.2)(vite@4.5.0(@types/node@20.12.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': 7.23.4(@babel/core@7.24.4) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.4) - '@prefresh/vite': 2.4.5(preact@10.20.2)(vite@4.5.0(@types/node@20.12.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.24.4) - 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: 4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - transitivePeerDependencies: - - preact - - supports-color - '@preact/preset-vite@2.8.2(@babel/core@7.24.4)(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))': dependencies: '@babel/core': 7.24.4 @@ -21689,31 +22324,20 @@ snapshots: - supports-color optional: true - '@prefresh/babel-plugin@0.5.1': {} - - '@prefresh/core@1.5.2(preact@10.20.2)': - dependencies: - preact: 10.20.2 + '@prefresh/babel-plugin@0.5.1': + optional: true - '@prefresh/utils@1.2.0': {} + '@prefresh/core@1.5.2': + optional: true - '@prefresh/vite@2.4.5(preact@10.20.2)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': - dependencies: - '@babel/core': 7.24.4 - '@prefresh/babel-plugin': 0.5.1 - '@prefresh/core': 1.5.2(preact@10.20.2) - '@prefresh/utils': 1.2.0 - '@rollup/pluginutils': 4.2.1 - preact: 10.20.2 - vite: 4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - transitivePeerDependencies: - - supports-color + '@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))': dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.8 '@prefresh/babel-plugin': 0.5.1 - '@prefresh/core': 1.5.2(preact@10.20.2) + '@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) @@ -22735,9 +23359,9 @@ snapshots: immutable: 4.3.5 redux: 4.2.1 - '@remix-run/css-bundle@2.8.1': {} + '@remix-run/css-bundle@2.13.1': {} - '@remix-run/dev@2.8.1(@remix-run/serve@2.8.1(typescript@5.6.3))(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)(typescript@5.6.3)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.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@20.12.7)(less@3.11.1)(lightningcss@1.24.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.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@babel/core': 7.24.4 '@babel/generator': 7.24.4 @@ -22749,9 +23373,10 @@ snapshots: '@babel/types': 7.24.0 '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 - '@remix-run/node': 2.8.1(typescript@5.6.3) - '@remix-run/router': 1.15.3-pre.0 - '@remix-run/server-runtime': 2.8.1(typescript@5.6.3) + '@remix-run/node': 2.13.1(typescript@5.6.3) + '@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/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.24.1)(sass@1.75.0)(terser@5.30.3) arg: 5.0.2 @@ -22765,7 +23390,7 @@ snapshots: esbuild-plugins-node-modules-polyfill: 1.6.3(esbuild@0.17.6) execa: 5.1.1 exit-hook: 2.2.1 - express: 4.19.2 + express: 4.21.1 fs-extra: 10.1.0 get-port: 5.1.1 gunzip-maybe: 1.4.2 @@ -22775,7 +23400,7 @@ snapshots: lodash.debounce: 4.0.8 minimatch: 9.0.4 ora: 5.4.1 - picocolors: 1.0.0 + picocolors: 1.1.0 picomatch: 2.3.1 pidtree: 0.6.0 postcss: 8.4.31 @@ -22791,11 +23416,11 @@ snapshots: set-cookie-parser: 2.6.0 tar-fs: 2.1.1 tsconfig-paths: 4.2.0 - ws: 7.5.9 + ws: 7.5.10 optionalDependencies: - '@remix-run/serve': 2.8.1(typescript@5.6.3) + '@remix-run/serve': 2.13.1(typescript@5.6.3) typescript: 5.6.3 - vite: 5.2.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.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - '@types/node' - bluebird @@ -22811,48 +23436,46 @@ snapshots: - ts-node - utf-8-validate - '@remix-run/express@2.8.1(express@4.19.2)(typescript@5.6.3)': + '@remix-run/express@2.13.1(express@4.21.1)(typescript@5.6.3)': dependencies: - '@remix-run/node': 2.8.1(typescript@5.6.3) - express: 4.19.2 + '@remix-run/node': 2.13.1(typescript@5.6.3) + express: 4.21.1 optionalDependencies: typescript: 5.6.3 - '@remix-run/node@2.8.1(typescript@5.6.3)': + '@remix-run/node@2.13.1(typescript@5.6.3)': dependencies: - '@remix-run/server-runtime': 2.8.1(typescript@5.6.3) + '@remix-run/server-runtime': 2.13.1(typescript@5.6.3) '@remix-run/web-fetch': 4.4.2 - '@remix-run/web-file': 3.1.0 - '@remix-run/web-stream': 1.1.0 '@web3-storage/multipart-parser': 1.0.0 cookie-signature: 1.2.1 source-map-support: 0.5.21 stream-slice: 0.1.2 + undici: 6.20.1 optionalDependencies: typescript: 5.6.3 - '@remix-run/react@2.8.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': + '@remix-run/react@2.13.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': dependencies: - '@remix-run/router': 1.15.3 - '@remix-run/server-runtime': 2.8.1(typescript@5.6.3) + '@remix-run/router': 1.20.0 + '@remix-run/server-runtime': 2.13.1(typescript@5.6.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-router: 6.22.3(react@18.2.0) - react-router-dom: 6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-router: 6.27.0(react@18.2.0) + react-router-dom: 6.27.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + turbo-stream: 2.4.0 optionalDependencies: typescript: 5.6.3 - '@remix-run/router@1.15.3': {} - - '@remix-run/router@1.15.3-pre.0': {} + '@remix-run/router@1.20.0': {} - '@remix-run/serve@2.8.1(typescript@5.6.3)': + '@remix-run/serve@2.13.1(typescript@5.6.3)': dependencies: - '@remix-run/express': 2.8.1(express@4.19.2)(typescript@5.6.3) - '@remix-run/node': 2.8.1(typescript@5.6.3) + '@remix-run/express': 2.13.1(express@4.21.1)(typescript@5.6.3) + '@remix-run/node': 2.13.1(typescript@5.6.3) chokidar: 3.6.0 compression: 1.7.4 - express: 4.19.2 + express: 4.21.1 get-port: 5.1.1 morgan: 1.10.0 source-map-support: 0.5.21 @@ -22860,14 +23483,15 @@ snapshots: - supports-color - typescript - '@remix-run/server-runtime@2.8.1(typescript@5.6.3)': + '@remix-run/server-runtime@2.13.1(typescript@5.6.3)': dependencies: - '@remix-run/router': 1.15.3 + '@remix-run/router': 1.20.0 '@types/cookie': 0.6.0 '@web3-storage/multipart-parser': 1.0.0 cookie: 0.6.0 set-cookie-parser: 2.6.0 source-map: 0.7.4 + turbo-stream: 2.4.0 optionalDependencies: typescript: 5.6.3 @@ -22899,91 +23523,77 @@ snapshots: dependencies: web-streams-polyfill: 3.3.3 - '@rollup/plugin-alias@5.1.0(rollup@4.14.3)': + '@rollup/plugin-alias@5.1.0(rollup@4.24.0)': dependencies: slash: 4.0.0 optionalDependencies: - rollup: 4.14.3 + rollup: 4.24.0 - '@rollup/plugin-babel@6.0.4(@babel/core@7.24.4)(@types/babel__core@7.20.5)(rollup@4.14.3)': + '@rollup/plugin-babel@6.0.4(@babel/core@7.24.4)(@types/babel__core@7.20.5)(rollup@4.24.0)': dependencies: '@babel/core': 7.24.4 '@babel/helper-module-imports': 7.24.3 - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) + '@rollup/pluginutils': 5.1.0(rollup@4.24.0) optionalDependencies: '@types/babel__core': 7.20.5 - rollup: 4.14.3 + rollup: 4.24.0 - '@rollup/plugin-commonjs@25.0.7(rollup@4.14.3)': + '@rollup/plugin-commonjs@25.0.7(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) + '@rollup/pluginutils': 5.1.0(rollup@4.24.0) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.11 optionalDependencies: - rollup: 4.14.3 + rollup: 4.24.0 - '@rollup/plugin-inject@5.0.5(rollup@4.14.3)': + '@rollup/plugin-inject@5.0.5(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) + '@rollup/pluginutils': 5.1.0(rollup@4.24.0) estree-walker: 2.0.2 magic-string: 0.30.11 optionalDependencies: - rollup: 4.14.3 + rollup: 4.24.0 - '@rollup/plugin-json@6.1.0(rollup@4.14.3)': + '@rollup/plugin-json@6.1.0(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) + '@rollup/pluginutils': 5.1.0(rollup@4.24.0) optionalDependencies: - rollup: 4.14.3 + rollup: 4.24.0 - '@rollup/plugin-node-resolve@15.2.3(rollup@4.14.3)': + '@rollup/plugin-node-resolve@15.2.3(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) + '@rollup/pluginutils': 5.1.0(rollup@4.24.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 optionalDependencies: - rollup: 4.14.3 + rollup: 4.24.0 - '@rollup/plugin-replace@5.0.5(rollup@4.14.3)': + '@rollup/plugin-replace@5.0.5(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) + '@rollup/pluginutils': 5.1.0(rollup@4.24.0) magic-string: 0.30.11 optionalDependencies: - rollup: 4.14.3 + rollup: 4.24.0 - '@rollup/plugin-terser@0.4.4(rollup@4.14.3)': + '@rollup/plugin-terser@0.4.4(rollup@4.24.0)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 terser: 5.30.3 optionalDependencies: - rollup: 4.14.3 - - '@rollup/plugin-wasm@6.2.2(rollup@4.14.3)': - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) - optionalDependencies: - rollup: 4.14.3 + rollup: 4.24.0 '@rollup/pluginutils@4.2.1': dependencies: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/pluginutils@5.1.0(rollup@4.14.3)': - dependencies: - '@types/estree': 1.0.6 - estree-walker: 2.0.2 - picomatch: 2.3.1 - optionalDependencies: - rollup: 4.14.3 - '@rollup/pluginutils@5.1.0(rollup@4.24.0)': dependencies: '@types/estree': 1.0.6 @@ -23202,10 +23812,6 @@ snapshots: '@sinonjs/text-encoding@0.7.2': {} - '@solidjs/router@0.8.4(solid-js@1.8.16)': - dependencies: - solid-js: 1.8.16 - '@storybook/addon-actions@8.0.8': dependencies: '@storybook/core-events': 8.0.8 @@ -24417,7 +25023,9 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tanstack/history@1.28.9': {} + '@tanstack/history@1.31.16': {} + + '@tanstack/history@1.61.1': {} '@tanstack/query-core@5.36.1': {} @@ -24454,57 +25062,25 @@ snapshots: '@tanstack/query-core': 5.59.13 react: 18.2.0 - '@tanstack/react-router-server@1.29.2(@testing-library/jest-dom@6.4.2(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)))(@types/node@20.12.7)(encoding@0.1.13)(less@3.11.1)(lightningcss@1.24.1)(preact@10.20.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.14.3)(sass@1.75.0)(terser@5.30.3)': + '@tanstack/react-router@1.35.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@tanstack/react-cross-context': 1.26.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tanstack/react-router': 1.29.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@types/jsesc': 3.0.3 - jsesc: 3.0.2 + '@tanstack/history': 1.31.16 + '@tanstack/react-store': 0.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tiny-invariant: 1.3.3 - vinxi: 0.2.1(@testing-library/jest-dom@6.4.2(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)))(@types/node@20.12.7)(encoding@0.1.13)(less@3.11.1)(lightningcss@1.24.1)(preact@10.20.2)(rollup@4.14.3)(sass@1.75.0)(terser@5.30.3) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@nuxt/kit' - - '@planetscale/database' - - '@testing-library/jest-dom' - - '@types/node' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - debug - - encoding - - idb-keyval - - ioredis - - less - - lightningcss - - preact - - rollup - - sass - - stylus - - sugarss - - supports-color - - terser - - uWebSockets.js - - utf-8-validate - - xml2js + tiny-warning: 1.0.3 - '@tanstack/react-router@1.29.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@tanstack/react-router@1.67.0(@tanstack/router-generator@1.65.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@tanstack/history': 1.28.9 - '@tanstack/react-store': 0.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/history': 1.61.1 + '@tanstack/react-store': 0.5.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 + optionalDependencies: + '@tanstack/router-generator': 1.65.0 '@tanstack/react-store@0.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -24513,9 +25089,16 @@ snapshots: react-dom: 18.2.0(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0) - '@tanstack/router-devtools@1.29.2(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@tanstack/react-store@0.5.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@tanstack/store': 0.5.5 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-sync-external-store: 1.2.2(react@18.2.0) + + '@tanstack/router-devtools@1.35.1(@tanstack/react-router@1.35.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@tanstack/react-router': 1.29.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/react-router': 1.35.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) clsx: 2.1.0 date-fns: 2.30.0 goober: 2.1.14(csstype@3.1.3) @@ -24524,12 +25107,55 @@ snapshots: transitivePeerDependencies: - csstype - '@tanstack/router-generator@1.28.2': + '@tanstack/router-devtools@1.67.0(@tanstack/react-router@1.67.0(@tanstack/router-generator@1.65.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@tanstack/react-router': 1.67.0(@tanstack/router-generator@1.65.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + clsx: 2.1.1 + goober: 2.1.16(csstype@3.1.3) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - csstype + + '@tanstack/router-generator@1.34.8': dependencies: prettier: 3.2.5 zod: 3.22.5 - '@tanstack/router-vite-plugin@1.28.2(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + '@tanstack/router-generator@1.65.0': + dependencies: + '@tanstack/virtual-file-routes': 1.64.0 + prettier: 3.3.3 + tsx: 4.19.1 + zod: 3.23.8 + + '@tanstack/router-plugin@1.66.1(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))(webpack-sources@3.2.3)': + dependencies: + '@babel/core': 7.25.8 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.8) + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + '@tanstack/router-generator': 1.65.0 + '@tanstack/virtual-file-routes': 1.64.0 + '@types/babel__core': 7.20.5 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + babel-dead-code-elimination: 1.0.6 + chokidar: 3.6.0 + 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.24.1)(sass@1.75.0)(terser@5.30.3) + transitivePeerDependencies: + - supports-color + - webpack-sources + + '@tanstack/router-vite-plugin@1.34.8(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@babel/core': 7.24.4 '@babel/generator': 7.24.4 @@ -24540,19 +25166,75 @@ snapshots: '@babel/template': 7.24.0 '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 - '@tanstack/router-generator': 1.28.2 + '@tanstack/router-generator': 1.34.8 '@types/babel__core': 7.20.5 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.5 - '@vitejs/plugin-react': 4.2.1(vite@5.2.9(@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.3.2(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + zod: 3.22.5 + transitivePeerDependencies: + - supports-color + - vite + + '@tanstack/start@1.35.1(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.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.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + dependencies: + '@tanstack/react-cross-context': 1.26.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/react-router': 1.35.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/router-generator': 1.34.8 + '@tanstack/router-vite-plugin': 1.34.8(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@types/jsesc': 3.0.3 + '@vinxi/react': 0.2.2 + '@vinxi/server-components': 0.3.3(vinxi@0.3.11(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + '@vinxi/server-functions': 0.3.2(vinxi@0.3.11(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + import-meta-resolve: 4.1.0 + isbot: 5.1.9 + jsesc: 3.0.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tiny-invariant: 1.3.3 + vinxi: 0.3.11(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + vite-tsconfig-paths: 4.3.2(typescript@5.6.3)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) zod: 3.22.5 transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@libsql/client' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/kv' + - better-sqlite3 + - debug + - drizzle-orm + - encoding + - idb-keyval + - ioredis + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss - supports-color + - terser + - typescript + - uWebSockets.js - vite + - xml2js '@tanstack/store@0.1.3': {} + '@tanstack/store@0.5.5': {} + + '@tanstack/virtual-file-routes@1.64.0': {} + '@testing-library/cypress@10.0.1(cypress@13.13.2)': dependencies: '@babel/runtime': 7.20.6 @@ -24725,13 +25407,17 @@ 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.5': dependencies: '@babel/types': 7.24.0 + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.25.8 + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 @@ -25087,7 +25773,7 @@ snapshots: '@types/vinyl@2.0.12': dependencies: '@types/expect': 1.20.4 - '@types/node': 15.14.9 + '@types/node': 20.12.7 '@types/webpack-env@1.18.4': {} @@ -25393,7 +26079,7 @@ snapshots: lodash: 4.17.21 mlly: 1.6.1 outdent: 0.8.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.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.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.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - '@types/node' @@ -25408,11 +26094,12 @@ snapshots: '@vanilla-extract/private@1.0.4': {} - '@vercel/nft@0.24.4(encoding@0.1.13)': + '@vercel/nft@0.26.5(encoding@0.1.13)': dependencies: '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) '@rollup/pluginutils': 4.2.1 acorn: 8.11.3 + acorn-import-attributes: 1.9.5(acorn@8.11.3) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -25425,26 +26112,6 @@ snapshots: - encoding - supports-color - '@vinxi/devtools@0.2.0(@babel/core@7.24.4)(@testing-library/jest-dom@6.4.2(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)))(preact@10.20.2)(rollup@4.14.3)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': - dependencies: - '@preact/preset-vite': 2.8.2(@babel/core@7.24.4)(preact@10.20.2)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) - '@solidjs/router': 0.8.4(solid-js@1.8.16) - birpc: 0.2.17 - solid-js: 1.8.16 - vite-plugin-inspect: 0.7.42(rollup@4.14.3)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) - vite-plugin-solid: 2.10.2(@testing-library/jest-dom@6.4.2(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)))(solid-js@1.8.16)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) - ws: 8.16.0 - transitivePeerDependencies: - - '@babel/core' - - '@nuxt/kit' - - '@testing-library/jest-dom' - - bufferutil - - preact - - rollup - - supports-color - - utf-8-validate - - vite - '@vinxi/listhen@1.5.6': dependencies: '@parcel/watcher': 2.4.1 @@ -25454,7 +26121,7 @@ snapshots: consola: 3.2.3 defu: 6.1.4 get-port-please: 3.1.2 - h3: 1.10.1 + h3: 1.11.1 http-shutdown: 1.2.2 jiti: 1.21.0 mlly: 1.6.1 @@ -25464,6 +26131,45 @@ snapshots: ufo: 1.5.3 untun: 0.1.3 uqr: 0.1.2 + transitivePeerDependencies: + - uWebSockets.js + + '@vinxi/plugin-directives@0.3.1(vinxi@0.3.11(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + dependencies: + '@babel/parser': 7.24.4 + acorn: 8.11.3 + acorn-jsx: 5.3.2(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 + tslib: 2.6.2 + vinxi: 0.3.11(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + + '@vinxi/react@0.2.2': {} + + '@vinxi/server-components@0.3.3(vinxi@0.3.11(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + dependencies: + '@vinxi/plugin-directives': 0.3.1(vinxi@0.3.11(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.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.3.11(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) + + '@vinxi/server-functions@0.3.2(vinxi@0.3.11(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': + dependencies: + '@vinxi/plugin-directives': 0.3.1(vinxi@0.3.11(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.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.3.11(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) '@vitejs/plugin-react@4.2.1(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: @@ -25487,6 +26193,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-react@4.3.2(vite@5.2.9(@types/node@20.12.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-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.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.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.24.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.24.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.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@ampproject/remapping': 2.3.0 @@ -25538,13 +26266,13 @@ snapshots: chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.3(@vitest/spy@2.1.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))': + '@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))': dependencies: '@vitest/spy': 2.1.3 estree-walker: 3.0.3 magic-string: 0.30.11 optionalDependencies: - 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.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) '@vitest/pretty-format@2.1.3': dependencies: @@ -25612,7 +26340,7 @@ snapshots: '@vue/shared': 3.4.23 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.2.0 + source-map-js: 1.2.1 '@vue/compiler-dom@3.4.23': dependencies: @@ -25855,6 +26583,10 @@ snapshots: dependencies: acorn: 8.11.3 + acorn-import-attributes@1.9.5(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + acorn-jsx@5.3.2(acorn@7.4.1): dependencies: acorn: 7.4.1 @@ -25863,6 +26595,14 @@ snapshots: dependencies: acorn: 8.11.3 + acorn-loose@8.4.0: + dependencies: + acorn: 8.11.3 + + acorn-typescript@1.4.13(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + acorn-walk@7.2.0: {} acorn-walk@8.3.2: {} @@ -25873,6 +26613,8 @@ snapshots: acorn@8.11.3: {} + acorn@8.12.1: {} + add-dom-event-listener@1.1.0: dependencies: object-assign: 4.1.1 @@ -26039,24 +26781,25 @@ snapshots: arch@2.2.0: {} - archiver-utils@4.0.1: + archiver-utils@5.0.2: dependencies: - glob: 8.1.0 + glob: 10.3.12 graceful-fs: 4.2.11 + is-stream: 2.0.1 lazystream: 1.0.1 lodash: 4.17.21 normalize-path: 3.0.0 - readable-stream: 3.6.2 + readable-stream: 4.5.2 - archiver@6.0.2: + archiver@7.0.1: dependencies: - archiver-utils: 4.0.1 + archiver-utils: 5.0.2 async: 3.2.5 - buffer-crc32: 0.2.13 - readable-stream: 3.6.2 + buffer-crc32: 1.0.0 + readable-stream: 4.5.2 readdir-glob: 1.1.3 tar-stream: 3.1.7 - zip-stream: 5.0.2 + zip-stream: 6.0.1 are-we-there-yet@2.0.0: dependencies: @@ -26346,6 +27089,15 @@ snapshots: dependencies: '@babel/core': 7.24.4 + babel-dead-code-elimination@1.0.6: + dependencies: + '@babel/core': 7.25.8 + '@babel/parser': 7.25.8 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 + transitivePeerDependencies: + - supports-color + babel-helper-function-name@6.24.1: dependencies: babel-helper-get-function-arity: 6.24.1 @@ -26415,7 +27167,7 @@ snapshots: babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.25.7 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -26430,15 +27182,6 @@ snapshots: '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.5 - babel-plugin-jsx-dom-expressions@0.37.19(@babel/core@7.24.4): - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) - '@babel/types': 7.24.0 - html-entities: 2.3.3 - validate-html-nesting: 1.2.2 - babel-plugin-lodash@3.3.4: dependencies: '@babel/helper-module-imports': 7.24.3 @@ -26524,6 +27267,7 @@ snapshots: babel-plugin-transform-hook-names@1.0.2(@babel/core@7.24.4): dependencies: '@babel/core': 7.24.4 + optional: true babel-plugin-transform-react-remove-prop-types@0.4.24: {} @@ -26615,11 +27359,6 @@ snapshots: transitivePeerDependencies: - supports-color - babel-preset-solid@1.8.16(@babel/core@7.24.4): - dependencies: - '@babel/core': 7.24.4 - babel-plugin-jsx-dom-expressions: 0.37.19(@babel/core@7.24.4) - babel-runtime@6.26.0: dependencies: core-js: 2.6.12 @@ -26725,8 +27464,6 @@ snapshots: dependencies: file-uri-to-path: 1.0.0 - birpc@0.2.17: {} - bl@4.1.0: dependencies: buffer: 5.7.1 @@ -26764,6 +27501,23 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + bonjour-service@1.2.1: dependencies: fast-deep-equal: 3.1.3 @@ -26887,7 +27641,7 @@ snapshots: browserslist@4.14.2: dependencies: - caniuse-lite: 1.0.30001611 + caniuse-lite: 1.0.30001668 electron-to-chromium: 1.4.745 escalade: 3.1.2 node-releases: 1.1.77 @@ -26899,6 +27653,13 @@ snapshots: node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) + browserslist@4.24.0: + dependencies: + caniuse-lite: 1.0.30001668 + electron-to-chromium: 1.5.38 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.0) + bs-logger@0.2.6: dependencies: fast-json-stable-stringify: 2.1.0 @@ -26909,6 +27670,8 @@ snapshots: buffer-crc32@0.2.13: {} + buffer-crc32@1.0.0: {} + buffer-equal-constant-time@1.0.1: {} buffer-from@1.1.2: {} @@ -27172,13 +27935,15 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001611 + browserslist: 4.24.0 + caniuse-lite: 1.0.30001668 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 caniuse-lite@1.0.30001611: {} + caniuse-lite@1.0.30001668: {} + capture-exit@2.0.0: dependencies: rsvp: 4.8.5 @@ -27424,6 +28189,8 @@ snapshots: clsx@2.1.1: {} + cluster-key-slot@1.1.2: {} + cmd-shim@5.0.0: dependencies: mkdirp-infer-owner: 2.0.0 @@ -27534,12 +28301,13 @@ snapshots: dependencies: arity-n: 1.0.4 - compress-commons@5.0.3: + compress-commons@6.0.2: dependencies: crc-32: 1.2.2 - crc32-stream: 5.0.1 + crc32-stream: 6.0.0 + is-stream: 2.0.1 normalize-path: 3.0.0 - readable-stream: 3.6.2 + readable-stream: 4.5.2 compressible@2.0.18: dependencies: @@ -27659,6 +28427,8 @@ snapshots: cookie@0.6.0: {} + cookie@0.7.1: {} + cookiejar@2.1.4: {} copy-concurrently@1.0.5: @@ -27691,7 +28461,7 @@ snapshots: core-js-compat@3.37.0: dependencies: - browserslist: 4.23.0 + browserslist: 4.24.0 core-js-pure@3.37.0: {} @@ -27756,10 +28526,10 @@ snapshots: crc-32@1.2.2: {} - crc32-stream@5.0.1: + crc32-stream@6.0.0: dependencies: crc-32: 1.2.2 - readable-stream: 3.6.2 + readable-stream: 4.5.2 create-ecdh@4.0.4: dependencies: @@ -27783,6 +28553,8 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 + croner@8.0.2: {} + cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 @@ -27863,12 +28635,12 @@ snapshots: css-loader@6.11.0(webpack@5.90.1(esbuild@0.20.2)): dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.47) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.47) + postcss-modules-scope: 3.2.0(postcss@8.4.47) + postcss-modules-values: 4.0.0(postcss@8.4.47) postcss-value-parser: 4.2.0 semver: 7.6.0 optionalDependencies: @@ -27913,6 +28685,7 @@ snapshots: domhandler: 5.0.3 domutils: 3.1.0 nth-check: 2.1.1 + optional: true css-tree@1.0.0-alpha.37: dependencies: @@ -27927,7 +28700,7 @@ snapshots: css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.0 + source-map-js: 1.2.1 css-what@3.4.2: {} @@ -28128,8 +28901,15 @@ snapshots: dateformat@4.6.3: {} + dax-sh@0.39.2: + dependencies: + '@deno/shim-deno': 0.19.1 + undici-types: 5.26.5 + dayjs@1.11.10: {} + db0@0.1.4: {} + de-indent@1.0.2: {} debounce@1.2.1: {} @@ -28321,6 +29101,8 @@ snapshots: delegates@1.0.0: {} + denque@2.1.0: {} + depd@1.1.2: {} depd@2.0.0: {} @@ -28457,6 +29239,7 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 + optional: true dom-walk@0.1.2: {} @@ -28481,6 +29264,7 @@ snapshots: domhandler@5.0.3: dependencies: domelementtype: 2.3.0 + optional: true domutils@1.7.0: dependencies: @@ -28498,6 +29282,7 @@ snapshots: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 + optional: true dot-case@3.0.4: dependencies: @@ -28526,19 +29311,6 @@ snapshots: dotenv@8.6.0: {} - dts-buddy@0.2.5: - dependencies: - '@jridgewell/source-map': 0.3.6 - '@jridgewell/sourcemap-codec': 1.5.0 - globrex: 0.1.2 - kleur: 4.1.5 - locate-character: 3.0.0 - magic-string: 0.30.11 - sade: 1.8.1 - tiny-glob: 0.2.9 - ts-api-utils: 1.3.0(typescript@5.0.4) - typescript: 5.0.4 - duplexer3@0.1.5: {} duplexer@0.1.2: {} @@ -28569,6 +29341,8 @@ snapshots: electron-to-chromium@1.4.745: {} + electron-to-chromium@1.5.38: {} + elliptic@6.5.5: dependencies: bn.js: 4.12.0 @@ -28591,6 +29365,8 @@ snapshots: encodeurl@1.0.2: {} + encodeurl@2.0.0: {} + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 @@ -28646,8 +29422,6 @@ snapshots: dependencies: is-arrayish: 0.2.1 - error-stack-parser-es@0.1.1: {} - error-stack-parser@2.1.4: dependencies: stackframe: 1.3.4 @@ -28930,8 +29704,37 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + escalade@3.1.2: {} + escalade@3.2.0: {} + escape-goat@2.1.1: {} escape-goat@4.0.0: {} @@ -29799,6 +30602,42 @@ snapshots: transitivePeerDependencies: - supports-color + express@4.21.1: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.10 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + ext@1.7.0: dependencies: type: 2.7.2 @@ -29986,6 +30825,18 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + find-cache-dir@2.1.0: dependencies: commondir: 1.0.1 @@ -30078,7 +30929,7 @@ snapshots: fork-ts-checker-webpack-plugin@4.1.6(eslint@8.57.0)(typescript@5.6.3)(vue-template-compiler@2.7.16)(webpack@5.90.1(esbuild@0.20.2)): dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.24.2 chalk: 2.4.2 micromatch: 3.1.10 minimatch: 3.1.2 @@ -30344,8 +31195,6 @@ snapshots: get-port@5.1.1: {} - get-port@6.1.2: {} - get-port@7.1.0: {} get-stream@3.0.0: {} @@ -30372,6 +31221,10 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-tsconfig@4.8.1: + dependencies: + resolve-pkg-maps: 1.0.0 + get-uri@6.0.3: dependencies: basic-ftp: 5.0.5 @@ -30540,8 +31393,6 @@ snapshots: dependencies: define-properties: 1.2.1 - globalyzer@0.1.0: {} - globby@11.0.1: dependencies: array-union: 2.1.0 @@ -30585,6 +31436,10 @@ snapshots: dependencies: csstype: 3.1.3 + goober@2.1.16(csstype@3.1.3): + dependencies: + csstype: 3.1.3 + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 @@ -30668,18 +31523,6 @@ snapshots: dependencies: duplexer: 0.1.2 - h3@1.10.1: - dependencies: - cookie-es: 1.1.0 - defu: 6.1.4 - destr: 2.0.3 - iron-webcrypto: 1.1.0 - ohash: 1.1.3 - radix3: 1.1.2 - ufo: 1.5.3 - uncrypto: 0.1.3 - unenv: 1.9.0 - h3@1.11.1: dependencies: cookie-es: 1.1.0 @@ -30882,8 +31725,6 @@ snapshots: dependencies: whatwg-encoding: 2.0.0 - html-entities@2.3.3: {} - html-entities@2.5.2: {} html-escaper@2.0.2: {} @@ -31082,9 +31923,9 @@ snapshots: dependencies: postcss: 8.4.31 - icss-utils@5.1.0(postcss@8.4.38): + icss-utils@5.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 identity-obj-proxy@3.0.0: dependencies: @@ -31136,6 +31977,8 @@ snapshots: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 + import-meta-resolve@4.1.0: {} + imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -31263,6 +32106,20 @@ snapshots: dependencies: loose-envify: 1.4.0 + ioredis@5.4.1: + dependencies: + '@ioredis/commands': 1.2.0 + cluster-key-slot: 1.1.2 + debug: 4.3.4(supports-color@8.1.1) + denque: 2.1.0 + lodash.defaults: 4.2.0 + lodash.isarguments: 3.1.0 + redis-errors: 1.2.0 + redis-parser: 3.0.0 + standard-as-callback: 2.1.0 + transitivePeerDependencies: + - supports-color + ip-address@9.0.5: dependencies: jsbn: 1.1.0 @@ -31577,8 +32434,6 @@ snapshots: call-bind: 1.0.7 get-intrinsic: 1.2.4 - is-what@4.1.16: {} - is-windows@1.0.2: {} is-wsl@1.1.0: {} @@ -31611,8 +32466,12 @@ snapshots: isbot@4.4.0: {} + isbot@5.1.9: {} + isexe@2.0.0: {} + isexe@3.1.1: {} + isobject@2.1.0: dependencies: isarray: 1.0.0 @@ -31871,7 +32730,7 @@ snapshots: jest-jasmine2@26.6.3: dependencies: - '@babel/traverse': 7.24.1 + '@babel/traverse': 7.25.7 '@jest/environment': 26.6.2 '@jest/source-map': 26.6.2 '@jest/test-result': 26.6.2 @@ -32065,7 +32924,7 @@ snapshots: dependencies: '@babel/types': 7.20.5 '@jest/types': 26.6.2 - '@types/babel__traverse': 7.20.5 + '@types/babel__traverse': 7.20.6 '@types/prettier': 2.7.3 chalk: 4.1.2 expect: 26.6.2 @@ -32769,8 +33628,6 @@ snapshots: locale@0.1.0: {} - locate-character@3.0.0: {} - locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -32805,12 +33662,16 @@ snapshots: lodash.debounce@4.0.8: {} + lodash.defaults@4.2.0: {} + lodash.difference@4.5.0: {} lodash.escaperegexp@4.1.2: {} lodash.get@4.4.2: {} + lodash.isarguments@3.1.0: {} + lodash.isequal@4.5.0: {} lodash.isplainobject@4.0.6: {} @@ -32929,12 +33790,19 @@ snapshots: magic-string@0.30.5: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + optional: true + + magicast@0.2.11: + dependencies: + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + recast: 0.23.6 magicast@0.3.4: dependencies: '@babel/parser': 7.24.4 '@babel/types': 7.24.0 - source-map-js: 1.2.0 + source-map-js: 1.2.1 make-dir@2.1.0: dependencies: @@ -33337,12 +34205,10 @@ snapshots: meow@13.2.0: {} - merge-anything@5.1.7: - dependencies: - is-what: 4.1.16 - merge-descriptors@1.0.1: {} + merge-descriptors@1.0.3: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -33802,6 +34668,8 @@ snapshots: mime@3.0.0: {} + mime@4.0.3: {} + mimic-fn@1.2.0: {} mimic-fn@2.1.0: {} @@ -34115,7 +34983,7 @@ snapshots: '@next/env': 14.2.14 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001611 + caniuse-lite: 1.0.30001668 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.2.0 @@ -34146,48 +35014,50 @@ snapshots: just-extend: 6.2.0 path-to-regexp: 6.2.2 - nitropack@2.8.1(encoding@0.1.13): + nitropack@2.9.6(encoding@0.1.13): dependencies: '@cloudflare/kv-asset-handler': 0.3.1 '@netlify/functions': 2.6.0 - '@rollup/plugin-alias': 5.1.0(rollup@4.14.3) - '@rollup/plugin-commonjs': 25.0.7(rollup@4.14.3) - '@rollup/plugin-inject': 5.0.5(rollup@4.14.3) - '@rollup/plugin-json': 6.1.0(rollup@4.14.3) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.14.3) - '@rollup/plugin-replace': 5.0.5(rollup@4.14.3) - '@rollup/plugin-terser': 0.4.4(rollup@4.14.3) - '@rollup/plugin-wasm': 6.2.2(rollup@4.14.3) - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) + '@rollup/plugin-alias': 5.1.0(rollup@4.24.0) + '@rollup/plugin-commonjs': 25.0.7(rollup@4.24.0) + '@rollup/plugin-inject': 5.0.5(rollup@4.24.0) + '@rollup/plugin-json': 6.1.0(rollup@4.24.0) + '@rollup/plugin-node-resolve': 15.2.3(rollup@4.24.0) + '@rollup/plugin-replace': 5.0.5(rollup@4.24.0) + '@rollup/plugin-terser': 0.4.4(rollup@4.24.0) + '@rollup/pluginutils': 5.1.0(rollup@4.24.0) '@types/http-proxy': 1.17.14 - '@vercel/nft': 0.24.4(encoding@0.1.13) - archiver: 6.0.2 + '@vercel/nft': 0.26.5(encoding@0.1.13) + archiver: 7.0.1 c12: 1.10.0 chalk: 5.3.0 chokidar: 3.6.0 citty: 0.1.6 consola: 3.2.3 cookie-es: 1.1.0 + croner: 8.0.2 + crossws: 0.2.4 + db0: 0.1.4 defu: 6.1.4 destr: 2.0.3 dot-prop: 8.0.2 - esbuild: 0.19.12 + esbuild: 0.20.2 escape-string-regexp: 5.0.0 - estree-walker: 3.0.3 etag: 1.8.1 fs-extra: 11.2.0 globby: 14.0.1 gzip-size: 7.0.0 - h3: 1.10.1 + h3: 1.11.1 hookable: 5.5.3 httpxy: 0.1.5 + ioredis: 5.4.1 is-primitive: 3.0.1 jiti: 1.21.0 klona: 2.0.6 knitwork: 1.1.0 listhen: 1.7.2 magic-string: 0.30.11 - mime: 3.0.0 + mime: 4.0.3 mlly: 1.6.1 mri: 1.2.0 node-fetch-native: 1.6.4 @@ -34199,8 +35069,8 @@ snapshots: pkg-types: 1.1.0 pretty-bytes: 6.1.1 radix3: 1.1.2 - rollup: 4.14.3 - rollup-plugin-visualizer: 5.12.0(rollup@4.14.3) + rollup: 4.24.0 + rollup-plugin-visualizer: 5.12.0(rollup@4.24.0) scule: 1.3.0 semver: 7.6.0 serve-placeholder: 2.0.1 @@ -34210,8 +35080,9 @@ snapshots: uncrypto: 0.1.3 unctx: 2.3.1 unenv: 1.9.0 - unimport: 3.7.1(rollup@4.14.3) - unstorage: 1.10.2 + unimport: 3.7.1(rollup@4.24.0) + unstorage: 1.10.2(ioredis@5.4.1) + unwasm: 0.3.9 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -34220,13 +35091,15 @@ snapshots: - '@azure/keyvault-secrets' - '@azure/storage-blob' - '@capacitor/preferences' + - '@libsql/client' - '@netlify/blobs' - '@planetscale/database' - '@upstash/redis' - '@vercel/kv' + - better-sqlite3 + - drizzle-orm - encoding - idb-keyval - - ioredis - supports-color - uWebSockets.js @@ -34280,7 +35153,7 @@ snapshots: node-gyp@8.4.1: dependencies: env-paths: 2.2.1 - glob: 7.2.3 + glob: 7.1.6 graceful-fs: 4.2.11 make-fetch-happen: 9.1.0 nopt: 5.0.0 @@ -34314,6 +35187,7 @@ snapshots: dependencies: css-select: 5.1.0 he: 1.2.0 + optional: true node-int64@0.4.0: {} @@ -34357,6 +35231,8 @@ snapshots: node-releases@2.0.14: {} + node-releases@2.0.18: {} + nopt@5.0.0: dependencies: abbrev: 1.1.1 @@ -34437,7 +35313,7 @@ snapshots: npm-packlist@3.0.0: dependencies: - glob: 7.2.3 + glob: 7.1.6 ignore-walk: 4.0.1 npm-bundled: 1.1.2 npm-normalize-package-bin: 1.0.1 @@ -34814,7 +35690,7 @@ snapshots: p-transform@1.3.0: dependencies: - debug: 4.3.7 + debug: 4.3.4(supports-color@8.1.1) p-queue: 6.6.2 transitivePeerDependencies: - supports-color @@ -35039,6 +35915,8 @@ snapshots: lru-cache: 10.2.0 minipass: 7.0.4 + path-to-regexp@0.1.10: {} + path-to-regexp@0.1.7: {} path-to-regexp@1.8.0: @@ -35153,7 +36031,7 @@ snapshots: postcss-colormin@4.0.3: dependencies: - browserslist: 4.23.0 + browserslist: 4.24.0 color: 3.2.1 has: 1.0.4 postcss: 7.0.39 @@ -35242,7 +36120,7 @@ snapshots: postcss-merge-rules@4.0.3: dependencies: - browserslist: 4.23.0 + browserslist: 4.24.0 caniuse-api: 3.0.0 cssnano-util-same-parent: 4.0.1 postcss: 7.0.39 @@ -35264,7 +36142,7 @@ snapshots: postcss-minify-params@4.0.2: dependencies: alphanum-sort: 1.0.2 - browserslist: 4.23.0 + browserslist: 4.24.0 cssnano-util-get-arguments: 4.0.0 postcss: 7.0.39 postcss-value-parser: 3.3.1 @@ -35281,9 +36159,9 @@ snapshots: dependencies: postcss: 8.4.31 - postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + postcss-modules-extract-imports@3.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-modules-local-by-default@4.0.5(postcss@8.4.31): dependencies: @@ -35292,10 +36170,10 @@ snapshots: postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 - postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + postcss-modules-local-by-default@4.0.5(postcss@8.4.47): dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 @@ -35304,9 +36182,9 @@ snapshots: postcss: 8.4.31 postcss-selector-parser: 6.0.16 - postcss-modules-scope@3.2.0(postcss@8.4.38): + postcss-modules-scope@3.2.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-selector-parser: 6.0.16 postcss-modules-values@4.0.0(postcss@8.4.31): @@ -35314,10 +36192,10 @@ snapshots: icss-utils: 5.1.0(postcss@8.4.31) postcss: 8.4.31 - postcss-modules-values@4.0.0(postcss@8.4.38): + postcss-modules-values@4.0.0(postcss@8.4.47): dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 postcss-modules@6.0.0(postcss@8.4.31): dependencies: @@ -35369,7 +36247,7 @@ snapshots: postcss-normalize-unicode@4.0.1: dependencies: - browserslist: 4.23.0 + browserslist: 4.24.0 postcss: 7.0.39 postcss-value-parser: 3.3.1 @@ -35397,7 +36275,7 @@ snapshots: postcss-reduce-initial@4.0.3: dependencies: - browserslist: 4.23.0 + browserslist: 4.24.0 caniuse-api: 3.0.0 has: 1.0.4 postcss: 7.0.39 @@ -35446,9 +36324,9 @@ snapshots: dependencies: postcss: 8.4.31 - postcss-sorting@8.0.2(postcss@8.4.38): + postcss-sorting@8.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-svgo@4.0.3: dependencies: @@ -35486,8 +36364,8 @@ snapshots: postcss@8.4.38: dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.2.0 + picocolors: 1.1.0 + source-map-js: 1.2.1 postcss@8.4.47: dependencies: @@ -35512,8 +36390,6 @@ snapshots: posthtml-parser: 0.11.0 posthtml-render: 3.0.0 - preact@10.20.2: {} - preferred-pm@3.1.4: dependencies: find-up: 5.0.0 @@ -35535,6 +36411,8 @@ snapshots: prettier@3.2.5: {} + prettier@3.3.3: {} + pretty-bytes@5.3.0: {} pretty-bytes@5.6.0: {} @@ -35763,6 +36641,10 @@ snapshots: dependencies: side-channel: 1.0.6 + qs@6.13.0: + dependencies: + side-channel: 1.0.6 + qs@6.5.3: {} query-string@7.1.0: @@ -36383,12 +37265,12 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - react-router-dom@6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + react-router-dom@6.27.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@remix-run/router': 1.15.3 + '@remix-run/router': 1.20.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-router: 6.22.3(react@18.2.0) + react-router: 6.27.0(react@18.2.0) react-router-hash-link@2.4.3(react-router-dom@5.2.0(react@18.2.0))(react@18.2.0): dependencies: @@ -36410,9 +37292,9 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - react-router@6.22.3(react@18.2.0): + react-router@6.27.0(react@18.2.0): dependencies: - '@remix-run/router': 1.15.3 + '@remix-run/router': 1.20.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): @@ -36704,6 +37586,12 @@ snapshots: indent-string: 5.0.0 strip-indent: 4.0.0 + redis-errors@1.2.0: {} + + redis-parser@3.0.0: + dependencies: + redis-errors: 1.2.0 + reduce-reducers@1.0.4: {} redux-actions@3.0.0: @@ -37124,18 +38012,14 @@ snapshots: hash-base: 3.1.0 inherits: 2.0.4 - rollup-plugin-visualizer@5.12.0(rollup@4.14.3): + rollup-plugin-visualizer@5.12.0(rollup@4.24.0): dependencies: open: 8.4.2 picomatch: 2.3.1 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rollup: 4.14.3 - - rollup@3.29.4: - optionalDependencies: - fsevents: 2.3.3 + rollup: 4.24.0 rollup@4.14.3: dependencies: @@ -37397,6 +38281,24 @@ snapshots: transitivePeerDependencies: - supports-color + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + serialize-javascript@3.1.0: dependencies: randombytes: 2.1.0 @@ -37413,12 +38315,6 @@ snapshots: dependencies: randombytes: 2.1.0 - seroval-plugins@1.0.5(seroval@1.0.5): - dependencies: - seroval: 1.0.5 - - seroval@1.0.5: {} - serve-index@1.9.1: dependencies: accepts: 1.3.8 @@ -37444,6 +38340,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + set-blocking@2.0.0: {} set-cookie-parser@2.6.0: {} @@ -37677,7 +38582,7 @@ snapshots: socks-proxy-agent@6.2.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7 + debug: 4.3.4(supports-color@8.1.1) socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -37703,19 +38608,6 @@ snapshots: ip-address: 9.0.5 smart-buffer: 4.2.0 - solid-js@1.8.16: - dependencies: - csstype: 3.1.3 - seroval: 1.0.5 - seroval-plugins: 1.0.5(seroval@1.0.5) - - solid-refresh@0.6.3(solid-js@1.8.16): - dependencies: - '@babel/generator': 7.24.4 - '@babel/helper-module-imports': 7.24.3 - '@babel/types': 7.24.0 - solid-js: 1.8.16 - sort-keys@4.2.0: dependencies: is-plain-obj: 2.1.0 @@ -37843,7 +38735,8 @@ snapshots: stable@0.1.8: {} - stack-trace@1.0.0-pre2: {} + stack-trace@1.0.0-pre2: + optional: true stack-utils@2.0.6: dependencies: @@ -37853,6 +38746,8 @@ snapshots: stackframe@1.3.4: {} + standard-as-callback@2.1.0: {} + start-server-and-test@1.14.0: dependencies: bluebird: 3.7.2 @@ -38119,7 +39014,7 @@ snapshots: stylehacks@4.0.3: dependencies: - browserslist: 4.23.0 + browserslist: 4.24.0 postcss: 7.0.39 postcss-selector-parser: 3.1.2 @@ -38148,8 +39043,8 @@ snapshots: stylelint-order@6.0.4(stylelint@16.3.1(typescript@5.6.3)): dependencies: - postcss: 8.4.38 - postcss-sorting: 8.0.2(postcss@8.4.38) + postcss: 8.4.47 + postcss-sorting: 8.0.2(postcss@8.4.47) stylelint: 16.3.1(typescript@5.6.3) stylelint-prettier@4.0.2(prettier@3.0.3)(stylelint@15.10.3(typescript@5.6.3)): @@ -38354,7 +39249,7 @@ snapshots: css-select: 4.3.0 css-tree: 1.1.3 csso: 4.2.0 - picocolors: 1.0.0 + picocolors: 1.1.0 stable: 0.1.8 symbol-observable@1.2.0: {} @@ -38565,11 +39460,6 @@ snapshots: dependencies: semver: 5.7.2 - tiny-glob@0.2.9: - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - tiny-invariant@1.0.6: {} tiny-invariant@1.3.3: {} @@ -38678,10 +39568,6 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.3.0(typescript@5.0.4): - dependencies: - typescript: 5.0.4 - ts-api-utils@1.3.0(typescript@5.6.3): dependencies: typescript: 5.6.3 @@ -38776,6 +39662,13 @@ snapshots: tslib: 1.14.1 typescript: 5.6.3 + tsx@4.19.1: + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.1 + optionalDependencies: + fsevents: 2.3.3 + tty-browserify@0.0.0: {} tuf-js@1.1.7: @@ -38790,6 +39683,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + turbo-stream@2.4.0: {} + tweetnacl@0.14.5: {} type-check@0.4.0: @@ -38859,8 +39754,6 @@ snapshots: typedarray@0.0.6: {} - typescript@5.0.4: {} - typescript@5.4.2: {} typescript@5.6.3: {} @@ -38896,6 +39789,8 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 + undici@6.20.1: {} + undoo@0.5.0: dependencies: defaulty: 2.1.0 @@ -38944,9 +39839,9 @@ snapshots: trough: 2.2.0 vfile: 6.0.1 - unimport@3.7.1(rollup@4.14.3): + unimport@3.7.1(rollup@4.24.0): dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) + '@rollup/pluginutils': 5.1.0(rollup@4.24.0) acorn: 8.11.3 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 @@ -39084,6 +39979,13 @@ snapshots: webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.1 + unplugin@1.14.1(webpack-sources@3.2.3): + dependencies: + acorn: 8.12.1 + webpack-virtual-modules: 0.6.2 + optionalDependencies: + webpack-sources: 3.2.3 + unquote@1.1.1: {} unset-value@1.0.0: @@ -39091,7 +39993,7 @@ snapshots: has-value: 0.3.1 isobject: 3.0.1 - unstorage@1.10.2: + unstorage@1.10.2(ioredis@5.4.1): dependencies: anymatch: 3.1.3 chokidar: 3.6.0 @@ -39103,6 +40005,8 @@ snapshots: node-fetch-native: 1.6.4 ofetch: 1.3.4 ufo: 1.5.3 + optionalDependencies: + ioredis: 5.4.1 transitivePeerDependencies: - uWebSockets.js @@ -39114,6 +40018,15 @@ snapshots: consola: 3.2.3 pathe: 1.1.2 + unwasm@0.3.9: + dependencies: + knitwork: 1.1.0 + magic-string: 0.30.11 + mlly: 1.6.1 + pathe: 1.1.2 + pkg-types: 1.1.0 + unplugin: 1.10.1 + upath@1.2.0: optional: true @@ -39121,7 +40034,13 @@ snapshots: dependencies: browserslist: 4.23.0 escalade: 3.1.2 - picocolors: 1.0.0 + picocolors: 1.1.0 + + update-browserslist-db@1.1.1(browserslist@4.24.0): + dependencies: + browserslist: 4.24.0 + escalade: 3.2.0 + picocolors: 1.1.0 update-notifier@5.1.0: dependencies: @@ -39221,6 +40140,10 @@ snapshots: dependencies: react: 18.2.0 + use-sync-external-store@1.2.2(react@18.2.0): + dependencies: + react: 18.2.0 + use-trace-update@1.3.2: {} use@3.1.1: {} @@ -39275,8 +40198,6 @@ snapshots: convert-source-map: 1.9.0 source-map: 0.7.4 - validate-html-nesting@1.2.2: {} - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -39327,52 +40248,41 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vinxi@0.2.1(@testing-library/jest-dom@6.4.2(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)))(@types/node@20.12.7)(encoding@0.1.13)(less@3.11.1)(lightningcss@1.24.1)(preact@10.20.2)(rollup@4.14.3)(sass@1.75.0)(terser@5.30.3): + vinxi@0.3.11(@types/node@20.12.7)(encoding@0.1.13)(ioredis@5.4.1)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.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) '@types/micromatch': 4.0.7 - '@types/serve-static': 1.15.7 - '@types/ws': 8.5.10 - '@vinxi/devtools': 0.2.0(@babel/core@7.24.4)(@testing-library/jest-dom@6.4.2(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)))(preact@10.20.2)(rollup@4.14.3)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) '@vinxi/listhen': 1.5.6 boxen: 7.1.1 - c12: 1.10.0 chokidar: 3.6.0 citty: 0.1.6 consola: 3.2.3 - cookie-es: 1.1.0 + crossws: 0.2.4 + dax-sh: 0.39.2 defu: 6.1.4 - dts-buddy: 0.2.5 es-module-lexer: 1.5.0 esbuild: 0.18.20 fast-glob: 3.3.2 - get-port: 6.1.2 get-port-please: 3.1.2 - h3: 1.10.1 + h3: 1.11.1 hookable: 5.5.3 http-proxy: 1.18.1 micromatch: 4.0.5 - mri: 1.2.0 - nitropack: 2.8.1(encoding@0.1.13) + nitropack: 2.9.6(encoding@0.1.13) node-fetch-native: 1.6.4 path-to-regexp: 6.2.2 pathe: 1.1.2 - perfect-debounce: 1.0.0 radix3: 1.1.2 resolve: 1.22.8 - rollup-plugin-visualizer: 5.12.0(rollup@4.14.3) serve-placeholder: 2.0.1 serve-static: 1.15.0 ufo: 1.5.3 - uncrypto: 0.1.3 unctx: 2.3.1 unenv: 1.9.0 - unimport: 3.7.1(rollup@4.14.3) - unstorage: 1.10.2 - vite: 4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - ws: 8.16.0 + unstorage: 1.10.2(ioredis@5.4.1) + 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) zod: 3.22.5 transitivePeerDependencies: - '@azure/app-configuration' @@ -39382,29 +40292,27 @@ snapshots: - '@azure/keyvault-secrets' - '@azure/storage-blob' - '@capacitor/preferences' + - '@libsql/client' - '@netlify/blobs' - - '@nuxt/kit' - '@planetscale/database' - - '@testing-library/jest-dom' - '@types/node' - '@upstash/redis' - '@vercel/kv' - - bufferutil + - better-sqlite3 - debug + - drizzle-orm - encoding - idb-keyval - ioredis - less - lightningcss - - preact - - rollup - sass + - sass-embedded - stylus - sugarss - supports-color - terser - uWebSockets.js - - utf-8-validate - xml2js vinyl-file@3.0.0: @@ -39429,8 +40337,8 @@ snapshots: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) pathe: 1.1.2 - picocolors: 1.0.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) + picocolors: 1.1.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) transitivePeerDependencies: - '@types/node' - less @@ -39447,7 +40355,7 @@ snapshots: cac: 6.7.14 debug: 4.3.7 pathe: 1.1.2 - 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.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - '@types/node' - less @@ -39481,52 +40389,33 @@ snapshots: - rollup - supports-color - vite-plugin-inspect@0.7.42(rollup@4.14.3)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)): + vite-tsconfig-paths@4.3.2(typescript@5.6.3)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)): dependencies: - '@antfu/utils': 0.7.7 - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) debug: 4.3.4(supports-color@8.1.1) - error-stack-parser-es: 0.1.1 - fs-extra: 11.2.0 - open: 9.1.0 - picocolors: 1.0.0 - sirv: 2.0.4 - vite: 4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - transitivePeerDependencies: - - rollup - - supports-color - - vite-plugin-solid@2.10.2(@testing-library/jest-dom@6.4.2(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)))(solid-js@1.8.16)(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)): - dependencies: - '@babel/core': 7.24.4 - '@types/babel__core': 7.20.5 - babel-preset-solid: 1.8.16(@babel/core@7.24.4) - merge-anything: 5.1.7 - solid-js: 1.8.16 - solid-refresh: 0.6.3(solid-js@1.8.16) - vite: 4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) - vitefu: 0.2.5(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)) + globrex: 0.1.2 + tsconfck: 3.0.3(typescript@5.6.3) optionalDependencies: - '@testing-library/jest-dom': 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.12)(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)) + vite: 5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - supports-color + - typescript - vite-tsconfig-paths@4.3.2(typescript@5.6.3)(vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.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@20.12.7)(less@3.11.1)(lightningcss@1.24.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.2.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.24.1)(sass@1.75.0)(terser@5.30.3) transitivePeerDependencies: - supports-color - typescript - vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): + vite@5.2.9(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): dependencies: - esbuild: 0.18.20 - postcss: 8.4.31 - rollup: 3.29.4 + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.14.3 optionalDependencies: '@types/node': 20.12.7 fsevents: 2.3.3 @@ -39535,11 +40424,11 @@ snapshots: sass: 1.75.0 terser: 5.30.3 - vite@5.2.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.8(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3): dependencies: - esbuild: 0.20.2 - postcss: 8.4.38 - rollup: 4.14.3 + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.24.0 optionalDependencies: '@types/node': 20.12.7 fsevents: 2.3.3 @@ -39548,7 +40437,7 @@ snapshots: 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.9(@types/node@20.12.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 @@ -39561,10 +40450,6 @@ snapshots: sass: 1.75.0 terser: 5.30.3 - vitefu@0.2.5(vite@4.5.0(@types/node@20.12.7)(less@3.11.1)(lightningcss@1.24.1)(sass@1.75.0)(terser@5.30.3)): - optionalDependencies: - vite: 4.5.0(@types/node@20.12.7)(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.24.1)(sass@1.75.0)(terser@5.30.3)): dependencies: aria-query: 5.3.0 @@ -39578,7 +40463,7 @@ snapshots: vitest@2.1.3(@types/node@20.12.7)(jsdom@16.7.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.8(@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@20.12.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 @@ -39593,7 +40478,7 @@ snapshots: tinyexec: 0.3.0 tinypool: 1.0.1 tinyrainbow: 1.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.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) why-is-node-running: 2.3.0 optionalDependencies: @@ -39614,7 +40499,7 @@ snapshots: vitest@2.1.3(@types/node@20.12.7)(jsdom@21.1.2)(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.8(@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@20.12.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 @@ -39629,7 +40514,7 @@ snapshots: tinyexec: 0.3.0 tinypool: 1.0.1 tinyrainbow: 1.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.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) why-is-node-running: 2.3.0 optionalDependencies: @@ -39649,7 +40534,7 @@ snapshots: 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): dependencies: '@vitest/expect': 2.1.3 - '@vitest/mocker': 2.1.3(@vitest/spy@2.1.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)) + '@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/pretty-format': 2.1.3 '@vitest/runner': 2.1.3 '@vitest/snapshot': 2.1.3 @@ -39664,7 +40549,7 @@ snapshots: tinyexec: 0.3.0 tinypool: 1.0.1 tinyrainbow: 1.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.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) why-is-node-running: 2.3.0 optionalDependencies: @@ -39909,6 +40794,8 @@ snapshots: webpack-virtual-modules@0.6.1: {} + webpack-virtual-modules@0.6.2: {} + webpack@4.47.0: dependencies: '@webassemblyjs/ast': 1.9.0 @@ -40077,6 +40964,10 @@ snapshots: dependencies: isexe: 2.0.0 + which@4.0.0: + dependencies: + isexe: 3.1.1 + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 @@ -40161,6 +41052,8 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 + ws@7.5.10: {} + ws@7.5.9: {} ws@8.16.0: {} @@ -40245,7 +41138,7 @@ snapshots: cli-table: 0.3.11 commander: 7.1.0 dateformat: 4.6.3 - debug: 4.3.7 + debug: 4.3.4(supports-color@8.1.1) diff: 5.2.0 error: 10.4.0 escape-string-regexp: 4.0.0 @@ -40266,7 +41159,7 @@ snapshots: p-transform: 1.3.0 pacote: 12.0.3 preferred-pm: 3.1.4 - pretty-bytes: 5.6.0 + pretty-bytes: 5.3.0 readable-stream: 4.5.2 semver: 7.6.3 slash: 3.0.0 @@ -40326,12 +41219,14 @@ snapshots: optionalDependencies: commander: 9.5.0 - zip-stream@5.0.2: + zip-stream@6.0.1: dependencies: - archiver-utils: 4.0.1 - compress-commons: 5.0.3 - readable-stream: 3.6.2 + archiver-utils: 5.0.2 + compress-commons: 6.0.2 + readable-stream: 4.5.2 zod@3.22.5: {} + zod@3.23.8: {} + zwitch@2.0.4: {} From aeea3edfc04033b3dd152fd3eb792a97809b0681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Fri, 18 Oct 2024 08:40:28 +0200 Subject: [PATCH 12/50] Some types improvements/fixes (#6412) Co-authored-by: Steve Piercy --- packages/types/news/6412.bugfix | 1 + packages/types/src/config/Blocks.d.ts | 3 +++ packages/types/src/config/Settings.d.ts | 4 ++-- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 packages/types/news/6412.bugfix diff --git a/packages/types/news/6412.bugfix b/packages/types/news/6412.bugfix new file mode 100644 index 0000000000..2bd24ed571 --- /dev/null +++ b/packages/types/news/6412.bugfix @@ -0,0 +1 @@ +Some improvements and fixes in blocks and settings types. @sneridagh diff --git a/packages/types/src/config/Blocks.d.ts b/packages/types/src/config/Blocks.d.ts index cec3e97491..2b2a6b4f4c 100644 --- a/packages/types/src/config/Blocks.d.ts +++ b/packages/types/src/config/Blocks.d.ts @@ -1,6 +1,7 @@ import type { Content } from '../content'; import type { BlockViewProps, BlockEditProps } from '../blocks'; import type { IntlShape } from 'react-intl'; +import { User } from '../services'; export interface BlocksConfig { blocksConfig: BlocksConfigData; @@ -79,6 +80,7 @@ export interface BlockConfigBase { block: BlockConfigBase; // TODO: This has to be extendable navRoot: Content; contentType: string; + user: User; }) => boolean) | boolean; @@ -124,6 +126,7 @@ export interface BlockExtension { title: string; template?: React.ComponentType; render?: React.ComponentType; + view?: React.ComponentType; fullobjects?: boolean; } diff --git a/packages/types/src/config/Settings.d.ts b/packages/types/src/config/Settings.d.ts index 68df1ab205..68419e2db2 100644 --- a/packages/types/src/config/Settings.d.ts +++ b/packages/types/src/config/Settings.d.ts @@ -1,5 +1,5 @@ import { Content } from '../content'; -import { BlocksConfigData } from './Blocks'; +import { BlocksFormData } from '../blocks/index'; type apiExpandersType = | { match: string; GET_CONTENT: string[] } @@ -19,7 +19,7 @@ type styleClassNameExtendersType = ({ }: { block: string; content: Content; - data: BlocksConfigData; + data: BlocksFormData; classNames: string[]; }) => string[]; From 018e25661c4fdde33a72ca2441a744516c622dae Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Fri, 18 Oct 2024 08:55:56 +0200 Subject: [PATCH 13/50] Release @plone/types 1.0.0-alpha.21 --- packages/types/CHANGELOG.md | 10 ++++++++++ packages/types/news/6407.internal | 1 - packages/types/news/6412.bugfix | 1 - packages/types/package.json | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) delete mode 100644 packages/types/news/6407.internal delete mode 100644 packages/types/news/6412.bugfix diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index 559326a430..8be199b528 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -8,6 +8,16 @@ +## 1.0.0-alpha.21 (2024-10-18) + +### Bugfix + +- Some improvements and fixes in blocks and settings types. @sneridagh [#6412](https://github.com/plone/volto/issues/6412) + +### Internal + +- Update typescript and vitest everywhere @sneridagh [#6407](https://github.com/plone/volto/issues/6407) + ## 1.0.0-alpha.20 (2024-10-08) ### Bugfix diff --git a/packages/types/news/6407.internal b/packages/types/news/6407.internal deleted file mode 100644 index f6daada94d..0000000000 --- a/packages/types/news/6407.internal +++ /dev/null @@ -1 +0,0 @@ -Update typescript and vitest everywhere @sneridagh diff --git a/packages/types/news/6412.bugfix b/packages/types/news/6412.bugfix deleted file mode 100644 index 2bd24ed571..0000000000 --- a/packages/types/news/6412.bugfix +++ /dev/null @@ -1 +0,0 @@ -Some improvements and fixes in blocks and settings types. @sneridagh diff --git a/packages/types/package.json b/packages/types/package.json index 45fb884921..46471747ab 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.0.0-alpha.20", + "version": "1.0.0-alpha.21", "repository": { "type": "git", "url": "https://github.com/plone/volto.git" From 17f8fdaff668a73df6001b8cce87efff479c64d1 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Fri, 18 Oct 2024 08:57:12 +0200 Subject: [PATCH 14/50] Release @plone/client 1.0.0-alpha.19 --- packages/client/CHANGELOG.md | 13 +++++++++++++ packages/client/news/6069.internal | 1 - packages/client/news/6373.internal | 1 - packages/client/news/6382.internal | 1 - packages/client/news/6400.feature | 1 - packages/client/news/6407.internal | 1 - packages/client/package.json | 2 +- 7 files changed, 14 insertions(+), 6 deletions(-) delete mode 100644 packages/client/news/6069.internal delete mode 100644 packages/client/news/6373.internal delete mode 100644 packages/client/news/6382.internal delete mode 100644 packages/client/news/6400.feature delete mode 100644 packages/client/news/6407.internal diff --git a/packages/client/CHANGELOG.md b/packages/client/CHANGELOG.md index 236130348d..0761493643 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -8,6 +8,19 @@ +## 1.0.0-alpha.19 (2024-10-18) + +### Feature + +- Add support for the `depth` parameter on `getNavigationQuery`. @ebrehault [#6400](https://github.com/plone/volto/pull/6400) + +### Internal + +- Upgrade `@tanstack/react-query`. @sneridagh [#6069](https://github.com/plone/volto/pull/6069) +- Update Vite and vitest versions @sneridagh [#6373](https://github.com/plone/volto/pull/6373) +- Added watch script to package.json @pnicolli @deodorhunter [#6382](https://github.com/plone/volto/pull/6382) +- Update typescript and vitest everywhere @sneridagh [#6407](https://github.com/plone/volto/pull/6407) + ## 1.0.0-alpha.18 (2024-10-03) ### Bugfix diff --git a/packages/client/news/6069.internal b/packages/client/news/6069.internal deleted file mode 100644 index d62f585cd5..0000000000 --- a/packages/client/news/6069.internal +++ /dev/null @@ -1 +0,0 @@ -Upgrade `@tanstack/react-query`. @sneridagh diff --git a/packages/client/news/6373.internal b/packages/client/news/6373.internal deleted file mode 100644 index 2b6d200183..0000000000 --- a/packages/client/news/6373.internal +++ /dev/null @@ -1 +0,0 @@ -Update Vite and vitest versions @sneridagh diff --git a/packages/client/news/6382.internal b/packages/client/news/6382.internal deleted file mode 100644 index 2c28588a74..0000000000 --- a/packages/client/news/6382.internal +++ /dev/null @@ -1 +0,0 @@ -Added watch script to package.json @pnicolli @deodorhunter \ No newline at end of file diff --git a/packages/client/news/6400.feature b/packages/client/news/6400.feature deleted file mode 100644 index c28403c93a..0000000000 --- a/packages/client/news/6400.feature +++ /dev/null @@ -1 +0,0 @@ -Add support for the `depth` parameter on `getNavigationQuery`. @ebrehault \ No newline at end of file diff --git a/packages/client/news/6407.internal b/packages/client/news/6407.internal deleted file mode 100644 index f6daada94d..0000000000 --- a/packages/client/news/6407.internal +++ /dev/null @@ -1 +0,0 @@ -Update typescript and vitest everywhere @sneridagh diff --git a/packages/client/package.json b/packages/client/package.json index 89b4b87ba5..d33b80c4f4 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -8,7 +8,7 @@ } ], "license": "MIT", - "version": "1.0.0-alpha.18", + "version": "1.0.0-alpha.19", "repository": { "type": "git", "url": "git@github.com:plone/volto.git" From fb2dee6ae9964c5a3f9a06c065f1de13797cb704 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Fri, 18 Oct 2024 09:02:19 +0200 Subject: [PATCH 15/50] Release @plone/components 2.0.0-alpha.16 --- packages/components/CHANGELOG.md | 16 ++++++++++++++++ packages/components/news/6069.breaking | 6 ------ packages/components/news/6407.internal | 1 - packages/components/news/6410.internal | 1 - packages/components/package.json | 2 +- 5 files changed, 17 insertions(+), 9 deletions(-) delete mode 100644 packages/components/news/6069.breaking delete mode 100644 packages/components/news/6407.internal delete mode 100644 packages/components/news/6410.internal diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index 6e668c2f85..b034a50895 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -8,6 +8,22 @@ +## 2.0.0-alpha.16 (2024-10-18) + +### Breaking + +- Removed the `FlattenToAppURLProvider` since it's no longer needed. @sneridagh + The components in here need it. + Refactored the `Link` component to not use it, since `react-aria-components` uses the React Client Routing facilities that can be injected into the React tree. + + Breaking: + - Use the new providers in `@plone/providers` instead to make the new `Link` work with them. [#6069](https://github.com/plone/volto/issues/6069) + +### Internal + +- Update typescript and vitest everywhere @sneridagh [#6407](https://github.com/plone/volto/issues/6407) +- Adjust the path to perform a proper `git diff` between the cached and current commits to determine whether to build the Storybook for the components package on Netlify. @stevepiercy [#6410](https://github.com/plone/volto/issues/6410) + ## 2.0.0-alpha.15 (2024-10-14) ### Bugfix diff --git a/packages/components/news/6069.breaking b/packages/components/news/6069.breaking deleted file mode 100644 index c2801c7201..0000000000 --- a/packages/components/news/6069.breaking +++ /dev/null @@ -1,6 +0,0 @@ -Removed the `FlattenToAppURLProvider` since it's no longer needed. @sneridagh -The components in here need it. -Refactored the `Link` component to not use it, since `react-aria-components` uses the React Client Routing facilities that can be injected into the React tree. - -Breaking: - - Use the new providers in `@plone/providers` instead to make the new `Link` work with them. diff --git a/packages/components/news/6407.internal b/packages/components/news/6407.internal deleted file mode 100644 index f6daada94d..0000000000 --- a/packages/components/news/6407.internal +++ /dev/null @@ -1 +0,0 @@ -Update typescript and vitest everywhere @sneridagh diff --git a/packages/components/news/6410.internal b/packages/components/news/6410.internal deleted file mode 100644 index 23df896212..0000000000 --- a/packages/components/news/6410.internal +++ /dev/null @@ -1 +0,0 @@ -Adjust the path to perform a proper `git diff` between the cached and current commits to determine whether to build the Storybook for the components package on Netlify. @stevepiercy diff --git a/packages/components/package.json b/packages/components/package.json index 3e798c07b5..8c49018249 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -8,7 +8,7 @@ } ], "license": "MIT", - "version": "2.0.0-alpha.15", + "version": "2.0.0-alpha.16", "repository": { "type": "git", "url": "http://github.com/plone/components.git" From 644bb6263e8a535b66772f2c399db030e79e49d7 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Fri, 18 Oct 2024 09:03:57 +0200 Subject: [PATCH 16/50] Release @plone/providers 1.0.0-alpha.3 --- packages/providers/.release-it.json | 2 +- packages/providers/CHANGELOG.md | 14 ++++++++++++++ packages/providers/news/6069.breaking | 3 --- packages/providers/news/6407.internal | 1 - packages/providers/package.json | 4 ++-- 5 files changed, 17 insertions(+), 7 deletions(-) delete mode 100644 packages/providers/news/6069.breaking delete mode 100644 packages/providers/news/6407.internal diff --git a/packages/providers/.release-it.json b/packages/providers/.release-it.json index 2087371cdb..78a8734399 100644 --- a/packages/providers/.release-it.json +++ b/packages/providers/.release-it.json @@ -5,7 +5,7 @@ "hooks": { "after:bump": [ "pipx run towncrier build --draft --yes --version ${version} > .changelog.draft && pipx run towncrier build --yes --version ${version}", - "pnpm build" + "pnpm build:force" ], "after:release": "rm .changelog.draft" }, diff --git a/packages/providers/CHANGELOG.md b/packages/providers/CHANGELOG.md index 9aad3658e3..c8326e298c 100644 --- a/packages/providers/CHANGELOG.md +++ b/packages/providers/CHANGELOG.md @@ -8,6 +8,20 @@ +## 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 diff --git a/packages/providers/news/6069.breaking b/packages/providers/news/6069.breaking deleted file mode 100644 index 5425f3e2f7..0000000000 --- a/packages/providers/news/6069.breaking +++ /dev/null @@ -1,3 +0,0 @@ -Improve and group providers. @sneridagh -Breaking: - - The interface of the providers has changed. Please check the new one, and adapt your apps accordingly. diff --git a/packages/providers/news/6407.internal b/packages/providers/news/6407.internal deleted file mode 100644 index f6daada94d..0000000000 --- a/packages/providers/news/6407.internal +++ /dev/null @@ -1 +0,0 @@ -Update typescript and vitest everywhere @sneridagh diff --git a/packages/providers/package.json b/packages/providers/package.json index df5d4bc247..100c519771 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.1", + "version": "1.0.0-alpha.3", "repository": { "type": "git", "url": "https://github.com/plone/volto.git" @@ -43,7 +43,7 @@ "scripts": { "watch": "parcel watch", "build": "parcel build", - "build:force": "parcel build --no-cache", + "build:force": "rm -rf dist && parcel build --no-cache", "test": "vitest", "dry-release": "release-it --dry-run", "release": "release-it", From 3371c847714371107afa114b90ccefa0c6908250 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Fri, 18 Oct 2024 09:06:10 +0200 Subject: [PATCH 17/50] Release generate-volto 9.0.0-alpha.19 --- packages/generator-volto/CHANGELOG.md | 6 ++++++ packages/generator-volto/news/6406.internal | 1 - packages/generator-volto/package.json | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) delete mode 100644 packages/generator-volto/news/6406.internal diff --git a/packages/generator-volto/CHANGELOG.md b/packages/generator-volto/CHANGELOG.md index 8eb76d1bb6..9a16049080 100644 --- a/packages/generator-volto/CHANGELOG.md +++ b/packages/generator-volto/CHANGELOG.md @@ -8,6 +8,12 @@ +## 9.0.0-alpha.19 (2024-10-18) + +### Internal + +- Update to use jest 26 @sneridagh [#6406](https://github.com/plone/volto/issues/6406) + ## 9.0.0-alpha.18 (2024-10-04) ### Breaking diff --git a/packages/generator-volto/news/6406.internal b/packages/generator-volto/news/6406.internal deleted file mode 100644 index 9c0c588ecc..0000000000 --- a/packages/generator-volto/news/6406.internal +++ /dev/null @@ -1 +0,0 @@ -Update to use jest 26 @sneridagh diff --git a/packages/generator-volto/package.json b/packages/generator-volto/package.json index 6dfc9a2dcd..295e6f4ab9 100644 --- a/packages/generator-volto/package.json +++ b/packages/generator-volto/package.json @@ -10,7 +10,7 @@ } ], "license": "MIT", - "version": "9.0.0-alpha.18", + "version": "9.0.0-alpha.19", "repository": { "type": "git", "url": "git+https://github.com/plone/generator-volto.git" From 636cdde91a50b604593e30d9fe90ebd17b98bd98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Fri, 18 Oct 2024 14:05:33 +0200 Subject: [PATCH 18/50] Remove the Plone app from apps folder (#6415) --- apps/plone/.editorconfig | 34 - apps/plone/.eslintrc.js | 63 - apps/plone/.gitignore | 82 - apps/plone/.prettierignore | 3 - apps/plone/.storybook/main.js | 177 - apps/plone/.storybook/manager.js | 15 - apps/plone/.storybook/preview.js | 28 - apps/plone/Makefile | 106 - apps/plone/README.md | 81 - apps/plone/babel.config.js | 1 - apps/plone/cypress.config.js | 8 - apps/plone/cypress/.gitkeep | 0 apps/plone/cypress/fixtures/broccoli.jpg | Bin 102057 -> 0 bytes apps/plone/cypress/fixtures/example.json | 5 - apps/plone/cypress/fixtures/file.pdf | Bin 74429 -> 0 bytes apps/plone/cypress/fixtures/halfdome2022.jpg | Bin 319364 -> 0 bytes apps/plone/cypress/fixtures/image.png | Bin 1185 -> 0 bytes apps/plone/cypress/plugins/index.js | 17 - apps/plone/cypress/support/commands.js | 9 - apps/plone/cypress/support/e2e.js | 14 - apps/plone/cypress/support/reset-fixture.js | 43 - apps/plone/cypress/tests/.gitkeep | 0 apps/plone/locales/de/LC_MESSAGES/volto.po | 20 - apps/plone/locales/en/LC_MESSAGES/volto.po | 14 - apps/plone/locales/es/LC_MESSAGES/volto.po | 21 - apps/plone/locales/eu/LC_MESSAGES/volto.po | 19 - apps/plone/locales/fr/LC_MESSAGES/volto.po | 20 - apps/plone/locales/it/LC_MESSAGES/volto.po | 14 - apps/plone/locales/ja/LC_MESSAGES/volto.po | 19 - apps/plone/locales/nl/LC_MESSAGES/volto.po | 18 - apps/plone/locales/pt/LC_MESSAGES/volto.po | 19 - apps/plone/locales/pt_BR/LC_MESSAGES/volto.po | 18 - apps/plone/locales/ro/LC_MESSAGES/volto.po | 18 - apps/plone/locales/volto.pot | 16 - apps/plone/mrs.developer.json | 5 - apps/plone/package.json | 361 -- apps/plone/patches/patchit.sh | 2 - apps/plone/patches/razzle-jest.patch | 10 - apps/plone/public/android-chrome-192x192.png | Bin 8295 -> 0 bytes apps/plone/public/android-chrome-512x512.png | Bin 23153 -> 0 bytes apps/plone/public/apple-touch-icon.png | Bin 7973 -> 0 bytes apps/plone/public/favicon-16x16.png | Bin 1012 -> 0 bytes apps/plone/public/favicon-32x32.png | Bin 1618 -> 0 bytes apps/plone/public/favicon.ico | Bin 15086 -> 0 bytes apps/plone/public/icon.svg | 13 - apps/plone/public/index.html.spa | 34 - apps/plone/public/robots.txt | 2 - apps/plone/public/site.webmanifest | 19 - apps/plone/razzle.config.js | 44 - .../.github/workflows/acceptance.yml | 52 - .../.github/workflows/changelog.yml | 43 - .../.github/workflows/code.yml | 15 - .../.github/workflows/unit.yml | 15 - .../src/addons/volto-volto-project/.gitignore | 27 - .../addons/volto-volto-project/CHANGELOG.md | 9 - .../src/addons/volto-volto-project/Makefile | 151 - .../src/addons/volto-volto-project/README.md | 135 - .../volto-volto-project/acceptance/ci.yml | 29 - .../acceptance/cypress.config.js | 9 - .../acceptance/cypress/fixtures/broccoli.jpg | Bin 102057 -> 0 bytes .../acceptance/cypress/fixtures/example.json | 5 - .../acceptance/cypress/fixtures/file.pdf | Bin 74429 -> 0 bytes .../cypress/fixtures/halfdome2022.jpg | Bin 319364 -> 0 bytes .../acceptance/cypress/fixtures/image.png | Bin 1185 -> 0 bytes .../acceptance/cypress/plugins/index.js | 17 - .../acceptance/cypress/support/commands.js | 1 - .../acceptance/cypress/support/e2e.js | 14 - .../cypress/support/reset-fixture.js | 43 - .../acceptance/cypress/support/slate.js | 14 - .../acceptance/cypress/tests/basic.cy.js | 71 - .../acceptance/docker-compose.yml | 53 - .../acceptance/package.json | 5 - .../volto-volto-project/babel.config.js | 17 - .../dockerfiles/Dockerfile | 27 - .../dockerfiles/Dockerfile.acceptance | 16 - .../dockerfiles/Dockerfile.dev | 21 - .../dockerfiles/docker-compose.yml | 56 - .../volto-volto-project/jest-addon.config.js | 33 - .../volto-volto-project/locales/volto.pot | 14 - .../addons/volto-volto-project/package.json | 44 - .../addons/volto-volto-project/src/index.ts | 7 - .../src/theme/theme.config | 88 - .../addons/volto-volto-project/towncrier.toml | 33 - apps/plone/src/client.js | 7 - apps/plone/src/config.js | 18 - apps/plone/src/customizations/README.md | 6 - apps/plone/src/index.js | 7 - apps/plone/src/reducers/index.js | 20 - apps/plone/src/routes.js | 26 - apps/plone/src/theme.js | 2 - apps/plone/tsconfig.json | 32 - pnpm-lock.yaml | 3433 +---------------- 92 files changed, 30 insertions(+), 5977 deletions(-) delete mode 100644 apps/plone/.editorconfig delete mode 100644 apps/plone/.eslintrc.js delete mode 100644 apps/plone/.gitignore delete mode 100644 apps/plone/.prettierignore delete mode 100644 apps/plone/.storybook/main.js delete mode 100644 apps/plone/.storybook/manager.js delete mode 100644 apps/plone/.storybook/preview.js delete mode 100644 apps/plone/Makefile delete mode 100644 apps/plone/README.md delete mode 100644 apps/plone/babel.config.js delete mode 100644 apps/plone/cypress.config.js delete mode 100644 apps/plone/cypress/.gitkeep delete mode 100644 apps/plone/cypress/fixtures/broccoli.jpg delete mode 100644 apps/plone/cypress/fixtures/example.json delete mode 100644 apps/plone/cypress/fixtures/file.pdf delete mode 100644 apps/plone/cypress/fixtures/halfdome2022.jpg delete mode 100644 apps/plone/cypress/fixtures/image.png delete mode 100644 apps/plone/cypress/plugins/index.js delete mode 100644 apps/plone/cypress/support/commands.js delete mode 100644 apps/plone/cypress/support/e2e.js delete mode 100644 apps/plone/cypress/support/reset-fixture.js delete mode 100644 apps/plone/cypress/tests/.gitkeep delete mode 100644 apps/plone/locales/de/LC_MESSAGES/volto.po delete mode 100644 apps/plone/locales/en/LC_MESSAGES/volto.po delete mode 100644 apps/plone/locales/es/LC_MESSAGES/volto.po delete mode 100644 apps/plone/locales/eu/LC_MESSAGES/volto.po delete mode 100644 apps/plone/locales/fr/LC_MESSAGES/volto.po delete mode 100644 apps/plone/locales/it/LC_MESSAGES/volto.po delete mode 100644 apps/plone/locales/ja/LC_MESSAGES/volto.po delete mode 100644 apps/plone/locales/nl/LC_MESSAGES/volto.po delete mode 100644 apps/plone/locales/pt/LC_MESSAGES/volto.po delete mode 100644 apps/plone/locales/pt_BR/LC_MESSAGES/volto.po delete mode 100644 apps/plone/locales/ro/LC_MESSAGES/volto.po delete mode 100644 apps/plone/locales/volto.pot delete mode 100644 apps/plone/mrs.developer.json delete mode 100644 apps/plone/package.json delete mode 100644 apps/plone/patches/patchit.sh delete mode 100644 apps/plone/patches/razzle-jest.patch delete mode 100644 apps/plone/public/android-chrome-192x192.png delete mode 100644 apps/plone/public/android-chrome-512x512.png delete mode 100644 apps/plone/public/apple-touch-icon.png delete mode 100644 apps/plone/public/favicon-16x16.png delete mode 100644 apps/plone/public/favicon-32x32.png delete mode 100644 apps/plone/public/favicon.ico delete mode 100644 apps/plone/public/icon.svg delete mode 100644 apps/plone/public/index.html.spa delete mode 100644 apps/plone/public/robots.txt delete mode 100644 apps/plone/public/site.webmanifest delete mode 100644 apps/plone/razzle.config.js delete mode 100644 apps/plone/src/addons/volto-volto-project/.github/workflows/acceptance.yml delete mode 100644 apps/plone/src/addons/volto-volto-project/.github/workflows/changelog.yml delete mode 100644 apps/plone/src/addons/volto-volto-project/.github/workflows/code.yml delete mode 100644 apps/plone/src/addons/volto-volto-project/.github/workflows/unit.yml delete mode 100644 apps/plone/src/addons/volto-volto-project/.gitignore delete mode 100644 apps/plone/src/addons/volto-volto-project/CHANGELOG.md delete mode 100644 apps/plone/src/addons/volto-volto-project/Makefile delete mode 100644 apps/plone/src/addons/volto-volto-project/README.md delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/ci.yml delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/cypress.config.js delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/cypress/fixtures/broccoli.jpg delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/cypress/fixtures/example.json delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/cypress/fixtures/file.pdf delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/cypress/fixtures/halfdome2022.jpg delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/cypress/fixtures/image.png delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/cypress/plugins/index.js delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/cypress/support/commands.js delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/cypress/support/e2e.js delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/cypress/support/reset-fixture.js delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/cypress/support/slate.js delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/cypress/tests/basic.cy.js delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/docker-compose.yml delete mode 100644 apps/plone/src/addons/volto-volto-project/acceptance/package.json delete mode 100644 apps/plone/src/addons/volto-volto-project/babel.config.js delete mode 100644 apps/plone/src/addons/volto-volto-project/dockerfiles/Dockerfile delete mode 100644 apps/plone/src/addons/volto-volto-project/dockerfiles/Dockerfile.acceptance delete mode 100644 apps/plone/src/addons/volto-volto-project/dockerfiles/Dockerfile.dev delete mode 100644 apps/plone/src/addons/volto-volto-project/dockerfiles/docker-compose.yml delete mode 100644 apps/plone/src/addons/volto-volto-project/jest-addon.config.js delete mode 100644 apps/plone/src/addons/volto-volto-project/locales/volto.pot delete mode 100644 apps/plone/src/addons/volto-volto-project/package.json delete mode 100644 apps/plone/src/addons/volto-volto-project/src/index.ts delete mode 100644 apps/plone/src/addons/volto-volto-project/src/theme/theme.config delete mode 100644 apps/plone/src/addons/volto-volto-project/towncrier.toml delete mode 100644 apps/plone/src/client.js delete mode 100644 apps/plone/src/config.js delete mode 100644 apps/plone/src/customizations/README.md delete mode 100644 apps/plone/src/index.js delete mode 100644 apps/plone/src/reducers/index.js delete mode 100644 apps/plone/src/routes.js delete mode 100644 apps/plone/src/theme.js delete mode 100644 apps/plone/tsconfig.json diff --git a/apps/plone/.editorconfig b/apps/plone/.editorconfig deleted file mode 100644 index 6c43b88c57..0000000000 --- a/apps/plone/.editorconfig +++ /dev/null @@ -1,34 +0,0 @@ -# EditorConfig Configurtaion file, for more details see: -# http://EditorConfig.org -# EditorConfig is a convention description, that could be interpreted -# by multiple editors to enforce common coding conventions for specific -# file types - -# top-most EditorConfig file: -# Will ignore other EditorConfig files in Home directory or upper tree level. -root = true - - -[*] # For All Files -# Unix-style newlines with a newline ending every file -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true -# Set default charset -charset = utf-8 -# Indent style default -indent_style = space - -[*.{py,cfg,ini}] -# 4 space indentation -indent_size = 4 - -[*.{html,dtml,pt,zpt,xml,zcml,js,jsx,json,less,css,yaml,yml}] -# 2 space indentation -indent_size = 2 - -[{Makefile,.gitmodules}] -# Tab indentation (no size specified, but view as 4 spaces) -indent_style = tab -indent_size = unset -tab_width = unset diff --git a/apps/plone/.eslintrc.js b/apps/plone/.eslintrc.js deleted file mode 100644 index 6148e2e62f..0000000000 --- a/apps/plone/.eslintrc.js +++ /dev/null @@ -1,63 +0,0 @@ -const fs = require('fs'); -const projectRootPath = __dirname; -const AddonConfigurationRegistry = require('@plone/registry/src/addon-registry'); - -let voltoPath = './node_modules/@plone/volto'; - -let configFile; -if (fs.existsSync(`${projectRootPath}/tsconfig.json`)) - configFile = `${projectRootPath}/tsconfig.json`; -else if (fs.existsSync(`${projectRootPath}/jsconfig.json`)) - configFile = `${projectRootPath}/jsconfig.json`; - -if (configFile) { - const jsConfig = require(configFile).compilerOptions; - const pathsConfig = jsConfig.paths; - if (pathsConfig['@plone/volto']) - voltoPath = `./${jsConfig.baseUrl}/${pathsConfig['@plone/volto'][0]}`; -} - -const reg = new AddonConfigurationRegistry(__dirname); - -// Extends ESlint configuration for adding the aliases to `src` directories in Volto addons -const addonAliases = Object.keys(reg.packages).map((o) => [ - o, - reg.packages[o].modulePath, -]); - -const addonExtenders = reg.getEslintExtenders().map((m) => require(m)); - -const defaultConfig = { - extends: `${voltoPath}/.eslintrc`, - ignorePatterns: [ - // '.storybook/**/*', - 'src/addons/**/node_modules', - 'src/addons/**/cypress', - 'src/addons/**/build', - '!src/addons/volto-volto-project', - ], - settings: { - 'import/resolver': { - alias: { - map: [ - ['@plone/volto', '@plone/volto/src'], - ['@plone/volto-slate', '@plone/volto-slate/src'], - ...addonAliases, - ['@root', `${__dirname}/src`], - ['~', `${__dirname}/src`], - ], - extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'], - }, - 'babel-plugin-root-import': { - rootPathSuffix: 'src', - }, - }, - }, -}; - -const config = addonExtenders.reduce( - (acc, extender) => extender.modify(acc), - defaultConfig, -); - -module.exports = config; diff --git a/apps/plone/.gitignore b/apps/plone/.gitignore deleted file mode 100644 index a8b3ab728b..0000000000 --- a/apps/plone/.gitignore +++ /dev/null @@ -1,82 +0,0 @@ -.vscode/ -logs -*.log -npm-debug.log* -.DS_Store - -coverage - -# Node -node_modules -coverage -jsdoc -webpack-assets.json -webpack-stats.json -npm-debug.log -dist -junit.xml -eslint.xml -yarn-error.log -build - -# Other -.DS_Store -.idea -lighthouse-report.html -.vscode/ -.#* -*~ - -# Python -/bin/ -/lib/ -.Python -include -pip-selfcheck.json -pyvenv.cfg -share - -# locales -locales/*.json - -# Tests -/tests/bin -/tests/develop-eggs -/tests/parts -/tests/.installed.cfg -*.pyc -geckodriver.log -log.html -output.xml -report.html -selenium-screenshot-*.png -/selenium/ -cypress/videos/ -cypress/screenshots - -# Local environment setup -.env -.env.local -.env.development.local -.env.test.local -.env.production.local - -# generic -data -omelette - -# build -public/critical.css -src/addons/* -/cache - -# yarn 3 -.pnp.* -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions - -!src/addons/volto-volto-project diff --git a/apps/plone/.prettierignore b/apps/plone/.prettierignore deleted file mode 100644 index 84cca9725b..0000000000 --- a/apps/plone/.prettierignore +++ /dev/null @@ -1,3 +0,0 @@ -src/**/CHANGELOG.md -src/**/README.md -!src/addons/volto-volto-project \ No newline at end of file diff --git a/apps/plone/.storybook/main.js b/apps/plone/.storybook/main.js deleted file mode 100644 index 0455b194c9..0000000000 --- a/apps/plone/.storybook/main.js +++ /dev/null @@ -1,177 +0,0 @@ -const webpack = require('webpack'); -const fs = require('fs'); -const path = require('path'); - -const projectRootPath = path.resolve('.'); -const lessPlugin = require('@plone/volto/webpack-plugins/webpack-less-plugin'); -const scssPlugin = require('razzle-plugin-scss'); - -const createConfig = require('../node_modules/razzle/config/createConfigAsync.js'); -const razzleConfig = require(path.join(projectRootPath, 'razzle.config.js')); - -const SVGLOADER = { - test: /icons\/.*\.svg$/, - use: [ - { - loader: 'svg-loader', - }, - { - loader: 'svgo-loader', - options: { - plugins: [ - { - name: 'preset-default', - params: { - overrides: { - convertPathData: false, - removeViewBox: false, - }, - }, - }, - 'removeTitle', - 'removeUselessStrokeAndFill', - ], - }, - }, - ], -}; - -const defaultRazzleOptions = { - verbose: false, - debug: {}, - buildType: 'iso', - cssPrefix: 'static/css', - jsPrefix: 'static/js', - enableSourceMaps: true, - enableReactRefresh: true, - enableTargetBabelrc: false, - enableBabelCache: true, - forceRuntimeEnvVars: [], - mediaPrefix: 'static/media', - staticCssInDev: false, - emitOnErrors: false, - disableWebpackbar: false, - browserslist: [ - '>1%', - 'last 4 versions', - 'Firefox ESR', - 'not ie 11', - 'not dead', - ], -}; - -module.exports = { - core: { - builder: 'webpack5', - }, - stories: ['../src/**/*.stories.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'], - addons: [ - '@storybook/addon-links', - '@storybook/addon-essentials', - // '@storybook/preset-scss', - ], - webpackFinal: async (config, { configType }) => { - // `configType` has a value of 'DEVELOPMENT' or 'PRODUCTION' - // You can change the configuration based on that. - // 'PRODUCTION' is used when building the static version of storybook. - - // Make whatever fine-grained changes you need - let baseConfig; - baseConfig = await createConfig( - 'web', - 'dev', - { - // clearConsole: false, - modifyWebpackConfig: razzleConfig.modifyWebpackConfig, - plugins: razzleConfig.plugins, - }, - webpack, - false, - undefined, - [], - defaultRazzleOptions, - ); - const AddonConfigurationRegistry = require('@plone/volto/addon-registry'); - - const registry = new AddonConfigurationRegistry(projectRootPath); - - config = lessPlugin({ registry }).modifyWebpackConfig({ - env: { target: 'web', dev: 'dev' }, - webpackConfig: config, - webpackObject: webpack, - options: {}, - }); - - config = scssPlugin.modifyWebpackConfig({ - env: { target: 'web', dev: 'dev' }, - webpackConfig: config, - webpackObject: webpack, - options: { razzleOptions: {} }, - }); - - // Put the SVG loader on top and prevent the asset/resource rule - // from processing the app's SVGs - config.module.rules.unshift(SVGLOADER); - const fileLoaderRule = config.module.rules.find((rule) => - rule.test.test('.svg'), - ); - fileLoaderRule.exclude = /icons\/.*\.svg$/; - - config.plugins.unshift( - new webpack.DefinePlugin({ - __DEVELOPMENT__: true, - __CLIENT__: true, - __SERVER__: false, - }), - ); - - const resultConfig = { - ...config, - resolve: { - ...config.resolve, - alias: { ...config.resolve.alias, ...baseConfig.resolve.alias }, - fallback: { ...config.resolve.fallback, zlib: false }, - }, - }; - - // Addons have to be loaded with babel - const addonPaths = registry.addonNames.map((addon) => - fs.realpathSync(registry.packages[addon].modulePath), - ); - resultConfig.module.rules[1].exclude = (input) => - // exclude every input from node_modules except from @plone/volto - /node_modules\/(?!(@plone\/volto)\/)/.test(input) && - // If input is in an addon, DON'T exclude it - !addonPaths.some((p) => input.includes(p)); - - const addonExtenders = registry.getAddonExtenders().map((m) => require(m)); - - const extendedConfig = addonExtenders.reduce( - (acc, extender) => - extender.modify(acc, { target: 'web', dev: 'dev' }, config), - resultConfig, - ); - - // Note: we don't actually support razzle plugins, which are also a feature - // of the razzle.extend.js addons file. Those features are probably - // provided in a different manner by Storybook plugins (for example scss - // loaders). - - return extendedConfig; - }, - babel: async (options) => { - return { - ...options, - plugins: [ - ...options.plugins, - [ - './node_modules/babel-plugin-root-import/build/index.js', - { - rootPathSuffix: './src', - }, - ], - ], - // any extra options you want to set - }; - }, -}; diff --git a/apps/plone/.storybook/manager.js b/apps/plone/.storybook/manager.js deleted file mode 100644 index cda31aa1fe..0000000000 --- a/apps/plone/.storybook/manager.js +++ /dev/null @@ -1,15 +0,0 @@ -import { addons } from '@storybook/addons'; - -addons.setConfig({ - isFullscreen: false, - showNav: true, - showPanel: true, - panelPosition: 'bottom', - sidebarAnimations: true, - enableShortcuts: true, - isToolshown: true, - theme: undefined, - selectedPanel: undefined, - initialActive: 'sidebar', - showRoots: true, -}); diff --git a/apps/plone/.storybook/preview.js b/apps/plone/.storybook/preview.js deleted file mode 100644 index bcbfccb212..0000000000 --- a/apps/plone/.storybook/preview.js +++ /dev/null @@ -1,28 +0,0 @@ -import '@plone/volto/config'; // This is the bootstrap for the global config - client side -import React from 'react'; -import { StaticRouter } from 'react-router-dom'; -import { IntlProvider } from 'react-intl'; -// eslint-disable-next-line import/no-unresolved -import enMessages from '@root/../locales/en.json'; - -import '@root/theme'; - -export const parameters = { - actions: { argTypesRegex: '^on[A-Z].*' }, - controls: { - matchers: { - color: /(background|color)$/i, - date: /Date$/, - }, - }, -}; - -export const decorators = [ - (Story) => ( - - - - - - ), -]; diff --git a/apps/plone/Makefile b/apps/plone/Makefile deleted file mode 100644 index 4a5a606c1f..0000000000 --- a/apps/plone/Makefile +++ /dev/null @@ -1,106 +0,0 @@ -### 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 - -# Update the versions depending on your project requirements | Last Updated 2023-03-02 -DOCKER_IMAGE=plone/server-dev:6.0.6 -DOCKER_IMAGE_ACCEPTANCE=plone/server-acceptance:6.0.6 -KGS= -NODEBIN = ./node_modules/.bin - -# Plone 5 legacy -DOCKER_IMAGE5=plone/plone-backend:5.2.12 -KGS5=plone.restapi==8.43.3 plone.volto==4.1.0 plone.rest==3.0.1 -TESTING_ADDONS=plone.app.robotframework==2.0.0 plone.app.testing==7.0.0 - -# Project settings - -DIR=$(shell basename $$(pwd)) - -# Recipe snippets for reuse - -# 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: project - -.PHONY: help -help: ## Show this help. - @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-backend-docker -start-backend-docker: ## Starts a Docker-based backend - @echo "$(GREEN)==> Start Docker-based Plone Backend$(RESET)" - docker run -it --rm --name=backend -p 8080:8080 -e SITE=Plone -e ADDONS='$(KGS)' $(DOCKER_IMAGE) - -.PHONY: install -install: ## Install the frontend - @echo "Install frontend" - $(MAKE) omelette - $(MAKE) preinstall - yarn install - -.PHONY: preinstall -preinstall: ## Preinstall task, checks if missdev (mrs-developer) is present and runs it - if [ -f $$(pwd)/mrs.developer.json ]; then make develop; fi - -.PHONY: develop -develop: ## Runs missdev in the local project (mrs.developer.json should be present) - if [ -f $$(pwd)/jsconfig.json ]; then npx -p mrs-developer missdev --config=jsconfig.json --output=addons --fetch-https; fi - if [ ! -f $$(pwd)/jsconfig.json ]; then npx -p mrs-developer missdev --output=addons --fetch-https; fi - -.PHONY: omelette -omelette: ## Creates the omelette folder that contains a link to the installed version of Volto (a softlink pointing to node_modules/@plone/volto) - if [ ! -d omelette ]; then ln -sf node_modules/@plone/volto omelette; fi - -.PHONY: patches -patches: - /bin/bash patches/patchit.sh > /dev/null 2>&1 ||true - -.PHONY: start-test-acceptance-server start-test-backend -start-test-acceptance-server start-test-backend : ## Start Test Plone Backend - @echo "$(GREEN)==> Start Test Plone Backend$(RESET)" - docker run -i --rm -p 55001:55001 $(DOCKER_IMAGE_ACCEPTANCE) - ## KGS in case you need a Plone 5.2 series (comment/remove above line): - # docker run -i --rm -e ZSERVER_HOST=0.0.0.0 -e ZSERVER_PORT=55001 -p 55001:55001 -e ADDONS='$(KGS5) $(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_IMAGE5) ./bin/robot-server plone.app.robotframework.testing.VOLTO_ROBOT_TESTING - -.PHONY: start-test-acceptance-frontend -start-test-acceptance-frontend: ## Start the Acceptance Frontend Fixture - RAZZLE_API_PATH=http://127.0.0.1:55001/plone yarn build && yarn start:prod - -.PHONY: test-acceptance -test-acceptance: ## Start Core Cypress Acceptance Tests - $(NODEBIN)/cypress open - -.PHONY: test-acceptance-headless -test-acceptance-headless: ## Start Core Cypress Acceptance Tests in headless mode - $(NODEBIN)/cypress run - -.PHONY: full-test-acceptance -full-test-acceptance: ## Runs Core Full Acceptance Testing in headless mode - $(NODEBIN)/start-test "make start-test-acceptance-server" http-get://127.0.0.1:55001/plone "make start-test-acceptance-frontend" http://127.0.0.1:3000 "make test-acceptance-headless" - -.PHONY: test-acceptance -test-acceptance-addon: ## Start Core Cypress Acceptance Tests for an addon - $(NODEBIN)/cypress open -P $(ADDONPATH) - -.PHONY: test-acceptance-headless -test-acceptance-addon-headless: ## Start Core Cypress Acceptance Tests for an addon in headless mode - $(NODEBIN)/cypress run -P $(ADDONPATH) - -.PHONY: full-test-acceptance-addon -full-test-acceptance-addon: ## Runs Core Full Acceptance Testing for an addon in headless mode - $(NODEBIN)/start-test "make start-test-acceptance-server" http-get://127.0.0.1:55001/plone "make start-test-acceptance-frontend" http://127.0.0.1:3000 "make test-acceptance-addon-headless" diff --git a/apps/plone/README.md b/apps/plone/README.md deleted file mode 100644 index da034e8ad3..0000000000 --- a/apps/plone/README.md +++ /dev/null @@ -1,81 +0,0 @@ -# README.md - -This README guides you for development with Volto and Plone. - - -## Documentation - -[Volto Hands-On](https://training.plone.org/voltohandson/index.html) is a training on how to create your own website. - - -## Quick Start - -Below is a list of useful commands. - -### `make install` - -Installs and checks out the `mrs-developer` directives (`make develop`), creates a shortcut to the Volto source code (`omelette` folder), then triggers the install of the frontend environment. - - -### `yarn start` - -Runs the project in development mode. -You can view your application at `http://localhost:3000`. - -The page will reload if you make edits. - - -### `yarn build` - -Builds the app for production to the `build` folder. - -The build is minified and the filenames include the hashes. -Your app is ready to be deployed! - - -### `yarn start:prod` - -Runs the compiled app in production. - -You can view your application at `http://localhost:3000`. - - -### `yarn test` - -Runs the test watcher (Jest) in an interactive mode. -By default, runs tests related to files changed since the last commit. - - -### `yarn i18n` - -Runs the test i18n runner, which extracts all the translation strings and generates the needed files. - -### mrs-developer - -[mrs-developer](https://github.com/collective/mrs-developer) is a great tool for developing multiple packages at the same time. - -mrs-developer should work with this project by running the configured shortcut script: - -```bash -make develop -``` - -Volto's latest Razzle configuration will honor your `tsconfig.json` or `jsconfig.json` file for any customizations. - -In case you don't want (or can't) install mrs-developer globally, you can install it in this project by running: - -```bash -yarn add -W mrs-developer -``` - - -## Acceptance tests - -To run the project acceptance tests while developing using Cypress as the test runner, there are some `Makefile` commands in place in the repository root. - -Run them in order: - -- `start-test-acceptance-server`: Start the server fixture in Docker (previous build required). -- `start-test-acceptance-frontend`: Start the Core Acceptance Frontend Fixture in development mode. -- `test-acceptance`: Start the Core Cypress Acceptance Tests in development mode. -- `full-test-acceptance`: Start the entire suite (backend + frontend + headless tests) using Cypress Acceptance Tests in headless (CI) mode. diff --git a/apps/plone/babel.config.js b/apps/plone/babel.config.js deleted file mode 100644 index a900a7555e..0000000000 --- a/apps/plone/babel.config.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('@plone/volto/babel'); diff --git a/apps/plone/cypress.config.js b/apps/plone/cypress.config.js deleted file mode 100644 index 08d55e62ba..0000000000 --- a/apps/plone/cypress.config.js +++ /dev/null @@ -1,8 +0,0 @@ -const { defineConfig } = require('cypress'); - -module.exports = defineConfig({ - e2e: { - baseUrl: 'http://localhost:3000', - specPattern: 'cypress/tests/**/*.cy.{js,jsx}', - }, -}); diff --git a/apps/plone/cypress/.gitkeep b/apps/plone/cypress/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/apps/plone/cypress/fixtures/broccoli.jpg b/apps/plone/cypress/fixtures/broccoli.jpg deleted file mode 100644 index 456706d6627d9a911219187bf6dd6bf8eeed22ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102057 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 diff --git a/apps/plone/cypress/fixtures/example.json b/apps/plone/cypress/fixtures/example.json deleted file mode 100644 index 02e4254378..0000000000 --- a/apps/plone/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "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/apps/plone/cypress/fixtures/file.pdf b/apps/plone/cypress/fixtures/file.pdf deleted file mode 100644 index ef9c79819496798012ceabadd92415c3b1923c26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74429 zcma&Nb9iL$w(lFOV|1KU>{N`7osMnWwrzK8cWm3XosMn$_HV7d@7nh{_nhbaQ#EJ3 zLp7^rJ>U9_@si02i_$UDv%rzwgwh(+}uD>b1Nrf2LMpiO5e#?*x1n4 z$QTYNWo%>WWCmd6WMG8@D!JPk1Arpd2F6B4#zuebjp2BC;T)YDjPHVqTtWzF_Cf9S=Hlj zZiaACO1IzVufF!$eLwf^2(!D!m-jYpeeT+)Wv{w6|~e%ucu<@mf`+T8 z&z;bt*y)^YZ;#hE-7Vjb`Sz=^l4Xt9DT+0F?Se+9m%F>|>@ME!kMq4y+3v$tU*G5F zo8@qIhwev`r<;(}C(~+?7xihM+Ej0yw}~PxiL~X{l1cXLP2m^gX`jwix<zvi9a4^01_5G^>og~t2%KK_vMS*q6s z9&*g_Mcu#EFXz8km;w!^2)>}^D%0nV7jp`tHcrQECDNDeFX$$nMhkRREi;crX1I@> zC*1cXdEsJX+UUuWEVD?!BS^G|<#9nb&zu{W$Sti@)=E+cKVLZ?OTzJfEm5W{EH^eP z4;3xBOBcM1f}bFMek$O4;&I+prdJ`Ta$b7gJ59E}S{+)BHj-`;F1L9|K!E6ua6U*L zoK-%8qPpx?w%T}3I9Nw|1C7b<7v|cOd@5IQbdQvZ4jqDWl9wz6#$2rNk-9EspXWwM z-iqw;4Hw-7bVqnZcY!Y+Y465DO9K6%_ayu#uwtm=XsPag^l<#Ja_|2zCXPT?;c)EZ@zSZ=Qb$|4xf||VZQh? zz#$R-q!{BZ)THoMgy2)z#Kx)6HAONNz)tu~)s3ox2<&U!+|#?5xk9`+s$Mv)iuJ_XsZ=~UtD_F1-B(}cm)t#GYZ-~&Jmsm3|F8`E6h?@UM)NPd8$yZU<^Bz z$kr$)Aj>}igt@F6baH-sYj(&oJgFVW;sNou=&7EYp?cJ$a;KKrHvRD$C=(8p$zA^K zU+0#iG=DqL6iplc-QhUR7U*(UK3w2yHwE#imm;viRsdIxRqABr7lTNuv15qf`P=$} zpc$49Xzl4sh?iNuhy(9JB(}Xggl@kUBJgC2(7qhNw@9SQ)W$faEC;FB_L#kft2@Cz zM-EM4f@IKus_W*cjT^JLRfU07?vI1EcdcWY-(w&9q0yTw+%T*O{pr6U(#^}^Ik+CC zSR0+%!zWD14Y&Sy>-W271#q*cu7*6RT9J}MDHoC*@HAx80#b)TDn?l;YldTO&JVy;@@o&lfR?dno9}_01hMiXk zRVJ@MYIkj)f1Kw`RvaWj$q@VtaKti&*pw&!NcqiE)lrDNJ%8td_B5k}EP$yiuqMF; z`4{qmWE$33D(pB?Wd)MaER09ZD&z$5qp28TV0WmaQ+?T*pmrqCv0xSPK}Ib`ZLkjU9RrBA6ehqL-VH`ucg+7kVO963JhACLx^ zvnnl{TkRL}di1$cJWqW0O<H(hu=hyt=%CTyq8$32QiV4r$hUsCV8YE!pAeX(&VF^TSr1qE- zyoTLP+K82**B65^%DBivjDlejS%^P85NmZib8 z1DuwOTN}-mA?{PU%mj78N7W>2|vhFvk=+#}~ zpkR&K!fv6!46DCOb6?#m-&M=F16}?pHUzqH=0}i-Ci|veWfcySecK^)mFZ86-1)*X=5LMNGqOPoDU3=a`1?9Ml6}ayx72TbfrSW+C0q zvXY*Nfj^$zAn&rde1z%^$da_n9Jqe;{!QIM3Y;#q?en;CRfP{4l2}0}Plf*>2tgg4 zdThMUQ>|VE@c_hf{UEoN6tAe#sFt49?vHl+H5QURd4coy#MC`fl_B;F0k1H;S>2HN zBl|l>hb_$?jSA^Eljew8uWi^&tPcVQKNM{&QoO>j#N1?4vaL9AWzXYBZI14}A`5BX zdcht4fUXia)EN<97fFS;9!SK6MtmA!?ayZS_0ws*jv}8WxNqHNTKZkAy|bLJ7|Xfg zZY7Kze(P;WSj_W*Q0*0DsvHnKKw18^*qA=-`0Cc1K~GQTZuEoT_WLVfd=dYf0Jxu- zDBiuzhD{6mB&xDyjp+9TE-zmg z7&EPqhxqL`3odco?Om=@&qbX@yhRI}8|>TglxL40!Da-Nh_DGsmZwoZkT}ZTG-xL4 z$+ZsqKWK|ql?Rruc+gwem9?65@J*bu2iDGSJ4_&X4$IaF1_=W3bI2tHXgXvY*y?#$ z;JSz6FuNObp%!WYF$_)P{;EC2r8JehZ9X_xj^EErZuw*HAj`*uWx%uOj4p2ydNmxp zof0y8N#zz;0~$3HDau{kn6jm87_LII-CNi=5k2WI&VAwY9(Hk(Jn!|p9;`<^?Np}h zPM$BthllVh!0H+f1K2M7@Ky8}x(Tk>xngS;N(A*L_a&GxjyX>aee}Q4EM(Q4)$>bj^J=U)?miNV|&m>y@?s}$lSKEhfQQqe=U#tLf4 zk~kBj)d_C#QYqd4nCcQyQI>%Zm}n2p>P&pXGrkxi#OMBYn2*;xY=9t4Vzzvk1Ri9BFn* zn7NZ;;BkuJ`<>Xd^_xP6>^xv8qAB_kl|a+|t7feqM{UJBTyI*8hn1Z^I1~w#qKh-% z6$*Thb|eZR4wd?n;5yu#1;K0CfzR5(>ns{X!D6{Xe2Vwk?i;=`zuvheRh`MU#lw0% zqH9Sxn`iGIXvoZ?z&j8Gv2#$S;(D<*%8};GNjNWj^LA%$dN^vAiVk6wvZdpyrsH{( zv`2MY%h(SixL=`90@))sk4l;W+qKCTsJlCxvwi2dN5f*_DdyA3rkS0S$Cf!SCEddB zQBy=iASC=0TyUDPlcpzOy!5&OPtl=I7q_?5tVT2{bOT5mtMo(Ki0z%u*x2xc_EQ8&M{ut^+Lu-UFc~f0Yoe!HsX7WcPfs%bWSl>Ff|xaqAG_ z`k@Hn($W9BHohfI0Eq7O8OZ12vcj`kz|n;#`WgO5soVGXm9)Y52gtd`3II<9>z&H> zY3s)-YR-~Jn&!!qv;0xf?qU21fSt5BRhg6x!aI7`^YksRm$z%473Hk(8d=t#5to9bMyW74=+; zt}DiC5(Wq~DTaG3zY#LQ5#DTvQGBTB)w{!fqj$fyz1*pdy7`0tx;;HS%V!C{2NV7K zhp+{SOUUKvHyT1uN2XO=(0X$t&trTt(E3Uf8l8q~%)?44d1|^_fn`~uc?JfDX_*k@2@NH0ju`g_B?eQQkbAi_0 z_iBo-?Y+6k+LtSogi%Z#Ng3a1SW(>{Ziru5I@{f6FG3 z-Nxo>^Ck6DegyotcEy?_n@#VRwD0Jt>yKtZg;TtjW+rR2GWYfSRZkakAU**!!2ijA+lky0R{>z3|<%&hlSGDd3%jO;a0SgpObS$|uz zMv60)@>E%WTeLx+n(A7V5uc@(AoV?um)6+wo_MjYzuX;o=H`^>wj54t?y~n6o`_eT zc$*bS$0g)4)*6QYjNDulTd@xdW|wJxnV^X&k9|1KNAPsOG6~_6@1JBgRjf{Q)OD!6 zN?VM;`>dK5%y!)RhAs9@$90C!1WCtnFF$PsIwR~rpFCL9%9%||hkB8OzCk)0Y#4t_h^=s-Y1tHdxb?b*i}79!@kf3n{Ip*ZBJCBr_gOWe$}f{Q zu4TVcz1af-rp!d``pDkWYfw{-0;^~HrMH?t%&{gYljbq^V|cPIk*DnaFY`)-@=wZK zGOpfEwjx-LMoFl5W0@0stDdmXsi@dIT&lW0d17M4HqJ^=2pyqwQ?y*2!+I0Z`nH)Y zqow=TD506BVH52hYqfH0W|EN;m%=X_hHB$OR;>`jB5a1EQUedH!Y13{bX-qfTbF5I_YyJQwhFglSO z&xo?Su(JA9J8vBOP39| zK=DqL3?Fa9&)PmkQnR)OOWYS;-`aNOo_6qEQcWD9i%Ln1k5+X6FYa``aY)qNaWn_R zeU?!Bxx7@29QrUABfpQidxC7Qd;I1lkxnL9#37Jwy31f?YUW|L+X!!PO-%Uhgk<$m z6FRZ()4={ME`6k)9qMLuthm@=AXhxGawQ(qY4y!(@uaAe(N-8a!U1X38T(PDvsoz% zI-5F4Y*X1|d#|xgcU73_h^z`dT23j+*0rmmXy=d1zVXszX|ij*-piDS%0zBwTCSM? zTbC(DMr>!5bCW4>G#ud^uKm)|j4@v(Tb&AAa)PDgs);v`*y035+p45yTNrcG;5rk> zlQE2yWj)%7YuzZyaIb05tjr}ZzdS8kK^;B>=V+s>(ZNAkE!|WU@o{W@6UA0kv9NQ3 z3t&#N?>C6Im+8tca(F;N4cR%~ukKTJsmfMc8uMKmVRTs<2xPNQhfW>r1UKy?LKp$V zZBCh7E87kGD0V6IkTIO^&+L1_eHgJ~e1aT3-@{y`5_#iv3|e1Ir4A6537H5HTQ?0f za*RBxFOaoy`8>SHC1B_2c;feW*aGyDGTz+t4&DI7o`yylr@7GmGpF2PetF1nQ&rqk zFAc%J{l<2Md+JKhIz(5ruyw`?WqeAXU6gcr73Dm-5gV6Tv%R{wE65b);flG){HS8&Qu zV=8s4R~WDg5?}@|xtt=2&AB|WwM5T!B$*@bSYkbBWk5^|lu21~l`*t7S%eNWB4avE zWu_;x;4tq3Bs%A)q$GC)`8EYn$VzeINfHmVFWnq!0=Os_!*j~4&X4)pNkZd5j8xvk z+cN!35d*XW3}|f$}1hFTlM<6 zn0TBx662=A)1$8H$=i^dI?@@H28tR_yYc6p`N7iW*fnZ+Zqi9Gq;UCsj{N_DC~-e94Ngu|a4?{l3%93DJc+XZlNeuFE$nYH8D_1eYk zHt=4~uVOa3=IyR?qNS87xIEf{v~2p!QxA7An1s1BR9vw3I+6OO`_1sy<_>lSwW~kk z;_|VsS}w&UIH~V?iRV%2+En!F;CLB}dK+&ag{?d6=lg6CxYl_<^#gzpD* z_@$u_>k=%9nQ#U>4%G7@Rp}Q#O%L z9)28;laJ!BK9Nu`wGS%!ynflKrUs{H))Hp|=LcHqQ*Z{EomsmpJC*f4RcA0ZuoZEO zudTo!-l@6?*H-JgO)i6_*gDtgpM!Iq?grU6XPnToG)G!pLqW#~-W-9$tk1=0-nedz zDYoNpw@VJma%Y));Hy0M+@;V@xbMdWtBOc3gL=s!#U<<0yb@Bb63XJKaI_;2_BEvj$ST(==@M)6)& zy#~jra|P#H@gw}++RIPNv0|lD;r+)+kz~jl+m+pP2j=rhX|a^Lt_T5a1qFFHJr^zRp=HvEk(tCA|?2&KK(c{OU;t!vP zJ-#h3FAudtp2?4!P{vF5V!}Hws^^F6yQN`9gl!-9w}LLIo_6Z!SKiWnLqY?Cm{s=&=}G3P)z0}@z7tV^lmeRkIwP5-#vPndq8f9GlULd zM{(=c`k6xAIG=s=(3@baBeb*P-a;FkcRS?Dta1O4VV@(|Tm8gWTg|M2bylJcdHCHi zFUO4aL5Ni>{mu#3r@i-bjAO_S+c0NIJm;%rh%S+5raV~XNi1d%8HmoL&_bsxX9?hPp1-^gi3$;!0T^V$-XpbB>;o`Wh?^-|ee!ng7fRarB z--l)TAV?+x?ywBG0}Al_dpr884xfYw`o04>C*9&Y1Y9nuvYR=!KeIc(RD4r)|`VXOG=A@9-4OwPaEf8kI^H3`nT5#C?qelDDc&A|u?1#}kW2N0CE$3*H-ng97&jgt^kF4Ez zQS}pqHN3v)$?jsF`X?$~%8p|Sf3lx}r>M>#>bE${QW+lNnJTHQbF@cHqKE~o*-T;q z2$%+(cW3Rzs4qD@{jkX%5jB&)#PNo1qE^1k)mEGj^dySKl;N~C#lxOZdtRm_?Fi|$ z{6ZmA8B3dx%&LnT=&E5QMD4o<*YBO`ICaoLSwOd38aBS7MV$n}gaUT{wVK;jfJe4m#s6!&9|h_MaAZPmwmHkxStRff zycdgPdVrVS9>BgidI}C11du#y5XY)TzV4cr{?QZlvnQ~#Qq)QzB&zOFM6VPUIX%lK zSDI8r2{{^s4~Q?M;M0pF{wsV-eZ1>Cd3e<`gl3YaHyzTt)wpdS1NmQ<8+OrDyLE8QAgy3Hh~;`Dv?9NOj)rRN;xZO zaM}SKrwWfy?S#0nWrt`yy(rW+@QiBtV*2Gij7$RYcc+NDGLIk)-oZP=fi0)0hCg&; z^oc#}XvB`!ua3;*I$Vx?_)s7#kISiLcXOJvjJU_XkQ zx$)$uqG!yVL9RQOV6k8$P}*a_qQoVFugQE3vQ5Mo%q>M#&UEKVC?Mo5H3r;>w_vUa zPx?vP`QRKB!;|x;h93ucSKe>I@T!T+LMmJO7D?7+#Q8A#*}+Yd#@rUT$La*?ZV#d6 z-4_db1)aCI#t^pM`#A@hG)-?A?)8QcdEJJ>Jh`5LX_aF&2Fggd$^O2zBA&!QL%tD= z6>FHFQmu%i2BGCo2p|n6j=6Z{YfaaKOjOir{S52;u^NO5DluFfg&0OVN>fUdMmFK3 z&IZ?37*Sq|Bwt(OUU8}9ZHl9kSZ}N4{ai6&{X8tEz44~5ZHGQ}j$j{Ekp#|?fhg~6 zCiz{w;@c=*YW`g!UB+B+K=Wfwr00D%375<{3G=Wm`p9cuU-R7@@ ze_DhFNzH9wD)Zwj3Nyab1u=y%g*wAs_m>@S)|dz3G?2AoLr!5M(28%N7$`I?AoC~S z8N{Rg>WD3kqYkLjrVA%smPQv8QQssE@d<*i)iYo}2)M6Id@}-gL%YGi&G(re_S9KxsM{omhhx zl%t;>(CN$%xLGOV7(3Rf7sR9Nz`7Oo;xY;;ERKFy9|vn9r(iZ#m8WDtUPL|U2FS5O zR$t03w%zl`1FBH$g3c<*cEO5DK~sA(9kd@Cy=*oC#vuwBb`K(vSSVYw`?(BxsS3I+ z^9HLeIyJ)W-}*QZI{8&q9<(L7UKK&{XZ?1EzsNN1{-{VoE50?li<-kPR4J9zr>2TX z;A!`*8T{%&Z9M6?u#Psp6RLo@zwxk?)F-jxcMQETVP9ZbedoU!;Iz=YlysaVdR7sE zns9IgmvXR;;GzbD1)~mbx)@S4@v-VDY;jO^b|>R6`C(9 zVHX252!9RgGg(H0T%0S;lQ45MXmn3&kh6rZy-Gu_g%&@pfQ1+sh=43wp~CPR)5U5D zYmTn6D#PQzhe&D(l_A>R7DZ4}X5)KAV_v-kvwWYjkg`njskccA9PV7p%=P0ABlZZP zRRK*65-#`+31Kc%H7r`J@!>bA0xeu}DO8#tqgYY~ILFu2EW2qH=R0GuOkJ<=MkI)D!~yky3?}&`NCs-lKf`7!T0)?^ zXE`?JdCivw8-eeYA^y75jgEn%q~w_WzMPM9W4U5NlG~>b#qYZ#UWib#dlZPd<|4mI zuQ!qbH=&D^SY?1-8Y}nP>qw+&ihmNb8ZPh7q5F%woX|=IHrUcp zt;qZ-+@m!2Ng-N(rogsPL5Z$RW4`8kH4P6ZJxiGoKG3BK&}y}dA*xtft)adcBp6JU z#TEZrrYPK`892i}@6IJo*{@X60_Ig{3N{t&V?ZQT#oY96|2vr0nF1kn5 zub@17sg*?i=E$V-us4Z_D<_>dH{&3sLd`?KPVTkgWH|^XhQ3e`Ai*`gmIEi~fgS{N zBcyoa6B?m`B6j9R3c?=UlbMh>me|#sw=blBrma02@mgG?8<|zbJTWs@ZBD~`5^edW z1&(%sda=-h1dRBU_uPV4BO`PhIbavH!?0$}_KzNSPJ-@Y1v525`v7J4G!?+Tby4V; zs-;^(=O=}74|nl$Aw|P^_Ae&4+@G}2<3ae&g51J$%s_=R84qbHo)VP zuC?wOrj4dEvb1%Sd3ERax;9KA!cMpAU*(r>-{r@# zc_ufrSjnhcd7PFqOUI;R0(f#7Qp@4$ACiVtE7enH5C-czL??-vk-)@tyUOQbZ4U(mOef+D}`bla7&Ww>wa zq~rLsAf87oMRvCKqBmw^+$}&_^oJRbM{fBn*JUn~CnU<$j`6-my@)K)0dM0ms=JQyq zP!eyE9jgew1BA;1_fOn>Q`{Dw)pgX?f@R8XqiAxoavH~Fy$H4254Xbx?L5WyCDvG&eQq9A35Z9xLOw>_zO~CkQqrI*+g2Vmvsng z%amD(BsnRATi!Sa)f!>J;rr=J=jvKDbPIFbr~Pt$X|aw~`ex(KlAQlCQZ6>4Y%g<^ z87A45C#0dELN&I1V34Uv^Wvf3Ph{_8s6lV`K#-Xx*!(5#Q_>Rw60B(#8$Gc3#R#^= znUAup*@VW0KalzIRDrqtZM@ZrxW^$zw)60!0(B~|eYKmyzvKMqWAZk!pY1lsVttfa zQ;As{Sg7Z4U2xDe2ps&_tqU=K;~$^Cq^g0^L#uUyW~?Vs@C+kwG`|r|PZQaD;cHpE zbrM(xU1R5#`HCroz(M?EX4_{H+Arq)!bIw`$-O#?;9MM9r+&uJ+kqYhLb!NE zWh!0ykNerm(R4JzEa^$*N($*Z{QjhaC{J$hx3aUEc=DfhlGKpRa$D|61&DDOK=?uJsX{ChC0Lp^X<0-oQF@#Y(Yn;2jO?^iWJwrbX)GND3U1k1?M$TIiF=< zMgdt8!jcK2p+eg4HUUR}x3yP13DRc@8(V3*>j9Pre!WsNF z9%;qy#~5fs+SJS(2Aa*V2nEhnI$-G>?i+bkN$hzTO>>`%)Vf)1Z2p92~! z)8=nfx;~w)IaI39bw`u2zC{c~Mn#Jq9|`k3s3KYfqo1~2pQqB#4He*DAEC{*-EhBk zVL2)KziRw16vX}?Ls45Br+=X&7G?m)zs!K5EKC5-|MmdNIoKL1 z8an|rfqy4I0YD{VH>dxZlab*+vE=j}jQ>Vs{5O;WN*f!Q>kHbt0W|-yVdZ3{XJTgq zaIi4ab8u?I0TqlLZJiwq|6YTC%29v=3jHnRufHRJ@n7%kzaf;IzUjZ_ME|Sye=YuB zjGQvDFthy6@zOPKb@kZ2zb&sE-Pu^1p30FQUfksM?LAOjk+8+4x&hvL<5uk8_%=VC z;(T+e5fv0P>wEOHDyS34>SC%_zT7_Vn{^}3^;OA--=DAFU+pLphiIT-j_INQr{sh4$x`mKn zGOVpFMcKppq7z5em~2C*X(ZTWUA7K7nB~=3P>c@VdXe&LYL4WrP~~3;4$scZc{Fz# zv}r1~21Rr>BCV(OUrqv1QN9)$n>5r~O=*Cgt*!O`b5!fkUB=Yg@Q<_=Uv0f)f}b~P z$+)h}2)3|AvyDkyZ!YLB$8R)*aAq&hito>qON~B*;X2Rvj2v9^#}V4GzD`i<7@AzE z6sn)kiG;2ksg2zDG3Q^{6MVM&81VGWg*s6?hy!a|)?#EWTWy^XAP?y@vZ zQ+V*7ZFUSe<$(u-Hh1mSmLwaN*3|2`@kSZbo!CLQ1@8u$e8(Nrjo3<7RRz|{#w3u&Q>q#SI}V*;*GZp)r8?^fhPF*iVbpd|p7`wo zqPAa_$fQks--ac+pY!U74Sa`e4e2YZ+#CyPX;iX#ynjX@U7eZIHH5Uier@vI%5IxDn*X8ED9jY?SgGIphS%Mc0P-gD4-tgXna=`-5V z`!8o{Q*@-PHJJWBPh#Q!!Kfr28o+T$P3!u7O0R0Fi6(U9j2QWOWj?y}?*%VTx)OBY zDSQk53~xJ?+A0p=s;s*4GeDNW!~PZCkG{M8iV=ee^MYEtcePO>8v|8k-;}NX>pm6*&|erGi6QYQY2O8$!M)ZQ}bnhCuy&F$aiB z>Vr&`^q9^OU#)gh&3#D0tsR$Eaf7rR?snD{M9fi1#$CV^Jbc_KH}TI74i^J0t}=BQ z)z7N+-Y?5_$?GlLC5h5PT5sq0*Anh6$b zBneXiKGpfmKTtrl^6vq?!Bk*5VY_`qM(}w_QRH2f0>4tAM*+{BXl(pVEHYd`jsMeeRc3*RwF z+=7G^BUxm?VE_#;<}_f(ZLk7$0kbad3A^5dBIU9+t%rLkRbyR+s*g)}kk$ANFEj!* z4r#XILUUP#R~%#9ggH@^M0E7rhcvv@63muxbwB1_b2@j#t7QovgcPA*HvQw0wKF@p z6%)4K14AmQ6mVar6%9h1QUn%7WjcH8x}d3kyZ8vEt8}aR)S%FBQc{*Gr_7jFW&o*- z;aXDm>{k{6tBk??C$Kl4kH+Lfy%u&7@LtbB7sJTn71=K8)^tmA1Gok0=`qQb>0p*S zj$HnUFj&QIinb9b%T*QfjkVX+g|HU85Nae}k&<>R?Qs14^9fdKMt~J%1t4hUN0#?q z8_~97FK^LAjKN;o5v9?pV>Xol342|sA23pjSfyLdO*Li=0b3TFGT=k8Smj3v+6x%i zB2=kErhH>T$0T1xMgG`B;fVXP4I=rhm&KgMz-p_%#ncf-qqmpnCji-v9o|HA_W}%P zh9(Jx6!pJ;%d}~X^&Pug$;=)49iZBqQG}!qVbzS$$r0*wkQX@O7bhNkDekIgBn)BG z-$`sGQh@lUCjF4vsVjEc6=<3`jJ0xPNf9S`UDk(g|8~LyrNo0sMBKL=+^pB;O z#Qs=y;+3Ue$XHb~mZmrLwb!bU8#OXk^59VL@k+~e&`Qe)I0Sf=*Qqj`N2t8PY$5s` zc~L4W)zi}Ck7QcOM#E9L$``6{c;3;GGkEBO)fT}P;c*K-=r3i(OPf%tPro1k;FIy7u5Xw z^4dOwsnrg55{QJ8$&q^aQTqqW;c{h^&AF5+-@N%z*C#q0)jRWait8)ycz1-%DNucLKUHeTrjXD?tt@S&FvCVEbPT5v;ZFD?wwj2*93BqZd-vz z(H&ceXv44xP7Q4_UWE?K{+Fclea6TBUDQJ(Mrxsi-hC#?KM1dwR4}|B@9!sHH3qSw z|Erp2{GTn!zvAy7MGOF{D5whwOVY@gTN^k#D(c%v(FxjG8NmS+os6wj0E{e*f0d${ zzQaG7loDubV+@o68UxLN)<9dJ9nb;j2z36dy#JB4|7L(zz$$!U|Lab0S`hE)q1(|BDFaoqFl$0Mp8W%*~2`7$L zhzWWk9Y-$?eIhLkQAh$d=lLMowfXVr<@&X@*?rl{NpbYPmFAw~Zj$XD`j*_4SAz;+ zj-V_=%+R+>Y~Tvo#vo>i*+2x7M^_OQBm|;Xz(U2|39HRJPV5J# zAPN@kK)3fSG90Adc`gVp79O13?7VMTX*uE_#brpag*+HaI0)$DcC~(eJwG;hc#+(^ zcMx1sIFPSB5D*d+n~|IygKkh>+h7ecU!gjSKER1`!21D(+6$gMROQycs-BQ~;+w$V$a)nT7B5z=}UZ zw_}068as%2U~~|mm%dxF?N(pEMh6}ygddzi&UNBSYe^0SBE%&ikh`X}R!@d<1p@(- z1z!J+0-Oj0&f=S(z#lmloNs}HpPN~HXAtj-4*&{^mf=O~edPr{jvfXx$_>#VB`vTF zw5Z<0reGp*5nrST@;)e7WX!jIM0@+!_GyfWHVfqKtF)cr1Q3BZm=@ngmp7^hCs9&lOpVcF8IpJ@r(Vr(MU%#(js%I?d?ONzZP`E&RX|X_D`g1|o z{IZ^zCAOQ9hRW4UY-ozc9kcp@OUfQTx8r1gD0r5Q<`HARHnFANMoparq&@ z#9YiK;fMM0%iCdrMJ(QyMT6+uo1b()6Rh|4Ack#Achh+u1P}v!jboCIBAQFGo6--3 zoO`=%=F2I)D^62~31rj^e9MKPVPA%K*hA`==J5Ye(bAK^A}6E&>g8o){OMPbSnqS?O0MH{oa>dCw;D?NSZuZfC-Hh0ishyi% z24c<#%c#y+N<*^(8Qgd3)d*e_{rvV~ai1sWN|}0p#(_$UX_S+g{#Qb{Z7x<@tSu48 zY-5}!>b`JLtXIRYo@b!{pwP5({$x`tw79-B?i@a1{T)e0=YMed-Gjr{5zL7>axmjp zH|yIFdo~ny?*WK>q*uhg^B&A}CF6xU*spa1(eb+vs94(Dsp?upHu3zh=9uRX4(<96 zvsT0`O7EWVtNat3(lWb}@$HJryMYgmANv=_FDr|y9YQN@1GK3q(tUJC68yb)ebbzQ z>a!4P=h)_16a>rik7Z z8xKD^i?U@8hrqXFnSj}3L+hlDKWk_&*5QSzUWFUYEv#SZygZBJG5eh4x;J$T$=c-T zlNy$|{=|{5E7!EA+E?b`v5?MPK8fx-wXl)j=sS1!X(p&SYZO2T99tO)-!w8&b(|Dq;DffYhf(JCLO)1YnF9hstc12-E^Tq1El z?_2&w9A>KO{G`JlQoRAuawX4=@+w3f|J-15Zm4pVB&7$uUoU9^g6rc#dgAdp@-;uc zJ&l<>2RJwdp-cQ~=su(w4rFtD7MHS99sD&E!@511Tgy z%@05{Yr|3HoJ?L@4ZY-cLx!Or<;=CQ)CIhsJkK9+$(e{sM1T#pf)8pMwD^w999EFE zCu=E*OJKM^l*ev!YUMCL{M!U=hu%ws#u1W~n$O35rC@4F5eu@I|15Dsxc1l25(y{Y z(F#_#Tr8KMyWMD0G4$H!!_KboiSrfvmpcZguKs8EPgKq*wS-XME31VZKV`NhIK)PILs?lNTJ*THdY>)?#Ak&5ZsC2V_o_q7rX;E#1C{1 zB9&%_`|`k;rI~DPJKNQtP%4Zb+bwima)nmAk_u#$%VdH(+hT;{RUFH9L)8$-h~I^) zULz^haLd83b=;7xzr)f6l=o-;+@YZ;CI2LgbM#_v{8pPY);~i!-QYvj0+M3C?ewkM z<*Y*2;euv6z?%M)y@E^uiInYn6YNHadelyJtRGXc-SWgiGp%s7Dn9hdSLxn|h+>rj zzYzA7pp1LLW{}&1GjD#X(xs*~see_jN&NY7a+OZ)4{aD9*}mUsa$^A4oibmE5#vz% z_TF3jBSj8IDwrlbiEC^tBtGhX04@jB6f{0PdO(LGBG%c8y8O)B{rtMe1ePHZ3-dv)8_m7xJ}#Hyr(xQvY)?s9M`DP@Je5{ez{T|?%Y6JW1Kuz zY?yqPwRh_l*Mf|j4BpL>m`Jhab#w;8Ld<>hi4a$pMd2}fusf@@8jKD$yALRdvDI%60R~0Hm)@)6Uk3) zQH@Y1Otj^;8YEFKFi;%(h~|VRxa)A??A4jQrcr@^_7e;ruKC!bMel`8jvv3RfwNn7 zBzfYcUz7+gY#YtVcgRX0Zy-bYXch^b_jGA&M6urUgoRzg#=k_Lp5Y{u` zYdmQUjfUhis-tkpE9WH4;S$bacSAz&j#v9v7Ns4$)OsP_L-IC^T1#rNEgPxuJRO;@ zCFn2GHGMbR=q+p`yOue&Nhln?b;S9QV!tNX_NgOg)vW70#9vyUvLNoOJew%rFN|Tq z-Cj(GM=1lFO`!(`cgVTCV6&T2QV$xJ6hw@8JukU`_=DUNflz9?LNEgHN3pNk%TJ^xJ`eX$SgR$ zsQ!(u6rrSJFY#%nQuq?TFb~Bx@rf`%Kit^85YB3-LYAs)xX6xt#)%<}mgOZH=gi%K| zD%|J<)&-vtHvuYlaMJ)KM2_jk$>Q`E~e?w<*hir?u^+YjJynMr3>jxy(Pi%*i&Ivxt}3^Yc>g z_mfOiUw}>o5)+CVLCG2pfJ9;5E(Uswr$^pO%qM5D?cCpF;bJ1VI~}LWx#5$^d)QerKPcQu*xZL_DW`j3*c>uiV&g((lKlCa$zEr=LX_wv zr3rO~;)Y{%A*P;DCx>M`4I%VYv``ILpeLYly3}(=r56u*GGgYb(8Se69OF;=yW#Z^ z{zC&6W7+DF`xqYn6pPVBd9!D+>T3DCW2ITkvkpxNU>jXf0Csety3XB|on)>cyF-wF zoA(@u8k!U+UuY*U&w&Cxdf5C(x?l81zg~H`=9lPRc8HktpLRfbhL;Xc7G3;Rmv6BL z&o7T{VtbNo%;`_!fc?sJ5B9AfkuRPn4CCc1R*ai>x#?b5IQ@0lhkGuW8jG}=BQuXO;a~2XuawJ?w;F%+ zkw4}vkMv16LC&nTeP*1&kz4T~m87o@eHQu(huBMk%p4UNdGzBRl>#;pz;tA&*Uh5H zEt464pO(V*zD14mG#4$HvQUerjh^;W2**$46^fH(kYl(4z6zxmsWJW5rB^309foF{ z#k;{y<;UkannZxZCJd@k&K}T@8%O@j-5Rn^#WpG_Zil4hl#$P~cOvp551fmIgCFWs z{|{sL6rNest_wP5#kP$vwo|d~q+;8)ZQHhOJE_>VSwZJtYwzy8yRYu6&*s4#bDWKX z_kPARh8He0KBC2d3bk@lDS?=Fu_iQkG9 zYl*SSsbSXYE7h$2w68AnW_Ips;@s7>*MA zLl=ZGE^b4jUd<`(nY8^XEc9l3zM-0xjF_s_DR34uDZ9QWX^V1Fc?Bb9Z?{)7)3muf zV`spA$y~$XR2HBTFV}JcJ(wjTxE#S2eZO*pIR>sQ+;)HzeU3IF? z$3s6jr9USzoPRE1WUIxy{Y`piWntmI|97nFwQG3}ol4WAo8df3{mUVPXIo7$($2vp zq&I@6tMgI#8-&pw_!yQogDKM@a}9C`ca0eB!h||3V``WPf2kp!Wh$czn*xv6O{1Ug zc9YSnNRsq+O%T(Ok^WCphYpy2`+O6Bqeo}fG-Fry^bt3IU1O8?4$1zuPfej1(q=*V z#K*P73o_nkUV=Q@G9-`X9k_qfp70n3A}QJ4ndE04Z-_j>MB=Q9z4D@7N}zz7 zzBf1HwMv4NDzLhdNBC6I`jKLergafX$?HCoLpzVx)oPo+V|7?m zk?v8rT<}y&N+`F;7njWvt6k<+x<%Ukyh5!mf&z-EF}#rQa)ZJ;oHb*Zrq~|&W}pZRp&gf!|vv> z+E-*mOmeR)@-xZ=lR>jcpzT1B0{>=bI6_aRA4>xDH|9(c?B`i)DcEQ3B0moZ3EFxR z!?Wj0PH(3%H&W5G(8U_ui-WQneud>Y^q?m|m*V4W{*67ADKr@j7NR9Sv&&tJy#whA zylQ%f`Z;`Wk0~IxkZ4~1zQ}Es1};`Vm$;?Odk=sZSl%;Ut2*9&*)J6Z;9(H-{AJcX zAohSVlYEkD(c7+l-qf$%`*TRx` z7yMl;mY9)3QxHoPN5w1wou>&nv1t4I6)0%r)o8Il|8y>g1?3^xNpBEuCd{F7tjz=H zna9!d)&uS`M(u|pO`Ln()E05D+RIgl5!-HlnXokk}z}X(rE3W5Pm*4BDk7%gh*0({+Ln{PGFGV_9y@m+7rDSA7*Jrs8QoifLd7CfH%oP# z<}m^yMQfis>!;*>$+Q4Ok%3N`G-p|>@JAQn{H_KZ`gjC8piF_=n6aR^`1U;&&0~?V zsd@13+|(MDzDI^DAy#9Acj<=7u|{cEMy0{xAFX)tG0LJcmJ&-eX&+Gh@$lHoiuoun zo}7}xuvJ1OOu*{UBkj=4Ax_)RR;g9&<7w+6T@-XdqGxVUc>I}Znvn-J%Rb&I#002! z9>j*Ido)7y#@)WuK zS;AK>9T5#T?JsVkNSGo_6`oL{y`r2X6(ONS7b{sp5Z~nTyyD2mDq>I>l|aHNxa1t- zg_G!5h4$*yPq*7i-06&Ka8&8~L(`_$xfL-d)UP0Sh~JN*)XCL8lBxp`hBmm#OhZ2P zsNPp-?o3V%Qg?q*wR+WZAk;NtBqgso40IoZr_%O;02Sw)eOk0G3u$Qo-3FSY)7km( zN9y!0anejxzaG;4LyF8*T$N6t;E z{IUH|2I4DTG?lWIJ4+0FP`Zx6{mdNF<*9pnh5sD)?{)NB^hg>~$pnqEIY#za1-6+Q zuUo7X!&o zc5(ZhJear&?=YnT;$GPdS_-2iK1>_$f@h&b&+i4s)W5B0&W5(XSU1-y+&tMEk3IaZ zcPSV1J)rO#&W57jDAaann=JO5KVXponvAWJEY1iv8|n0mo+e{%nE&{jkues zZmzIG>9nK zbn*V{Vl+qo(6G{%T~k+2{>_F0%$@ry*FvxU`&R7z8|a$?sLzfPDp-&!Kpwv68}ty% z+VubF68{Om{Ewl%kiMhwe??^eUs*z0-_hwm9`O@<`C$VkX9K7IYB~E)*V&I${AcZd zV8OxM&dK)Yo&Qb?0o2TmoXmcLF8>|O0f^ZAw56HbnEs6S|642myD9BIi+?_0?(jc$ zVB!2r)X=f|3CSJ<3~OIFFi4|wYJs= zn7P}T8QTEtj2+BvjQ}3T4z~ZrDo(Dp04FmCV`G5HPfiD5V(wxLurdGf7DHPrTN{8N zKp5~FAOa8thyf&i3`PbZ3y=pW0F(eK09Am2gTA4qv6GdtiPQglcK8pq0Q3O{07HP$ z580RiOaW#;aAN_m`oSBU|Kc0_{{kE*fHS}a;0kd6-yr9Iq?7(9{(&4O#vjOG{@);njpJwZ^?zQTWBkwV|34syk%N=zr|Is$ zx#s^SIgA_(3_q0gzfcax|3*1gu8vM7dW|Ml8}5dgcpEOG9)=q&*-o4F)*F|r*J*f; z@Bh3VPi8upeWy41XEaUKmVM64J)Ucv;laZbr~~WDyBXyNwr7Ip;K-5t2K_Xr#bP2{7kC5_x!Y<6{tchZa_b<{)v6EWqoWpyog(&$2+7z5pQd zXP1(cZ|dpvJ3vYub05_1B@j#fM2fMnv57X99eueMIz~V^e zxsfQOnBXT{S(Mb?_G!AS-Lx-f<)W*pOJLfm@0QFCu8+`JxYI|uz_M>=6SJ=b2BzlL z#yhYykm=nt)JvVO5-|Di-twu}9g2J3z@cwCknh&9f8P|>zRRb+okQQfFK@j3+U-gw6=^)uwv{!z^!os>C z`!fB56H)s5CZ?ZXCh8l2dg>eBzVw*BK!@&gE!{~lD5MblW_B9VHNL36eEGiH7ybbl z_Fc%IOTM}2D(FRBN_-JkznMN}@zuFHK#GUIRA(jz2EJ~z$!la~eV4yXkw2`5eXG9P zfduj(=fG^N*S3S$hp0&|LZ$Frw#SmvW&{XeU&YIW%?mXZ1O=kKYkftBu3IGsU)JSE zO0aTfU1p1!Lt}-p)(h+TXmKjGS$3D@K=hb0zCf1fCS>V53JJ+S6^95;G8ng4A|1F9 z*R!Uu#XOZJsNczMY`}pr4`boQeaO$??$UH9WeCljgH2D8#wp}t zm4y!qNd~)H<32-Qo!al}P`hjp!;*3Z%QRjRSA|8;X|kN6;85HLm1yX9+4 z%h42m6{4A|sUCRAqX=sF=h8y{+7WBH@N~B>ae7NwU>iJU7_cqSq{U|~Q9D?#vuFv^ zC9`Gd=^1s8^1R&T;m5Xc*p1ba^0(NzI)fn3Fb61B%Y-(p1-MJUbj&V z$P!JiR5^^%L$^E3E5pAy*Jm2v=(x43j!UQs9l{V+2wlO7edhfx7ZSSTdD*yaqFJZ7 z`ofSARsLz!&M!ntYnOC!P)FcR)pac=9A&D`y%z!q?1vR9kNx`^?gc6dL{crrphOJk z5(PQY;;XgR%5@Cpdw6@Vlg|5kGe^#owd>?}aa#HJRZB5LHgx1hPU19V87d+Dh09^? zktFHSv`cZ0;G!U$s>}Pq1*Pndy_Jv4#F_I+`ru-&VmLc%H{v#JB8?1HNln{AH$pM7 z(?Z$Qa*G@HcaF3j$(Jk6^>Y16aEj6@IP~M>F??c{U9&gLTkL@{LR)A#*$r9<5E_Yx z$<;$122e`C0nIk{m`q}9II2!XAem`mURrdS+K-VUt0nwDaX<4#p!9wM#Lo{V5mx05 z%O2G6Sc2i$gfa}>CH@Mg4nq$mHOT?wv-`RX|1P_2kR7WD_jpuJ*wOC!prVLabFrynYV|GvU$uK-P%7#M#w@-MsyNElN-y-#O)49mO3)c8 z)VjV7kN?ioWkY}0$LybltVhMtB(z4YgiJtm8oEC&vqqyy}{R zo{Pfwo|En=MGemvIXT|#qrxb@Ia7x%Z2-1=ya|itYN;h@2OPhVDW7>%3~+7OUGgE^ zr;NKU($Q#Gw!`F_s$#z36xL-S>5G~6y%>qxIk;JLthcNt;npiuaKqpaD_77*S%Mq>Ie&y=xj)L+B z=ODe(Cr!uakiEV=6r3y%{ZoBuEkT(Az^*vk(Y zD~cW3#U51G_VUmweg>kzYn8wQ)8VAlU%+|-Mb#hi%FM%Y9i+>eh5lMmSdsG=Zl8Hn z@SFemq5$61_AYx_T2o|8{Ir+NfO(%x1G^N9ha#9oeaB*}8r9`H$h!+`&yW|5KAfMl z@nb%!Cx1&%3r3DB!f{OP+50L3zZ3)~Ytd@*Ew~|fCX@CZ-*4VvuF9{-Xuu~m2E;H_?y^E91335x~B`9vF4+IG^j8?5g)O@U~PE1 z7K=jED8RVT?x5l3SOzr%^GnK=*p(4WVkne98l0Z&R8d>V zW}Ya@MXJOdHy7^l4&E$d&{gSoEx{&iDvs9{VoA|vCE`H7za|#-J+e4f<&941!V+$d z5$W<_xi^I`NYMDofZu5SDkOA>3Cpqf?y+tK9Xn~S7|iEnm4e(U`oC8yt`ROgW7TZB zR$&?@4Ttc8yr;6RpV^H7OVNrITDEjS zsXDO)+2ci;!IIC^v67Q)w^O1wD@_1drlCIU`NOT+#XTi4Z>mlr^q&h&Tk$ zaU71M3Yhm8oAsGh*rRK=Gn+By@;C{vSFvDfZ#<+z!!pO@49jcxawPsfZiIj+d(Ql% z^;%BPzUkzB7J29_CURHxocbkpr3qYsPB}WYmvZ3A;{#R@5>=LgVA>zZElJLo_nPR$ z6fAT>@l5K6iv3X{*|jHj%Bdyk-(*AdSVpSWgkUafbW*61$Xl^d(Sv+fj9ro(V&GF9 zjGKQeeJbSy&9aDyoG_=SJ2|^U4tV5-uE&O$GQn)`*^$602PXeQ3@_SAF!m&Jrpk%V zUr9^USHbtjSyb$_9ZrH4$9)7rt+phFVnXL94no_Vre0{{x`buimkBj{NE7`sPngFQ z=7-ivn7~Q`5HE2Pf}`%)%lh6tY;^98?k2yf8>+|;mx@jw@)4ZtR6I}TKdjR~4|CfeUTWOA5iI-?0FwQ5h5WI$9W{#7oT9Yev)Gr& zKg^exq$O76r0cnF1bsFUqH`zna6c;enGcN393(%Z!b4kZ$h)GMqP3wDUz*($dlPFQ?8i?f3~WcOcVAe-a@bU0*VJBrU^82v(afafD1$zXtfElT zS_Uy;u=h0&z9nqzt&_A2y+@;2XD+dt=w*zZFzDcB|bUJS4$hS&Kl zuS~CFJ$(yh@d6Zwso!g1R_iqme(I@;?&qwCqWZwO3pOh4@luZVSS78|7LR*Wf^~xI z{&F*{5gXR+W-nLbq~2KN_i_k%_Thpx@G~aj3p+(vQqx_{?duPYOl6s?0TLhf&)hw? zW6a5cW`XKPEuWSj)m2Z%&V_t}b!fF@J(~W*9_c^k<~UDDK}@@&E#|B*AMk9p!;TBN zt<0qQr+D9>=pRV*pJ`?T@F3zsxm3m@oHYJZ1W8hx{@9s5IGXEw5N*%LYetBOvzDk9Q|R^EBp zqcd$wH?Iy)inZ4B%o|)j5*kl6BP&#se^TH+ua)HQr3v6j^GpgO8p^@GU3Bo41#9mP zRC(CR2*Gjf%dY0VP14WP5NHCT;s?@v;X|W4)MPW~s`};^n1q^{0rgaGm;viZruSRt*0#SpFO`jkR=8z9B2OVwUG! z&fXNy6X$If0|? zIgo~|~RU&{jd*hOR3(0GJ(hkTzZ5-n{95Mx40HZ_a^rzMNo1+59r=DjX z%W8S5Lg^?-xolJe2i~Z^KwsMkRzNLhGr5I2+}FS_1M_g72W?!s<2n+lfTEn0QXKN~$(vPL+~(?UFRUs#VNRf{321iH7pu!9rx z@+u^wSc@Xn(5vlWsz3@pV{bDvn#lq#-i>A?Nex$c5_EGCQXb5I_zGzPcf3}bdW%#A zIeq?G)vyiGO=;X#BHo!6rFN7b)g{bd^^B4w@=*5p6N>)mrGCyt6}JwWaNvlnUxici z(I`xvKi$ZC%wZ0364%thWuZ`QCTO=wt=9L~QZ$K`7K1t`*aA}%BFtYR58StdIKU9H zVh?fnc&BqLVN#gIh*3fqZ4zAF86|XiC+}s9_L=su(-)u6&LPJ->b~wbreOCV={Q{Z zAtM}b%Y8RT9o2>?)taVbJIdNkrk6VLEfw~y$56AMSclHP*(9u^WfscXJA&AIWReIw z_G8AvGl#-hr36o>0$7$t2?P`ugcW~3F`j&}Rx{ux2 z1UyaDgvAVeY?_>G1~-;}ha5SuCX$j#`1Dg!*sX&rcf%_N8`k7MTOgazJ2*?*%{CeY!3p}KqDlhsFKx37IxsiFMc(Amf$ z{hiBIzRp%Rs4b=uN1t6q21hF&V>GjGsl7_c7PHt$?m3cGi2yv)(7UAb`}wFtmba{t z9gc9zjG=NlC5&8x{OQdzZUcIM46j&qb}& zGO+qDm5c=1CQ^lQLqteQP>$6GtcaahZ-L9Y;g1)1$@PH;T>`aMWfUm`QFrN=c@hjy zlHaNqEFw%FI`8Gx`sqMwl9>F1Pog+5XB5R8@H+;}ew01h6K4t$FP-?c`o;Kc3TEVO znP}B|B)z%3q~8Jucd^x#+|nr3d?EqocG8zVN2L9nwrp}wcyj+rz>_Z0U&M(@Zn9u& zpDcYT!^WxXew#-d$kgz)gayNcti5MSg+NiY-)jBjpO8%HWVkYz za?lI{{dFQVB9$omf^^^KvIyq`7CZC<-h9wBC%EOu2xZiFo2A?xMc)qc1Y{U^5nAp^ zJUnO&6(_W;iog8R*Q?Z>s;&=ybEK*vr^1A~K{82Lg?L+i%Q4W%u{-QaM5gQ}jK0@a z0+a0PjyYkb56)v*A!;EPkAlalapKnZsFw+Y6|1l4_CWz?7>&jv8DkHkV~VpJ=ces@ z|GZ9#yU;gXB<{_jN&ayNf~0egG_EFpg);%3z=kgts}>CTNVmX#KU%@jm!fhW=%4^G zHYjiF4pF&vJ;8=(o7dJ~bEOpbE{pBJgV=I^g6>uja#fwHs`C+=rJd#Pa$cjm9wN8V zd(h<&Weq#gAr-5q!Bw~$;m^qR>LZh9pn^IXnD9wPnOh(fOHs$QsA_D~&B0}qtBzOR zTB=FnRv=_XCz-D>l~TtYP`Bd?3!=3ZcQP{jXmWX5rk!QnfXm1koZ!oS3M5JX8m$b1 zO#dxcj~!(nkXTukfMLoG0&#>t$B?qN#)=s1#qATR;%{z>bTx4-XhyaGT|LKo6@^hsArzeQ zf-9S%L0hK$GH6b@YRmWK5v&_12&OSTHmRC+ot9Cz(Nw`bRS$%9Q%Urm4LUJ+&v*JO-(uIZ+<+BJ}8 z52FyqXFD;`AW^PMjxQ0|*S;O3Nxan-rnXtC_OAhd6>%bZtI`^pT~ejuA(>ddiRz6~ z?BjYbcb8OWo2Vug_Lf8{K3M~X?IMsnV#`1)3pJvnEkv?H<)K89bC$#uQs%}lbr{Vi z-0)2aTzn2@Bl3!s2N~A3>rw`vcIz?OH^#;a1BZ!6-j-bIY3zO{D#h_O&A9x(87Xw} zkPet{gYg(AQaY`Bah<=}>a9+jWPpj?ngtNa~9RvkK|S zJuPABS2e0+aoiQVU_knnmX7-S!)fsBf?>Io1#$HN#d8!F{R7sh7AxpvFY70=dD)Ap z6*uZZJ7K>{jjxK@&PsdfUxLvCMG!%V<)C)lIgOiU;E^P zz^z+YNYM@XFw@Bn*^dwSO~eJbJXJl(@1t(Ehq6c;Mo6d9{;fkmK0ZHN9d#BE)%=~8 zX7NVSk!YG4yZj{zA*A`T0EKXN$}=~Ae6)+4bkWVY-Gu4Fwv<3gT6}`q5vP!kZ=Q~k z!vF)0>d%gqltM5>;XT}ux;%j|6u0e#WFZ_6Qt9#;iB%TH?awrs4Jn+}@IVr=HdKaL zGowb!M9fQPsVGW4HSFIv|AA3DDfDkHac1L>qzd)v>MerhOeNkx0YUzzxZ7W;?jidT zSl~jUHE#I@Ck*@pS#U#?sSOa~=FiVhC6`JvmnVNB|Eq!f% zr1}~R!s#6zIdX?vG15SY2N`QnZLU>(9V@2vg9Xm4h=f&uYpV_69mD~MMPgXv?mpFk=tu>6#kYdQgpb(uogd<6RgWs*>|7U zQGHh1c?Z*i``Bi@|I7jNq@l-eQ5}+pguNQfx#8H1rL<(s2)Dqf;Q3hxrjC8)X?7n| z#v8m&lOy-ro=B^ME*>6;^P0Hw<{?pp=4s)sNK44|kYsyIM{g$2l~;`C6S6rO zl(r+#?YS9nCHyVgYMEEATlHF+SEc9>?LdpU z9C91{7VhlR204)4^u?MwV#U+4!n@pCkz~j>GmcQ2IXig{<%}Td7Qm3I-NnhVXUuJp z3F9Cug+dxuKp>WbB!9$dDLKehLq8`2#0EeeDkW{sB|t3^kbSH~KJ=O!$?u8OF5t_- zk13h2@j_Nq8h=t%Z(NO32T-~792CStj6!z9>q~)5M2R8v{|gurSx=Hv8{uca%0<#X z8{Q`A26aE+AQp<`aq_{a42sukyuqdBC__Q>{G@(9k@MNo#h$%d-1a8J(>a@e~4 zND$Gt&M!nnFEB2)`|B=xFPH?S^bi)ss3Kuqj&V=5y&ylcL^T+7K@HZ4q?pk$t{1Vk zhZX%Q!2gHDv;ML~PW0Ro?`7g&SO&q3&j>sO0O?l-sZ)=7xI{tJl1JTsrQj%YN`j)e zOw1)&@6$>+JT7P7PPk`v{^bC@<+K-?=%mb*_NpkJ_3am!AfoTwWlH)tyz^V%RV%No zkU@f7D6+S`Owx^WG`bho&o4xbDb(^aBZHcEAUdQH&q?g!rv#DKx{4b^FZzebAqb}IH>jD)Vh{~vsQ&Rx#jhLKVufhU%|R>q zq|rEbI8|Xeh7QRxnxQFjX~w=H@uOqG4E@3)idIZ;Dl4abUHAeHZo z1>IyMj6Jjz%QwpJ!?Dd?iu{g~m3#MtBcddxg)EpMgQ>9ic3BsWuNihAg1RcmNoWRd zo&Hl1UWQJSteU1EV+ePs_>duatpJ$IlTwBmtmyJ`UnvFJn?RFP)b6Nm;g@P0UE^Yq z^qa!!F|iwR$RXL%AD%e$;K`364z2_a%3z6z5w_iwLpu{9$xAT*Gcjfyy6}il6RD5> zaIq~A>n)MtU-F2S`GIxEr=~aJ&X7pQ-TCIA$wBq+t+?GYkukH6)n6Aup^JOtv!`|` z*%xEabrpGABM?2tr(LNgamNzYVm(^xC}1^jSGHr*w%c#_mt72Z{k zadWK5y}_4~4v6MR5#0Fg96a5urX#ZvlZS|N9h`5{eL$ECcKID*&x!Cs&n|9SsPvG} z7Z!TM=@K4nF@_bEbh)cTJfb@4E#|x7bCk1x5PL*>girZL^XQ*F;!|}<&EEGy7M7W2 z&*!0Y9NWT$A@WgopL|SxG~FuGT=Z)Gr`Kv*25=(Aim3zf#;B3SBFj4c6wIE`=~5}A zTK<_9Wsh)_?=>Z{u`UyBB_p}yt6+9bN$>Xhs64Y4-5TH;6~Ff((tRUPmLc+>(4am? z{ev9fWY~ml1SoJ=xv>pBK`mmZG~P(y0uU&)IcJ(prwXeBS+-+0+o`omhMrV}4Sg@c zUu8)i)5q@?g)KF-+dlmVu4Iz@}$A=7uip+wve3mhe$7PY%Gz+kzj= z0uzO;sKgycojcH+UB2 zuflv(6Z%%9MwG&HY$7>Ey0b>%vm5bs2sOZeoO*X*@o_u&(pN~4j>8MimR84h7LuzZ z2$+=>4weY7;Q=Y2*h2Kt=^8VPN!DLLBAt*i+M9GQvi3d}y8O3F;rgD>qki%A5*82Y zbwvSd21-VFO$oG+(%YKyi4++_j{1g8jpl74n>9Y*QggTvBujGQo+h@FcV^40M-IJP zR0y+pl20+j_Xk|+y)?t-R-@>Y5l-d3`zWw5e&|{)olksy=s9Q+NZ{a!xzZS~=z&O- zJMv-OyEmwjb*!nn3T>$8pGN$QL2CQ+`1jo{n}rF1Bqn{a#mW_=4iqcjua|6Slj;XL z6Tw0+k%!TB_ebx62!3sCA=Oa6T7pUt1CL0-1;NOH7l1Ibla zd_?SY?F!p}$a=Gqg<0d`63bA-IDa>^(fXp#@YZBH)+niHel{@{U~T6+KG2Yo1@kfD zIh!bY8|aQ&dQ3F^q6uCRBnCNeoB17U#yQ!1WOl`qv^O`PU2w=nSB1_J$AkhfSqBuv z>*phF?qnrf?b78mg+$?xo-$M5Mk@$qL`i!u8Hsj^8hB9hl=Z`smdSW3r4Lcl$o~S5>vbQ;?uKU+X)`Eeg=X0+z@|?PHd3rTSfml6UbF|9 zJWQ@&iisVttyd9;eDG+hTJp(-*Hn{cHtzu5v$~yRM;@7hiq>`>05O!1P zn^Xh{a0RZ=jTT(Y4OjT$s2d?ruVpGgJtaIDgaGq>NsL*Z(;s#FIxTY2HR^+s{w?kt zRP-DNjvgroZy$q)b5-i%d(lPevp<2(T+8hTw2w3Bkaq3XxXC=_4ja%qaEQVZ*5YB< zJ+4P|v2(XzTn>TPpvo%8@-`^Z|tyQ!44O56m`a(AJpXLbK({LA`g4R3C9}SItTM!Fe8@k~N zAGaKK-vhXpBy);lTult8KEFI0OT#-Q`FCa7#3mG{b?*og49tnY_tKxsm!!`5aIIsz zGr--RyfohOB#azy zBM8A;+k`h}oO83$!$4n`GaP2ZcQc?n`qyd+kU&xvX8ilW->ieoJQeWfRm)4#lmmJ% z#Oi}=FWc$XJ59aI`y=INecpOw7K71D<#UWvj5sVD0_S=pk%;ncmXAiM#v1k7_MVDr zop*I};mczcBam>tib({rUpj9JEQEFELhVdkFqas_>G^c*?Iuy>%gwVB`l`suVWyZm z=$=|;^UXtas^O69Ctx#FoV}_E?L>(<2mmF3ufZD*nEQXU8#off0>%%IJu;d4^;gw^Ymq=*miz0{{ju@Ezu zZ;*$6Usxz#;4>P!FefNoY7!yvKi2VIkK6{lmu*4t@^JcmKAQCfoe9S-{`B{rmG1oi z;;zVGuc1=3iVUqClTD zltqy>#5aB}#d~t)SbVi z0Z?j;;9ch?8z2WQ-!C}gM05}`ll{{L=Z^JHQkOI_Qwt>47N4x{9q)4i(E5S!mT1omSSqY)Vn?e zyJ62fQtgn`qNvA-c6R2}%5&bdKqAm;*s#%Kzg|}oxTj`6GNjYUr1v422-d6^iKV!$ zvzqd+qfg?e$j{+{xD^R~Cq3d8_2~5O8RId?7q`8qk!$*KwXHXH|LG3jTM_D|&8i zb|q;fh)k4$cKUjErww-CbuV$ClNp4!?^QyxxQUn+)d;`ow0+Fdsr46nl2ukLRN}6a zI*L(ShjU#0`r>*&*(Ac>rlBI>>T|Pfo{AS=EeQ--k?{~6rzT_Ry!!Uk|0Ic-2$nqU zJU+kjB$hsu*vk-mhmlcqJVHqx;(owf3qVl zm5=zz5llv~VjvV7(GUK|PO1k>@zy7-EzPsAt`j4-2pS|OGam}EBMQmeC`Nkw?o%_e zhd-n@h9I9d`)HDcvGs;akuEq4GVcNtk7Cn>y+I`$ype+0{A45-s?#bkSxrS^6wAZo2aL+MNDc41mG}WH0_<<==Jpx8X3VFh8db8lqoXBnUMB>(NBqfUB z@2jr1&+Y8rCI={InWK=fs2L8;0)LHU5r?L4Yn411d(-r~0!~>x*@IfKL9H}X6yQWg zX*JwiixtO!F_>2C$uz{8N;cl*7g`3IHCBAR47 zc+_gna6;-3XF_x2c9)J7emfgPyL5Q=EEf3xI?CH-pz+r%iiIiHm~}}a(AZ>W6j)Fb zeX`=$sNS4l)t4!L_tzZfOh)w@A9ouG$GQ-Vz(T*7UpBxaJ)Y;ORa<;3K-ee%T>+hM zQkVht(Hl8O*sOZBRQJLQ_DkTpYBaiK&F!$ZV#rJF!D#bDgV(SY}@KV5DVu5-s=v$O?`IqtqTTe?dzgJN%FyxXZivW>28;P_dHtx|oh{YnRV64T!?Pfw6J5Kt1)Adx+1mB=Y23=^HFgda#kxLqTBm^plw65ee zqgYWDF8Myc=|U^b-pa*8K#MS&jYC^kfby@E=x&vE4F z24>!9YA?JQk{fQ;>Pz|jiAmyFbWdtCVrGh=(P@E$2>L^Eon*QG31(}f%@u$6H11;$ zvw`8%mmqiNqwl-ZHdybyux*cY@}Vuz)T$c#f$JYZ4W8L~4Y?0^X0CBw%zMKB#A&_PRNhW3UU6 zM|Ja0QuM`=B#;6Glm0F~NP39U+KBG2*Fy;NTmA6nIR-AHXIq>Y0LmF>Rqap^*MJoy zNE2Wb)&CDc_9$jkrV5rVbqEasZq7uq_z-U_|i^)Rd+y@TfLQ9*iQF z>~!l;-O^*hBLWmfp?2OGBJH3Jm9)g%9WMI-d?MkIOZ#TFyGEDR+H+bk)W-~<-}lT8 zD39b%!W1-RYD!8tB2>oc`SPH$9j-d-DT!W@`B%9u(#Rx_WDB&!byTcSq42)=$l-!s zBjrt@vJ3Zk^U6t3f&(nf?5^E1bT*4|tz}}y?W}&AUDen0iArlHt{R*890nuz=0Dk)4~OKd5nrZ;lZb zxl|ZZ&v%j^!I__T^ZIzZAQOXKU5H7T}#$`xkiwt ztj+;yJ^(D<2!3OZXBAZSi<|~IIm8ioQr#V9&Y^UCWB~tuW=NzUE6Rq+>0*rS^^n+Q z>Q|=0?%N(lTf$J`p{&?a9EkS-q`8$Bv?7$CYqm!0KW7qt{5fDFVpe`1@+$@rXj)l9 zCsEW5g7w0FNEx|~B!a6(zB{FO%tMworm@bQR!i(cNJ|2Oxdmt>J9v8VS>%QO0@hjy zjf;^D+W6t7NkXvKNmZ5zrN$sSZY3Eh_tH@Sk%^3apWUfN(|NiwlP%0W8>^1(I=!X$ z-!F9ckHBWZhHwh0SLH_bmLx;|h&(~>l5NayLuaYk`{@p>PR@1+>7CZ)7&V{}-~I&S zVNHQ}H%8R4@}1ys{J0C>r5@JYNlT^HxKa5XoW3YsO}TN_$U&3(TT} za&}>&=?4!SrDx}^`v)VlvP0b6a>e(i|CK4{y>Q-^|&rMOv zTcwTn@Af(ilFFWclWC)PFVznOU#uwXNagm^E$|d<5L0p@X4T_SSY{QIsm75tFWek$ zf|4m#SUa46_P;vD6|yu4My2k^Ey6wTP!&Rif#_0}&1Sx+UfEj!qeasXy=5XaT>@X9 zLdN%BZtii`%S<{Yqw-NEyq%l=pUVGB&P8DtT>eozK0c9`%FzV<9NbuStQE=bk`$#k>P2s zjNv}g^@K382q*4H3$J(TRDjwfWbZE(0s3Kf0sUsUmiIrSB1L>pfc`xVrNYFJK!k79 z5*;|lVkY>QY?IB@?m`a)iTU0n0V2@u!ayLp;^`#;FShTue}{l4DJ!|;O>9;pbqnd( z7}O>F40ePNd0hd%^DOCg*Panu#_scLbmZ_lCe8tBOof3BzBO*}N;Qp=`wO4VvmmDp zqn}(jl@Lg0NCy#2F|5qAISc>i-%6C+rNNvVsEbEuYz6~VRQAKg9_c@M!tk&=<^ET8 zY-ycEYSYK1^RYDKBEa$qn%sc3j(~+ILUP*|lp3lHvsuYN)D6^=eI%Kn{HN2)0%p1u z%IUc5g-tQ1(0%oSA*lLj%G?tDbRSZ=hgvU^Cx$6s$rI;hU#&u50f@D6IE@kVE04IWKjRw^efmqZ+k97$m+>u_BrqAF;(zSC~IlU`K9 z0?cOlR=%Z|aRQ$`w-Q0dGdnqg-~j8Fs}W24Aq5&esqPz!n7y=#!460lcRJOHsBtvM zcRwm75W;Z)mkqKORXg1xW-KixMiS9B^t7$FmrJ`Vory-%&}-mj;5tE(7yy46VO&5- zia%2b@e!i3a_mb^YQOv3#-t0%(OX1bkd>`q9j#71+RdlD z1!D*c{=89E&(QyQ$xONs>imwqMZaVV2;ok(6JWqO0R_EcqesLup1;ysrMTb~bvt~v zZ#Sbx1z0f>fXD>*g%+4 zZ!z;*4m#`BQVN#fXw7R)1?{2F^^hV&&>mKyt4#h(ONEt3zsb1$P4YQIcdgRaHLOdT zkD;3)qlUB(a?A-$U-&bm`q(e#V*YqkpE~G_D~CAhz?QZ$6FfLYiST)^!~i~@d?I^n zl|mIsQsg;6!NlM88d@>g8P{B3ENUNg3JA*XuSUz)D++jVwaECr229+~0T_ z7zHT9Iteuc>#Rj{VpG3!(!PHchQdq;Z}oLSp0Ca}=?Du(rYpdh1m~0oM^MLX#L06X z*GC)QLkbO*aH_eUD5-r$Pc33EGE;L&p>|j`GyqTbkYNpk3WBp7y}oYbp6L)rch?ev zeAEW z2-WEWF{m&nN@8z{ER&;?H&^b?nJ``sj$snaw7%kx^(gk%IlhN(t9|0$h zFT~$K8|6GT0vl)gGY^xxi(%B;JFMIz-gwBn(a8!fDDgsl3a2!>kuM%l=yAT{6e%ns zO<~(1z2Pxb&dTcTe(GNNo%>ho+>Y$IlvX?uNl~JjA}Ipf17qIcRC4$~#6lTiHTv<8 zA(5^*HarH4(l@%u>XMA1^4wojevYl95o=h$Z@^ZTN5t9fTS zPV8evHK3Mr(58%Ks09kSGx+x9w1Etq$hB|cO75V?p0l9pkDj~ zDydhWHi-A=(M6XjMS_b)S|XGlObjg`fn@4-03T5@|zB_WF~OlJu~ z9@}bdQuE7fODN(_SnCo~bsNQ@XyUWL5O1cYC`~{Y5-u0LyUwIB%Em@(qI>a-o3Fm+ zeZi&Z^vxI={JSij^?ZYieaz2}OahCbmh22~+6eY&VTVXSp0J|nOBKkKy;+rJ(a#} zoLz&v>^qoltsxk3_z8vmax=-YElO$`^6-F*E7q(3Q2vOR+~gag=3HcY5ssyWp&+

?R4wK8QIEP1Kg{=O1nOJ{EcekN1_8U3@io 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 z783�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 U48wH?Nr*?2Ra2&FRGOUQ_d|7Rbr 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�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 bfN0LUh8FbW+rTTmU`7)yzw!~;=jHzaFbeZ? diff --git a/apps/plone/cypress/fixtures/image.png b/apps/plone/cypress/fixtures/image.png deleted file mode 100644 index 4c109bab8dbadd00ceb082694f3416b715055935..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1185 zcmV;S1YY}zP)=xnvsnabWDk;T{N>i~nkE||zor_QO-;(NTvH2D426-nUu@_7pLQpkYy_MZTyNstbb5ZZ zwqx{xEQCOPq!bL>d=r~XQr|(z$J{CUw@0HTe<-H69xKkDirw2{ZFwlK-*d1^i(#2< zZdBfJ$f$ydeoc4S)mON7eLJim#v9j1NI?#R@upr~6xDF?Osq{SklySZY|9{P>H((P z`_IIpd>5zt1#+K6%5}triu4b;lFhklRGZ(O-CA(TH(592LivBkRT?MLfBr3vORg5K z?&8YkTrRZ838i$k$XU2LZhDxqU(mI)Ok&p(Gt zFIg1VKIzh2-EAACm_>`mgctiiTzjxQ8leQa$z?AWkGY&3CS6N=JG6$2FugPF>rm?z z#BRDZf7!{U#i4-E)hd;v*qzu@>3yU1DP%$=aQWyzNrB+rxId8cvMiKsCmoEY4;7xsu7lJSs`q zq@vs!E~A?@hOhg}y0(AP4leWtZUTp!=Dl2b2y%%t*wjuiQ68@RUB}vp(xr0@t{_iO z*B;F~Xz(n4GRP$yz8}9-ajm^eR}XT(Bq=9wAr^Ake&kCZWGpys#Ta1r(SPlS`?+jT zE!UuJ-%kpRUyL;6;Ft8OxPdZBea3~RZ*#87Ww7yZAkIfUjq@OuJ*GLABpExoP}|q% zWxID??y8~(xcE5Nm-8rdB#%0uYnJzN&UT?kA;e+c`@eGGx&xOE{t4@p7k*zf+z`NZ zrGXGQUsoRIDu?5tP@u+j0ILtw0YJ~6zdQsx(70|B4%cl^`}2({R{$Ray`av98s>)v z^1~@t0&fDnsxFE`Q!m}%vwXW_E)`+2F*thMGAz%jW230=W!+5q+DMy2E-}RDDukQE z`wnZqi4JfHM!e9UdZ4e?%U;&Yb1rQk?@}t=m(#5G?h~2eKGA+I^aR>h-#{+uV$?F; z*K>BVuXmKoRb0b*)SOFs#42g94=Z&E>-CX+*nPY6G_D`cxp4WwdcJS2iAW#YH&-LA zw&POTz$W`XE=62Z#qg?g4uOA54W)zOs~pznqgkOo@0AE&?|jMd)1&87UZdm3RUAFz z9MR9Yub*>zKj$ic&cUM6_ASmW&(E2McZB){V+fV(8gbsY00000NkvXXu0mjf { - // `on` is used to hook into various events Cypress emits - // `config` is the resolved Cypress config -}; diff --git a/apps/plone/cypress/support/commands.js b/apps/plone/cypress/support/commands.js deleted file mode 100644 index 03fe48c752..0000000000 --- a/apps/plone/cypress/support/commands.js +++ /dev/null @@ -1,9 +0,0 @@ -import '@plone/volto/cypress/add-commands'; - -// Set PLONE_SITE_ID and PLONE_API_URL as cypress environment variables -// if testing without using localhost or a site id of `plone`. - -// --- CUSTOM COMMANDS ------------------------------------------------------------- -Cypress.Commands.add('custom_command', () => { - // Custom code here... -}); diff --git a/apps/plone/cypress/support/e2e.js b/apps/plone/cypress/support/e2e.js deleted file mode 100644 index 48912f7f19..0000000000 --- a/apps/plone/cypress/support/e2e.js +++ /dev/null @@ -1,14 +0,0 @@ -import 'cypress-axe'; -import 'cypress-file-upload'; -import './commands'; -import { setup, teardown } from './reset-fixture'; - -beforeEach(function () { - cy.log('Setting up API fixture'); - setup(); -}); - -afterEach(function () { - cy.log('Tearing down API fixture'); - teardown(); -}); diff --git a/apps/plone/cypress/support/reset-fixture.js b/apps/plone/cypress/support/reset-fixture.js deleted file mode 100644 index 4e2b4372d5..0000000000 --- a/apps/plone/cypress/support/reset-fixture.js +++ /dev/null @@ -1,43 +0,0 @@ -function setup() { - const api_url = Cypress.env('API_PATH') || 'http://localhost: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://localhost: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/apps/plone/cypress/tests/.gitkeep b/apps/plone/cypress/tests/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/apps/plone/locales/de/LC_MESSAGES/volto.po b/apps/plone/locales/de/LC_MESSAGES/volto.po deleted file mode 100644 index 49d2e20662..0000000000 --- a/apps/plone/locales/de/LC_MESSAGES/volto.po +++ /dev/null @@ -1,20 +0,0 @@ -# Translation of volto.pot to German -msgid "" -msgstr "" -"Project-Id-Version: Plone\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-27T19:30:59.079Z\n" -"PO-Revision-Date: 2016-10-22 16:41-0500\n" -"Last-Translator: German \n" -"Language: de\n" -"Language-Team: German \n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"MIME-Version: 1.0\n" -"Language-Code: de\n" -"Language-Name: Deutsch\n" -"Preferred-Encodings: utf-8 latin1\n" -"X-Is-Fallback-For: de-at de-li de-lu de-ch de-de\n" - - diff --git a/apps/plone/locales/en/LC_MESSAGES/volto.po b/apps/plone/locales/en/LC_MESSAGES/volto.po deleted file mode 100644 index 12b9a47628..0000000000 --- a/apps/plone/locales/en/LC_MESSAGES/volto.po +++ /dev/null @@ -1,14 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language: \n" -"Language-Team: \n" -"Content-Type: \n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - - diff --git a/apps/plone/locales/es/LC_MESSAGES/volto.po b/apps/plone/locales/es/LC_MESSAGES/volto.po deleted file mode 100644 index 784b64fb17..0000000000 --- a/apps/plone/locales/es/LC_MESSAGES/volto.po +++ /dev/null @@ -1,21 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: Plone\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-12-03 03:20-0400\n" -"PO-Revision-Date: 2019-12-12 06:07-0400\n" -"Last-Translator: Leonardo J. Caballero G. \n" -"Language: es\n" -"Language-Team: ES \n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"MIME-Version: 1.0\n" -"X-Generator: Virtaal 0.7.1\n" -"Language-Code: es\n" -"Language-Name: Español\n" -"Preferred-Encodings: utf-8\n" -"Domain: volto\n" -"X-Is-Fallback-For: es-ar es-bo es-cl es-co es-cr es-do es-ec es-es es-sv es-gt es-hn es-mx es-ni es-pa es-py es-pe es-pr es-us es-uy es-ve\n" - - diff --git a/apps/plone/locales/eu/LC_MESSAGES/volto.po b/apps/plone/locales/eu/LC_MESSAGES/volto.po deleted file mode 100644 index 984adca72e..0000000000 --- a/apps/plone/locales/eu/LC_MESSAGES/volto.po +++ /dev/null @@ -1,19 +0,0 @@ -# Translation of volto.pot to EU -msgid "" -msgstr "" -"Project-Id-Version: Plone\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-27T19:30:59.079Z\n" -"PO-Revision-Date: 2016-10-22 16:41-0500\n" -"Last-Translator: Plone i18n \n" -"Language: eu\n" -"Language-Team: Plone i18n \n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"MIME-Version: 1.0\n" -"Language-Code: eu\n" -"Language-Name: eu\n" -"Preferred-Encodings: utf-8 latin1\n" - - diff --git a/apps/plone/locales/fr/LC_MESSAGES/volto.po b/apps/plone/locales/fr/LC_MESSAGES/volto.po deleted file mode 100644 index f6050e4530..0000000000 --- a/apps/plone/locales/fr/LC_MESSAGES/volto.po +++ /dev/null @@ -1,20 +0,0 @@ -# Translation of volto.pot to French -msgid "" -msgstr "" -"Project-Id-Version: Plone\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-27T19:30:59.079Z\n" -"PO-Revision-Date: 2016-10-22 16:41-0500\n" -"Last-Translator: Benoît Suttor \n" -"Language: fr\n" -"Language-Team: French \n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"MIME-Version: 1.0\n" -"Language-Code: fr\n" -"Language-Name: French\n" -"Preferred-Encodings: utf-8 latin1\n" -"X-Is-Fallback-For: fr-be fr-ca fr-lu fr-mc fr-ch fr-fr\n" - - diff --git a/apps/plone/locales/it/LC_MESSAGES/volto.po b/apps/plone/locales/it/LC_MESSAGES/volto.po deleted file mode 100644 index 12b9a47628..0000000000 --- a/apps/plone/locales/it/LC_MESSAGES/volto.po +++ /dev/null @@ -1,14 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language: \n" -"Language-Team: \n" -"Content-Type: \n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - - diff --git a/apps/plone/locales/ja/LC_MESSAGES/volto.po b/apps/plone/locales/ja/LC_MESSAGES/volto.po deleted file mode 100644 index a543785fbf..0000000000 --- a/apps/plone/locales/ja/LC_MESSAGES/volto.po +++ /dev/null @@ -1,19 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: Plone\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-27T19:30:59.079Z\n" -"PO-Revision-Date: 2019-11-15 12:06+0900\n" -"Last-Translator: Manabu TERADA \n" -"Language: ja\n" -"Language-Team: Plone Japanese Team \n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"MIME-Version: 1.0\n" -"Language-Code: ja\n" -"Language-Name: Japanese\n" -"Preferred-Encodings: utf-8\n" -"X-Is-Fallback-For: ja-jp\n" - - diff --git a/apps/plone/locales/nl/LC_MESSAGES/volto.po b/apps/plone/locales/nl/LC_MESSAGES/volto.po deleted file mode 100644 index a9816b4cea..0000000000 --- a/apps/plone/locales/nl/LC_MESSAGES/volto.po +++ /dev/null @@ -1,18 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PlonenPOT-Creation-Date: 2017-04-27T19:30:59.079Z\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: 2017-02-28 08:52+0100\n" -"Last-Translator: Dutch \n" -"Language: nl\n" -"Language-Team: Dutch \n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"MIME-Version: 1.0\n" -"Language-Code: nl\n" -"Language-Name: Nederlands\n" -"Preferred-Encodings: utf-8\n" - - diff --git a/apps/plone/locales/pt/LC_MESSAGES/volto.po b/apps/plone/locales/pt/LC_MESSAGES/volto.po deleted file mode 100644 index 3713b40e7d..0000000000 --- a/apps/plone/locales/pt/LC_MESSAGES/volto.po +++ /dev/null @@ -1,19 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: Plone\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-12-17T20:38:19.520Z\n" -"PO-Revision-Date: \n" -"Last-Translator: Emanuel de Jesus , 2019\n" -"Language: pt\n" -"Language-Team: Portuguese (https://www.transifex.com/plone/teams/14552/pt/)\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"MIME-Version: 1.0\n" -"Domain: volto\n" -"Language-Code: pt\n" -"Language-Name: Portuguese\n" -"Preferred-Encodings: utf-8\n" - - diff --git a/apps/plone/locales/pt_BR/LC_MESSAGES/volto.po b/apps/plone/locales/pt_BR/LC_MESSAGES/volto.po deleted file mode 100644 index d788679fdc..0000000000 --- a/apps/plone/locales/pt_BR/LC_MESSAGES/volto.po +++ /dev/null @@ -1,18 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: Plone\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-27T19:30:59.079Z\n" -"PO-Revision-Date: 2017-02-28 08:52+0100\n" -"Last-Translator: Léu Almeida \n" -"Language: pt-BR\n" -"Language-Team: Plone i18n \n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"MIME-Version: 1.0\n" -"Language-Code: pt-br\n" -"Language-Name: Português do Brasil\n" -"Preferred-Encodings: utf-8\n" - - diff --git a/apps/plone/locales/ro/LC_MESSAGES/volto.po b/apps/plone/locales/ro/LC_MESSAGES/volto.po deleted file mode 100644 index 42c60f4d17..0000000000 --- a/apps/plone/locales/ro/LC_MESSAGES/volto.po +++ /dev/null @@ -1,18 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: Plone\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-27T19:30:59.079Z\n" -"PO-Revision-Date: 2016-10-22 16:41-0500\n" -"Last-Translator: Plone i18n \n" -"Language: ro\n" -"Language-Team: Plone i18n \n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"MIME-Version: 1.0\n" -"Language-Code: ro\n" -"Language-Name: Romanian\n" -"Preferred-Encodings: utf-8 latin1\n" - - diff --git a/apps/plone/locales/volto.pot b/apps/plone/locales/volto.pot deleted file mode 100644 index 430c431165..0000000000 --- a/apps/plone/locales/volto.pot +++ /dev/null @@ -1,16 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: Plone\n" -"POT-Creation-Date: 2018-10-03T09:01:24.737Z\n" -"Last-Translator: Plone i18n \n" -"Language-Team: Plone i18n \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"Language-Code: en\n" -"Language-Name: English\n" -"Preferred-Encodings: utf-8\n" -"Domain: volto\n" - - diff --git a/apps/plone/mrs.developer.json b/apps/plone/mrs.developer.json deleted file mode 100644 index 502bb075b9..0000000000 --- a/apps/plone/mrs.developer.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "volto-volto-project": { - "local": "addons/volto-volto-project/src" - } -} \ No newline at end of file diff --git a/apps/plone/package.json b/apps/plone/package.json deleted file mode 100644 index d1b700ff81..0000000000 --- a/apps/plone/package.json +++ /dev/null @@ -1,361 +0,0 @@ -{ - "name": "plone", - "description": "Plone CMS Volto frontend project", - "license": "MIT", - "version": "1.0.0", - "scripts": { - "start": "razzle start", - "build": "razzle build --noninteractive", - "lint": "./node_modules/eslint/bin/eslint.js --max-warnings=0 'src/**/*.{js,jsx,ts,tsx}'", - "lint:fix": "./node_modules/eslint/bin/eslint.js --fix 'src/**/*.{js,jsx,ts,tsx}'", - "lint:ci": "./node_modules/eslint/bin/eslint.js --max-warnings=0 -f checkstyle 'src/**/*.{js,jsx,ts,tsx}' > eslint.xml", - "prettier": "./node_modules/.bin/prettier --single-quote --check 'src/**/*.{js,jsx,ts,tsx,css,scss}'", - "prettier:fix": "./node_modules/.bin/prettier --single-quote --write 'src/**/*.{js,jsx,ts,tsx,css,scss}'", - "prettier:ci": "./node_modules/.bin/prettier --single-quote --check 'src/**/*.{js,jsx,ts,tsx,css,scss}'", - "stylelint": "stylelint 'theme/**/*.{css,scss,less}' 'src/**/*.{css,scss,less}'", - "stylelint:overrides": "stylelint 'theme/**/*.overrides' 'src/**/*.overrides'", - "stylelint:fix": "yarn stylelint --fix && yarn stylelint:overrides --fix", - "test": "razzle test --passWithNoTests", - "typecheck": "tsc --project tsconfig.json --noEmit", - "cypress:open": "make test-acceptance", - "cypress:run": "test-acceptance-headless", - "start:prod": "NODE_ENV=production node build/server.js", - "i18n": "rm -rf build/messages && NODE_ENV=production i18n", - "storybook": "start-storybook -p 6006", - "build-storybook": "build-storybook" - }, - "workspaces": [ - "src/addons/volto-volto-project" - ], - "addons": [ - "volto-volto-project" - ], - "jest": { - "modulePathIgnorePatterns": [ - "api" - ], - "transform": { - "^.+\\.js(x)?$": "babel-jest", - "^.+\\.(png)$": "jest-file", - "^.+\\.(jpg)$": "jest-file", - "^.+\\.(svg)$": "./node_modules/@plone/volto/jest-svgsystem-transform.js" - }, - "transformIgnorePatterns": [ - "/node_modules/(?!@plone/volto).+\\.js$" - ], - "moduleNameMapper": { - "@plone/volto/cypress/(.*)$": "/node_modules/@plone/volto/cypress/$1", - "@plone/volto/addon-registry": "/node_modules/@plone/volto/addon-registry", - "@plone/volto/webpack-plugins/webpack-less-plugin": "/node_modules/@plone/volto/webpack-plugins/webpack-less-plugin", - "@plone/volto/babel": "/node_modules/@plone/volto/babel", - "@plone/volto/(.*)$": "/node_modules/@plone/volto/src/$1", - "@plone/volto-slate/(.*)$": "/node_modules/@plone/volto/packages/volto-slate/src/$1", - "load-volto-addons": "/node_modules/@plone/volto/jest-addons-loader.js", - "@package/(.*)$": "/src/$1", - "@root/(.*)$": "/src/$1", - "~/(.*)$": "/src/$1", - "\\.(css|less|scss|sass)$": "identity-obj-proxy" - }, - "coverageThreshold": { - "global": { - "branches": 10, - "functions": 10, - "lines": 10, - "statements": 10 - } - }, - "setupFiles": [ - "@plone/volto/test-setup-globals.js", - "@plone/volto/test-setup-config.jsx" - ], - "globals": { - "__DEV__": true - } - }, - "prettier": { - "trailingComma": "all", - "singleQuote": true, - "overrides": [ - { - "files": "*.overrides", - "options": { - "parser": "less" - } - } - ] - }, - "stylelint": { - "extends": [ - "stylelint-config-idiomatic-order" - ], - "plugins": [ - "stylelint-prettier" - ], - "overrides": [ - { - "files": [ - "**/*.less" - ], - "customSyntax": "postcss-less" - }, - { - "files": [ - "**/*.overrides" - ], - "customSyntax": "postcss-less" - }, - { - "files": [ - "**/*.scss" - ], - "customSyntax": "postcss-scss" - } - ], - "rules": { - "prettier/prettier": true, - "rule-empty-line-before": [ - "always-multi-line", - { - "except": [ - "first-nested" - ], - "ignore": [ - "after-comment" - ] - } - ] - }, - "ignoreFiles": "theme/themes/default/**/*.overrides" - }, - "browserslist": [ - ">1%", - "last 4 versions", - "Firefox ESR", - "not ie 11", - "not dead" - ], - "engines": { - "node": "^16 || ^18 || ^20" - }, - "dependencies": { - "@loadable/component": "5.14.1", - "@loadable/server": "5.14.0", - "@plone/registry": "workspace:*", - "@plone/scripts": "workspace:*", - "@plone/volto": "workspace:*", - "@plone/volto-slate": "workspace:*", - "@redux-devtools/extension": "^3.3.0", - "classnames": "2.2.6", - "connected-react-router": "6.8.0", - "debug": "4.3.2", - "decorate-component-with-props": "1.2.1", - "dependency-graph": "0.10.0", - "detect-browser": "5.1.0", - "diff": "3.5.0", - "express": "4.19.2", - "filesize": "6", - "github-slugger": "1.4.0", - "history": "4.10.1", - "hoist-non-react-statics": "3.3.2", - "http-proxy-middleware": "2.0.1", - "image-extensions": "1.1.0", - "immutable": "3", - "is-hotkey": "0.2.0", - "is-url": "1.2.4", - "jotai": "2.0.3", - "jwt-decode": "2.2.0", - "linkify-it": "3.0.2", - "locale": "0.1.0", - "lodash": "4.17.21", - "lodash-move": "1.1.1", - "moment": "2.29.4", - "object-assign": "4.1.1", - "prepend-http": "2", - "pretty-bytes": "5.3.0", - "prismjs": "1.27.0", - "process": "^0.11.10", - "promise-file-reader": "1.0.2", - "prop-types": "15.7.2", - "query-string": "7.1.0", - "rc-time-picker": "3.7.3", - "react": "18.2.0", - "react-anchor-link-smooth-scroll": "1.0.12", - "react-animate-height": "2.0.17", - "react-beautiful-dnd": "13.0.0", - "react-cookie": "4.1.1", - "react-dates": "21.5.1", - "react-detect-click-outside": "1.1.1", - "react-dnd": "5.0.0", - "react-dnd-html5-backend": "5.0.1", - "react-dom": "18.2.0", - "react-dropzone": "11.1.0", - "react-fast-compare": "2.0.4", - "react-image-gallery": "1.2.7", - "react-intersection-observer": "9.1.0", - "react-intl": "3.12.1", - "react-intl-redux": "2.3.0", - "react-medium-image-zoom": "3.0.15", - "react-popper": "^2.3.0", - "react-redux": "8.1.2", - "react-router": "5.2.0", - "react-router-config": "5.1.1", - "react-router-dom": "5.2.0", - "react-router-hash-link": "2.4.3", - "react-select": "4.3.1", - "react-select-async-paginate": "0.5.3", - "react-share": "2.3.1", - "react-side-effect": "2.1.2", - "react-simple-code-editor": "0.7.1", - "react-sortable-hoc": "2.0.0", - "react-test-renderer": "18.2.0", - "react-toastify": "5.5.0", - "react-transition-group": "4.4.5", - "react-virtualized": "9.22.3", - "redux": "4.2.1", - "redux-actions": "3.0.0", - "redux-connect": "10.0.0", - "redux-localstorage-simple": "2.5.1", - "redux-mock-store": "1.5.4", - "redux-thunk": "2.4.2", - "rrule": "2.7.1", - "semantic-ui-less": "2.4.1", - "semantic-ui-react": "2.1.5", - "serialize-javascript": "3.1.0", - "slate": "0.100.0", - "slate-hyperscript": "0.100.0", - "slate-react": "0.98.4", - "superagent": "3.8.2", - "tlds": "1.203.1", - "undoo": "0.5.0", - "universal-cookie": "4.0.4", - "universal-cookie-express": "4.0.3", - "url": "^0.11.3", - "use-deep-compare-effect": "1.8.1", - "uuid": "^8.3.2", - "volto-volto-project": "workspace:*" - }, - "devDependencies": { - "@babel/core": "^7.0.0", - "@babel/eslint-parser": "7.22.15", - "@babel/plugin-proposal-export-default-from": "7.18.10", - "@babel/plugin-proposal-export-namespace-from": "7.18.9", - "@babel/plugin-proposal-json-strings": "7.18.6", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6", - "@babel/plugin-proposal-throw-expressions": "7.18.6", - "@babel/plugin-syntax-export-namespace-from": "7.8.3", - "@babel/runtime": "7.20.6", - "@babel/types": "7.20.5", - "@jest/globals": "^29.7.0", - "@loadable/babel-plugin": "5.13.2", - "@loadable/webpack-plugin": "5.15.2", - "@plone/scripts": "workspace:*", - "@plone/types": "1.0.0-alpha.11", - "@plone/volto-coresandbox": "workspace:*", - "@sinonjs/fake-timers": "^6.0.1", - "@storybook/addon-actions": "^8.0.4", - "@storybook/addon-controls": "^8.0.4", - "@storybook/addon-docs": "^8.0.4", - "@storybook/addon-essentials": "^8.0.4", - "@storybook/addon-links": "^8.0.4", - "@storybook/addon-webpack5-compiler-babel": "^3.0.3", - "@storybook/builder-webpack5": "^6.5.15", - "@storybook/manager-webpack5": "^6.5.15", - "@storybook/react": "^8.0.4", - "@storybook/react-webpack5": "^8.0.4", - "@storybook/theming": "^8.0.4", - "@testing-library/cypress": "10.0.1", - "@testing-library/jest-dom": "6.4.2", - "@testing-library/react": "14.2.0", - "@testing-library/react-hooks": "8.0.1", - "@types/jest": "^29.5.8", - "@types/loadable__component": "^5.13.9", - "@types/lodash": "^4.14.201", - "@types/react": "^18", - "@types/react-dom": "^18", - "@types/react-router-dom": "^5.3.3", - "@types/react-test-renderer": "18.0.7", - "@types/uuid": "^9.0.2", - "@typescript-eslint/eslint-plugin": "^7.7.0", - "@typescript-eslint/parser": "^7.7.0", - "autoprefixer": "10.4.8", - "axe-core": "4.4.2", - "babel-loader": "9.1.0", - "babel-plugin-add-module-exports": "0.2.1", - "babel-plugin-lodash": "3.3.4", - "babel-plugin-react-intl": "5.1.17", - "babel-plugin-root-import": "6.1.0", - "babel-preset-razzle": "4.2.18", - "bundlewatch": "0.3.3", - "circular-dependency-plugin": "5.2.2", - "css-loader": "5.2.7", - "cypress": "13.13.2", - "cypress-axe": "1.5.0", - "cypress-file-upload": "5.0.8", - "deep-freeze": "0.0.1", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-config-react-app": "^7.0.1", - "eslint-import-resolver-alias": "^1.1.2", - "eslint-import-resolver-babel-plugin-root-import": "^1.1.1", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.34.1", - "eslint-plugin-react-hooks": "^4.6.0", - "full-icu": "1.4.0", - "glob": "7.1.6", - "html-webpack-plugin": "5.5.0", - "identity-obj-proxy": "3.0.0", - "jest": "26.6.3", - "jest-environment-jsdom": "^26", - "jest-file": "1.0.0", - "jest-junit": "8.0.0", - "jsdom": "^16.7.0", - "jsonwebtoken": "9.0.0", - "less": "3.11.1", - "less-loader": "11.1.0", - "lodash-webpack-plugin": "0.11.6", - "mini-css-extract-plugin": "2.7.2", - "moment-locales-webpack-plugin": "1.2.0", - "mrs-developer": "^2.1.1", - "postcss": "8.4.31", - "postcss-flexbugs-fixes": "5.0.2", - "postcss-less": "6.0.0", - "postcss-load-config": "3.1.4", - "postcss-loader": "7.0.2", - "postcss-overrides": "3.1.4", - "postcss-scss": "4.0.6", - "prettier": "3.2.5", - "razzle": "4.2.18", - "razzle-dev-utils": "4.2.18", - "razzle-plugin-scss": "4.2.18", - "react-docgen-typescript-plugin": "^1.0.5", - "react-error-overlay": "6.0.9", - "react-is": "^18.2.0", - "release-it": "^17.1.1", - "semver": "^7.5.4", - "start-server-and-test": "1.14.0", - "storybook": "^8.0.4", - "style-loader": "3.3.1", - "stylelint": "^16.3.1", - "stylelint-config-idiomatic-order": "10.0.0", - "stylelint-prettier": "5.0.0", - "svg-loader": "0.0.2", - "svgo-loader": "3.0.3", - "terser-webpack-plugin": "5.3.6", - "tmp": "0.2.1", - "ts-jest": "^26.4.2", - "ts-loader": "9.4.4", - "tsconfig": "*", - "typescript": "^5.6.3", - "use-trace-update": "1.3.2", - "wait-on": "6.0.0", - "webpack": "5.90.1", - "webpack-bundle-analyzer": "4.10.1", - "webpack-dev-server": "4.11.1", - "webpack-node-externals": "3.0.0", - "why": "0.6.2" - }, - "theme": "volto-volto-project" -} diff --git a/apps/plone/patches/patchit.sh b/apps/plone/patches/patchit.sh deleted file mode 100644 index 7cd11b5edc..0000000000 --- a/apps/plone/patches/patchit.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -patch --quiet -p0 -N node_modules/razzle/config/createJestConfig.js < patches/razzle-jest.patch diff --git a/apps/plone/patches/razzle-jest.patch b/apps/plone/patches/razzle-jest.patch deleted file mode 100644 index 5b822cf57f..0000000000 --- a/apps/plone/patches/razzle-jest.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- node_modules/razzle/config/createJestConfig.js 2020-05-09 19:48:07.276871617 +0200 -+++ patched.js 2020-05-09 19:50:07.049471664 +0200 -@@ -60,6 +60,7 @@ - 'moduleDirectories', - 'moduleFileExtensions', - 'moduleNameMapper', -+ 'modulePathIgnorePatterns', - 'modulePaths', - 'snapshotSerializers', - 'setupFiles', diff --git a/apps/plone/public/android-chrome-192x192.png b/apps/plone/public/android-chrome-192x192.png deleted file mode 100644 index 5a31bad458a0ade6db43c2e63f09dd4466c674a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8295 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

*2lY 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 MK~4pgi!}867hxEky#N3J diff --git a/apps/plone/public/apple-touch-icon.png b/apps/plone/public/apple-touch-icon.png deleted file mode 100644 index f0a5f8bc85194f67106dca45d5d8ae453d239897..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7973 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 diff --git a/apps/plone/public/favicon-16x16.png b/apps/plone/public/favicon-16x16.png deleted file mode 100644 index bf6cf158a0ab234876f6ebac0b2502d00857efa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1012 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>qbVOX^a ztbIR2D@;4kOpwV(!RCP3jX*OGfQ>o`vaxwT%tp9lfM)Jz=-vrd0~Q3@-nIwI1!@6u zoA!Wg2U-oX9ccb4h9;mQdpH`|sS!wby>NG96i^BqwUHwM(ghfjvcl-p|h>oW;X=JPUH)F&9yn%sr&7TGiiHv&cCo1 z6p@Tc-tI2ZC3~it06Clm9+AZi46KJhm{Gdw<7}WHdx@v7EBjL(Ax?QiwHN8@fkL-D zT^vIsF6;JJM>8gh9ASU`YgKBlqR!Px*;_Iuu5-~Aja~8cpZt-1+kR$0E1y^V%(6jy zzWo9g=Z73NuE|bE`1wNBCf%}IzCvDhd85y?T`Gq26x2Vl9?;mtGKWjnLizmNnUP^y zAG*00Xl0e|j7w*3TvoEydy93r!5Y1)+V!tzow+T+W4P<%fgjV#zh~GfEIIY#N6X1C zlAABeB&IcpbGa9_bGrydI$ztj>t@(m)d?vVYgX_5-Ow+3UGG}SH2Yj(WA~@m|LqG4 z`tf%&=cTCs`@2tV`~BNIUT5ij#_uk&5482HHG#fVEpd$~Nl7e8wMs5Z1yT$~21bUu zhDN%E79j?fR>p=_CYIU;237_Ja$D8QQ8eV{r(~v8;?|J=V*Y8M21$?&!TD(=<%vb9 z4CUqJdYO6I#mR{Use1WE>9gP2NC6dvSA|5B1SOU$6cpvBW#*(RlvEa^Dr6RvBr`Bn z%z6BYhodk|L*tbH=`)^BgBX~Vx%HB{g_VW9CyOu(E4Vb698O_Y-W;NE`o@(LN6s9P iIl_Lr!DE4!9>Xhf!IDo-rc;4dFnGH9xvX_rvpD@m|Ko9xMh!6nM$p9eP02tsF zG629%3IKy#0BA)35Je>o>sJ9__B4E5Bm)Wnq6NxkkOhBDSe(jDF}oQYJP(k@e~y$| zfSd<;ttPz|7>(1X*-ao@3$nBTCXo3VyQdx~O#}$ch501_lN^{d0pucp%*@YvNH8^n z3b0O4S|bWX5UlQ$2BNfJ_r+;F90X!Bp#?jIVze2|4r{>#zCz7ZZ)n{HfN0SD9N6uY z5{oDSmV-HVA*WAILr@glF%gu|g-wBqF+M7|gn6-hfJGq$4m)+jXb-R`Mmy4lSuj5I z!r7rW=Q65?Sd;_1HAQqTtVHf*lr~jMb!A%iZ}Iftrp~jPjYi{AuIF|5m5)jyLfODJ z_V|sV@ec!S2gC5r6(3(`&9nS@P-xbp&G?ZS5}$Xwis1M1O}dRsDe3+8(_jX$s)gK#e zJke1Xw^!cJxA+KKHH!@nqL*#C-CPD=W{a4cQUD<2ppV&5GyMVF#7kHq4E*!C^JjnQ zsnz+|0bss_MGuJd?M!4Rtch4}waDt`YL^O<`(fALT!~A|oqG-~D^NRYy2h4i{^~f} zQz7rJk^AkcO?fO|m2o#i=G9-a@_m=cy85zinYiA+%_aDk^x)@@UESVaQVS;43<>w6 z`Q|n?w>>rEgt>p=hN_KGy*+mw4tnd%wW*6T4ef@ECSJJ;aobiJHBMHwzsL<7iDr8p zE7E(nOmdtX#cuNL!du+5m3GOc!(2z5^yJ{4A7<|(r)rpv#5XZjH4iH%>WYcOdO%~Z z>(F-}v(nlRUFW=vt+2+DdjzEf7*Ase+G@EzBzp$TO+Ok6Hl_A_lmQ}p!eqpi6 z-fwh^Z;&RPnP1zNcdf1$7q)N6;Z}0P(x1+KAd-jESoj9cfZf~PB)T{$Q#$NzJ24DSk9BD$SeXMxoFslps|s?LUUZq_~85+5a1S9z4i}1_!hP zJ1Jfw<%tDADwTR9>=35#c_M*Fl6Y(J>s5|W6qOzsEs5YsNg{Dle8P4CNg@*oNC_ed zAAq!yr|;&@O5W(|+7Z^-#d;nAaEl2Ze1gqlo8SUloDGSNthf?~TdavBb>8b~Z|!Pb f*oyB&m}P4{z#!3D@@} diff --git a/apps/plone/public/favicon.ico b/apps/plone/public/favicon.ico deleted file mode 100644 index b9c0d0c0a6803fdd4e02d218a7bb47d79adfb94b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 F{2x){hN%Dm diff --git a/apps/plone/public/icon.svg b/apps/plone/public/icon.svg deleted file mode 100644 index 72640f02bd..0000000000 --- a/apps/plone/public/icon.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/apps/plone/public/index.html.spa b/apps/plone/public/index.html.spa deleted file mode 100644 index 27e655dcab..0000000000 --- a/apps/plone/public/index.html.spa +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - React App - - - - -

-
-
+
-
- All existing alternative urls for this site -
-
- Filter by prefix + Existing alternative URLs for this site
- +
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
-
-
- Manually or automatically added? -
-
- - +
+
+
+
+
+ +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
-
-
- - -
-
-
+ class="field" + />
+
-
-
-
- -
- Alternative url path → target url path (date and time of creation, manually created yes/no) + Filter +
- + +
+
+ Alternative URL path → target URL path (date and time of creation, manually created yes/no) +
+
+ - - + Select + + + + + + + + + - - - - - - + - - - - - - +   → + /events + + - - - - - - + + - + + - + + - + + + + - + + - - -
+ Alias + + Date + + Manual +
- - Select - - Alias - - Target - - Date - - Manual -
- -
- -
-
-

- /eventsgreatalias -

-
-

- /events -

-
-

- 2022-05-17T09:38:19+00:00 -

-
-

- true -

-
- -
- -
-
+
+
-

- /eventsincredible -

-
+ + /eventsgreatalias +
+   → + /events +
+ + + true +
+
-

- 2022-05-17T09:38:35+00:00 -

-
+ + /eventsincredible +
+   → + /events +
+
+ 5/17/2022 + + + + true + + + + +
-
- + +
diff --git a/packages/volto/src/components/manage/Form/ModalForm.jsx b/packages/volto/src/components/manage/Form/ModalForm.jsx index ba2f5b0a30..4bc39652c1 100644 --- a/packages/volto/src/components/manage/Form/ModalForm.jsx +++ b/packages/volto/src/components/manage/Form/ModalForm.jsx @@ -70,6 +70,7 @@ class ModalForm extends Component { required: PropTypes.arrayOf(PropTypes.string), }).isRequired, title: PropTypes.string.isRequired, + description: PropTypes.objectOf(PropTypes.any), formData: PropTypes.objectOf(PropTypes.any), submitError: PropTypes.string, onSubmit: PropTypes.func.isRequired, @@ -211,7 +212,7 @@ class ModalForm extends Component { * @returns {string} Markup for the component. */ render() { - const { schema, onCancel } = this.props; + const { schema, onCancel, description } = this.props; const currentFieldset = schema.fieldsets[this.state.currentTab]; const fields = map(currentFieldset.fields, (field) => ({ @@ -245,6 +246,7 @@ class ModalForm extends Component { onSubmit={this.onSubmit} error={state_errors || Boolean(this.props.submitError)} > + {description} {state_errors ? ( { this[method] = ( path, - { params, data, type, headers = {}, checkUrl = false } = {}, + { + params, + data, + type, + headers = {}, + checkUrl = false, + attach = [], + } = {}, ) => { let request; let promise = new Promise((resolve, reject) => { @@ -88,6 +95,10 @@ class Api { request.send(data); } + attach.forEach((attachment) => { + request.attach.apply(request, attachment); + }); + request.end((err, response) => { if ( checkUrl && diff --git a/packages/volto/src/middleware/api.js b/packages/volto/src/middleware/api.js index 85465658f6..f0e0249287 100644 --- a/packages/volto/src/middleware/api.js +++ b/packages/volto/src/middleware/api.js @@ -186,6 +186,7 @@ const apiMiddlewareFactory = checkUrl: settings.actions_raising_api_errors.includes( action.type, ), + attach: item.attach, }, ).then((reqres) => { if (action.subrequest === 'batch-upload') { @@ -205,6 +206,7 @@ const apiMiddlewareFactory = checkUrl: settings.actions_raising_api_errors.includes( action.type, ), + attach: item.attach, }), ), ) @@ -214,6 +216,7 @@ const apiMiddlewareFactory = headers: request.headers, params: request.params, checkUrl: settings.actions_raising_api_errors.includes(action.type), + attach: request.attach, }); actionPromise.then( (result) => { From fc7757f04ee6f4d12b142e3c12e79c3c38db69db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Wed, 23 Oct 2024 16:58:10 +0200 Subject: [PATCH 24/50] Remove SEAMLESS mention in bootstrap (#6424) Co-authored-by: Steve Piercy --- packages/volto/news/6424.internal | 1 + packages/volto/src/start-server.js | 7 ++----- 2 files changed, 3 insertions(+), 5 deletions(-) create mode 100644 packages/volto/news/6424.internal diff --git a/packages/volto/news/6424.internal b/packages/volto/news/6424.internal new file mode 100644 index 0000000000..eee9d51424 --- /dev/null +++ b/packages/volto/news/6424.internal @@ -0,0 +1 @@ +Remove mention of `SEAMLESS` mode in the server bootstrap. @sneridagh diff --git a/packages/volto/src/start-server.js b/packages/volto/src/start-server.js index 52bdd7c343..2ab9921d44 100644 --- a/packages/volto/src/start-server.js +++ b/packages/volto/src/start-server.js @@ -18,11 +18,8 @@ export default function server() { server .listen(port, bind_address, () => { - if (app.apiPath === app.publicURL || !app.apiPath) { - console.log(`Volto is running in SEAMLESS mode`); - } else { - console.log(`API server (API_PATH) is set to: ${app.apiPath}`); - } + console.log(`API server (API_PATH) is set to: ${app.apiPath}`); + if (app.devProxyToApiPath) console.log( `Proxying API requests from ${app.publicURL}/++api++ to ${ From c7badcc417daa9d1961c60fd92b5544aaa836cbc Mon Sep 17 00:00:00 2001 From: David Glick Date: Wed, 23 Oct 2024 08:08:31 -0700 Subject: [PATCH 25/50] URL Management control panel: add Edit feature (#6425) --- .../core/controlpanels/aliasesControlPanel.js | 25 +- .../volto/locales/ca/LC_MESSAGES/volto.po | 17 +- .../volto/locales/de/LC_MESSAGES/volto.po | 17 +- .../volto/locales/en/LC_MESSAGES/volto.po | 17 +- .../volto/locales/es/LC_MESSAGES/volto.po | 17 +- .../volto/locales/eu/LC_MESSAGES/volto.po | 17 +- .../volto/locales/fi/LC_MESSAGES/volto.po | 17 +- .../volto/locales/fr/LC_MESSAGES/volto.po | 17 +- .../volto/locales/hi/LC_MESSAGES/volto.po | 17 +- .../volto/locales/it/LC_MESSAGES/volto.po | 17 +- .../volto/locales/ja/LC_MESSAGES/volto.po | 17 +- .../volto/locales/nl/LC_MESSAGES/volto.po | 17 +- .../volto/locales/pt/LC_MESSAGES/volto.po | 17 +- .../volto/locales/pt_BR/LC_MESSAGES/volto.po | 17 +- .../volto/locales/ro/LC_MESSAGES/volto.po | 17 +- packages/volto/locales/volto.pot | 19 +- .../volto/locales/zh_CN/LC_MESSAGES/volto.po | 17 +- packages/volto/news/6425.feature | 1 + .../manage/Controlpanels/Aliases.jsx | 365 ++++++++---------- .../__snapshots__/Aliases.test.jsx.snap | 40 ++ 20 files changed, 393 insertions(+), 312 deletions(-) create mode 100644 packages/volto/news/6425.feature diff --git a/packages/volto/cypress/tests/core/controlpanels/aliasesControlPanel.js b/packages/volto/cypress/tests/core/controlpanels/aliasesControlPanel.js index 643deb064e..5d079b429b 100644 --- a/packages/volto/cypress/tests/core/controlpanels/aliasesControlPanel.js +++ b/packages/volto/cypress/tests/core/controlpanels/aliasesControlPanel.js @@ -1,4 +1,4 @@ -describe('Add a new alias from control panel interface', () => { +describe('URL Management control panel', () => { beforeEach(() => { cy.intercept('GET', `/**/*?expand*`).as('content'); cy.autologin(); @@ -9,13 +9,28 @@ describe('Add a new alias from control panel interface', () => { }); cy.visit('/my-page'); cy.wait('@content'); + + cy.visit('/controlpanel/aliases'); + cy.get('#add-alt-url').click(); + cy.get('#field-altUrlPath').type('/alturl'); + cy.get('#field-targetUrlPath').type('/my-page'); + cy.get('button[aria-label="Save"]').click(); }); it('adds a new alias', () => { + cy.get('.toast-inner-content').contains('Alias has been added'); + }); + it('edits an existing new alias', () => { cy.visit('/controlpanel/aliases'); - cy.get('#add-alt-url').click(); - cy.get('#alternative-url-input').type('/alturl'); - cy.get('#target-url-input').type('/my-page'); - cy.get('#submit-alias').click(); + cy.get('button[aria-label="Edit Alternative URL"]').click(); + cy.get('#field-altUrlPath').clear().type('/alturl2'); + cy.get('#field-targetUrlPath').clear().type('/my-page'); + cy.get('button[aria-label="Save"]').click(); cy.get('.toast-inner-content').contains('Alias has been added'); }); + it('removes an alias', () => { + cy.visit('/controlpanel/aliases'); + cy.get('input[type="checkbox"][value="/alturl"]').click({ force: true }); + cy.get('#remove-alt-urls').click(); + cy.get('.toast-inner-content').contains('Aliases have been removed'); + }); }); diff --git a/packages/volto/locales/ca/LC_MESSAGES/volto.po b/packages/volto/locales/ca/LC_MESSAGES/volto.po index 0c8df0d970..9c127313f2 100644 --- a/packages/volto/locales/ca/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ca/LC_MESSAGES/volto.po @@ -74,7 +74,6 @@ msgstr "" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -315,6 +314,11 @@ msgstr "" msgid "Alias has been added" msgstr "" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -546,7 +550,6 @@ msgstr "No es pot editar el disseny per al tipus de contingut {type}{type} kann nicht verändert werden, da das #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1212,6 +1215,11 @@ msgstr "E-Mail-Adressen stimmen nicht überein." msgid "Edit" msgstr "Bearbeiten" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1380,11 +1388,6 @@ msgstr "" msgid "Error" msgstr "Fehler" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "Fehler" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/en/LC_MESSAGES/volto.po b/packages/volto/locales/en/LC_MESSAGES/volto.po index 2d821da363..77d49db13f 100644 --- a/packages/volto/locales/en/LC_MESSAGES/volto.po +++ b/packages/volto/locales/en/LC_MESSAGES/volto.po @@ -68,7 +68,6 @@ msgstr "" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -309,6 +308,11 @@ msgstr "" msgid "Alias has been added" msgstr "" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -540,7 +544,6 @@ msgstr "" #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1207,6 +1210,11 @@ msgstr "" msgid "Edit" msgstr "" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1375,11 +1383,6 @@ msgstr "" msgid "Error" msgstr "" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/es/LC_MESSAGES/volto.po b/packages/volto/locales/es/LC_MESSAGES/volto.po index 289d1e5462..4cc52bdb15 100644 --- a/packages/volto/locales/es/LC_MESSAGES/volto.po +++ b/packages/volto/locales/es/LC_MESSAGES/volto.po @@ -75,7 +75,6 @@ msgstr "Reglas de contenido activas en esta página" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -316,6 +315,11 @@ msgstr "Alias" msgid "Alias has been added" msgstr "Alias añadido correctamente" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -547,7 +551,6 @@ msgstr "No se puede editar la plantilla de {type} porque el sop #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1214,6 +1217,11 @@ msgstr "La dirección de correo electrónico no coincide." msgid "Edit" msgstr "Editar" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1382,11 +1390,6 @@ msgstr "Entradas" msgid "Error" msgstr "Error" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "Error" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/eu/LC_MESSAGES/volto.po b/packages/volto/locales/eu/LC_MESSAGES/volto.po index 50579cea41..e2fed09346 100644 --- a/packages/volto/locales/eu/LC_MESSAGES/volto.po +++ b/packages/volto/locales/eu/LC_MESSAGES/volto.po @@ -75,7 +75,6 @@ msgstr "Orrialde honetan aktibo dauden eduki-erregelak" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -316,6 +315,11 @@ msgstr "Aliasa" msgid "Alias has been added" msgstr "Aliasa ondo gehitu da" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -547,7 +551,6 @@ msgstr "Ezin da {type} elementu-motaren itxura aldatu, #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1214,6 +1217,11 @@ msgstr "Eposta helbideak ez datoz bat" msgid "Edit" msgstr "Editatu" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1382,11 +1390,6 @@ msgstr "" msgid "Error" msgstr "Erroea" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "Errorea" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/fi/LC_MESSAGES/volto.po b/packages/volto/locales/fi/LC_MESSAGES/volto.po index b86fd41e94..f851233f39 100644 --- a/packages/volto/locales/fi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fi/LC_MESSAGES/volto.po @@ -73,7 +73,6 @@ msgstr "Aktiiviset sisältösäännöt tällä sivulla" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -314,6 +313,11 @@ msgstr "Alias" msgid "Alias has been added" msgstr "Alias on lisätty" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -545,7 +549,6 @@ msgstr "Sisältötyypin {type} asettelua ei voi muokata, koska #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1212,6 +1215,11 @@ msgstr "Sähköpostiosoitteet eivät olleet identtiset." msgid "Edit" msgstr "Muokkaa" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1380,11 +1388,6 @@ msgstr "" msgid "Error" msgstr "Virhe" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/fr/LC_MESSAGES/volto.po b/packages/volto/locales/fr/LC_MESSAGES/volto.po index 978fad0f51..2f5d0b3005 100644 --- a/packages/volto/locales/fr/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fr/LC_MESSAGES/volto.po @@ -75,7 +75,6 @@ msgstr "Règles de contenu actives dans cette page" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -316,6 +315,11 @@ msgstr "Alias" msgid "Alias has been added" msgstr "L'alias a été ajouté" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -547,7 +551,6 @@ msgstr "Impossible de modifier la mise en page pour le type de contenu { #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1214,6 +1217,11 @@ msgstr "Les adresses e-mails ne correspondent pas." msgid "Edit" msgstr "Modifier" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1382,11 +1390,6 @@ msgstr "" msgid "Error" msgstr "Erreur" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "Erreur" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/hi/LC_MESSAGES/volto.po b/packages/volto/locales/hi/LC_MESSAGES/volto.po index c563207792..06006f6f10 100644 --- a/packages/volto/locales/hi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/hi/LC_MESSAGES/volto.po @@ -68,7 +68,6 @@ msgstr "पेज में सक्रिए कंटेंट रूल् #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -309,6 +308,11 @@ msgstr "उपनाम" msgid "Alias has been added" msgstr "उपनाम जोड़ा गया है" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -540,7 +544,6 @@ msgstr "" #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1207,6 +1210,11 @@ msgstr "ईमेल पते मेल नहीं खाते।" msgid "Edit" msgstr "संपादित करें" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1375,11 +1383,6 @@ msgstr "एन्ट्रीज़" msgid "Error" msgstr "त्रुटि" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "त्रुटि" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/it/LC_MESSAGES/volto.po b/packages/volto/locales/it/LC_MESSAGES/volto.po index 0b261ae65b..794ac7f9a6 100644 --- a/packages/volto/locales/it/LC_MESSAGES/volto.po +++ b/packages/volto/locales/it/LC_MESSAGES/volto.po @@ -68,7 +68,6 @@ msgstr "Regole di contenuto attive in questa Pagina" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -309,6 +308,11 @@ msgstr "Alias" msgid "Alias has been added" msgstr "L'alias è stato aggiunto" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -540,7 +544,6 @@ msgstr "Non è possibile modificare il Layout per il tipo {type}ブロックが有効で、かつ{type}< #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1213,6 +1216,11 @@ msgstr "Os endereços de e-mail não coincidem." msgid "Edit" msgstr "Editar" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1381,11 +1389,6 @@ msgstr "Entradas" msgid "Error" msgstr "Erro" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "Erro" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/ro/LC_MESSAGES/volto.po b/packages/volto/locales/ro/LC_MESSAGES/volto.po index ba0f688b6c..64f8414719 100644 --- a/packages/volto/locales/ro/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ro/LC_MESSAGES/volto.po @@ -68,7 +68,6 @@ msgstr "" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -309,6 +308,11 @@ msgstr "" msgid "Alias has been added" msgstr "" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -540,7 +544,6 @@ msgstr "Nu se poate edita aspectul pentru tipul de conținut {type}\n" "Language-Team: Plone i18n \n" "Content-Type: text/plain; charset=utf-8\n" @@ -70,7 +70,6 @@ msgstr "" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -311,6 +310,11 @@ msgstr "" msgid "Alias has been added" msgstr "" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -542,7 +546,6 @@ msgstr "" #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1209,6 +1212,11 @@ msgstr "" msgid "Edit" msgstr "" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1377,11 +1385,6 @@ msgstr "" msgid "Error" msgstr "" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po index 293d70df17..c64ddee6a5 100644 --- a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po +++ b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po @@ -74,7 +74,6 @@ msgstr "在此页面中活动的内容规则" #. Default: "Add" #: components/manage/Aliases/Aliases -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentTypes #: components/manage/Controlpanels/Rules/ConfigureRule #: components/manage/Rules/Rules @@ -315,6 +314,11 @@ msgstr "别名" msgid "Alias has been added" msgstr "别名已添加" +#. Default: "Aliases have been removed." +#: components/manage/Controlpanels/Aliases +msgid "Aliases have been removed." +msgstr "" + #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." @@ -546,7 +550,6 @@ msgstr "" #. Default: "Cancel" #: components/manage/Add/Add #: components/manage/Contents/ContentsUploadModal -#: components/manage/Controlpanels/Aliases #: components/manage/Controlpanels/ContentType #: components/manage/Controlpanels/ContentTypeLayout #: components/manage/Controlpanels/ContentTypeSchema @@ -1213,6 +1216,11 @@ msgstr "邮箱地址不匹配" msgid "Edit" msgstr "编辑" +#. Default: "Edit Alternative URL" +#: components/manage/Controlpanels/Aliases +msgid "Edit Alternative URL" +msgstr "" + #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule msgid "Edit Rule" @@ -1381,11 +1389,6 @@ msgstr "" msgid "Error" msgstr "错误" -#. Default: "Error" -#: components/manage/Controlpanels/Aliases -msgid "ErrorHeader" -msgstr "" - #. Default: "Event" #: components/manage/Controlpanels/Rules/Rules msgid "Event" diff --git a/packages/volto/news/6425.feature b/packages/volto/news/6425.feature new file mode 100644 index 0000000000..7a12576c21 --- /dev/null +++ b/packages/volto/news/6425.feature @@ -0,0 +1 @@ +URL Management control panel: Add a way to edit existing aliases. @davisagli diff --git a/packages/volto/src/components/manage/Controlpanels/Aliases.jsx b/packages/volto/src/components/manage/Controlpanels/Aliases.jsx index d1909ed07c..56bd71f0e9 100644 --- a/packages/volto/src/components/manage/Controlpanels/Aliases.jsx +++ b/packages/volto/src/components/manage/Controlpanels/Aliases.jsx @@ -18,8 +18,6 @@ import { Input, Loader, Menu, - Message, - Modal, Pagination, Radio, Segment, @@ -34,11 +32,10 @@ import FormattedDate from '@plone/volto/components/theme/FormattedDate/Formatted import { useClient } from '@plone/volto/hooks'; import backSVG from '@plone/volto/icons/back.svg'; +import editingSVG from '@plone/volto/icons/editing.svg'; import { map } from 'lodash'; import { toast } from 'react-toastify'; import { Toast } from '@plone/volto/components'; -import aheadSVG from '@plone/volto/icons/ahead.svg'; -import clearSVG from '@plone/volto/icons/clear.svg'; const messages = defineMessages({ back: { @@ -49,6 +46,14 @@ const messages = defineMessages({ id: 'URL Management', defaultMessage: 'URL Management', }, + AddUrl: { + id: 'Add Alternative URL', + defaultMessage: 'Add Alternative URL', + }, + EditUrl: { + id: 'Edit Alternative URL', + defaultMessage: 'Edit Alternative URL', + }, success: { id: 'Success', defaultMessage: 'Success', @@ -61,6 +66,10 @@ const messages = defineMessages({ id: 'Aliases have been uploaded.', defaultMessage: 'Aliases have been uploaded.', }, + successRemove: { + id: 'Aliases have been removed.', + defaultMessage: 'Aliases have been removed.', + }, filterByPrefix: { id: 'Filter by prefix', defaultMessage: 'Filter by path', @@ -122,13 +131,13 @@ const Aliases = (props) => { const [filterType, setFilterType] = useState(filterChoices[0]); const [createdBefore, setCreatedBefore] = useState(null); const [createdAfter, setCreatedAfter] = useState(null); - const [altUrlPath, setAltUrlPath] = useState(''); - const [targetUrlPath, setTargetUrlPath] = useState(''); const [aliasesToRemove, setAliasesToRemove] = useState([]); const [filterQuery, setFilterQuery] = useState(''); const [activePage, setActivePage] = useState(1); const [itemsPerPage, setItemsPerPage] = useState(10); const [addModalOpen, setAddModalOpen] = useState(false); + const [addError, setAddError] = useState(null); + const [editingData, setEditingData] = useState(null); const [uploadModalOpen, setUploadModalOpen] = useState(false); const [uploadError, setUploadError] = useState(null); const isClient = useClient(); @@ -173,41 +182,43 @@ const Aliases = (props) => { return pages; }, [aliases.items_total, itemsPerPage]); - // Validate altUrlPath starts with a slash - const isAltUrlCorrect = useMemo(() => { - return Boolean(altUrlPath.charAt(0) === '/'); - }, [altUrlPath]); - - // Check for errors on add - const errorMessageAdd = aliases.add.error?.response?.body?.message; - // Add new alias - const handleSubmitAlias = useCallback(() => { - dispatch( - addAliases('', { - items: [ - { - path: altUrlPath, - 'redirect-to': targetUrlPath, - }, - ], - }), - ) - .then(() => { - updateResults(); - setAddModalOpen(false); - setAltUrlPath(''); - setTargetUrlPath(''); - toast.success( - , - ); - }) - .catch((error) => {}); - }, [altUrlPath, targetUrlPath, dispatch, intl, updateResults]); + const handleAdd = (formData) => { + const { altUrlPath, targetUrlPath } = formData; + // Validate altUrlPath starts with a slash + if (!altUrlPath || altUrlPath.charAt(0) !== '/') { + setAddError(intl.formatMessage(messages.altUrlError)); + return; + } + // Remove existing alias first if we're editing it. + const precondition = editingData + ? dispatch( + removeAliases('', { items: [{ path: editingData.altUrlPath }] }), + ) + : Promise.resolve(); + precondition.then(() => { + dispatch( + addAliases('', { + items: [{ path: altUrlPath, 'redirect-to': targetUrlPath }], + }), + ) + .then(() => { + updateResults(); + setAddModalOpen(false); + setEditingData(null); + toast.success( + , + ); + }) + .catch((error) => { + setAddError(error.response?.body?.message); + }); + }); + }; // Check/uncheck an alias const handleCheckAlias = (alias) => { @@ -224,10 +235,20 @@ const Aliases = (props) => { removeAliases('', { items: aliasesToRemove.map((a) => ({ path: a })), }), - ).then(updateResults); + ).then(() => { + updateResults(); + toast.success( + , + ); + }); setAliasesToRemove([]); }; + // Upload CSV const handleBulkUpload = (formData) => { fetch(`data:${formData.file['content-type']};base64,${formData.file.data}`) .then((res) => res.blob()) @@ -265,167 +286,108 @@ const Aliases = (props) => { /> - setAddModalOpen(false)} - trigger={ - - } + + {addModalOpen && ( + setAddModalOpen(false)} + title={ + editingData + ? intl.formatMessage(messages.EditUrl) + : intl.formatMessage(messages.AddUrl) + } + submitError={addError} + schema={{ + fieldsets: [ + { + id: 'default', + fields: ['altUrlPath', 'targetUrlPath'], + }, + ], + properties: { + altUrlPath: { + title: intl.formatMessage(messages.altUrlPathTitle), + description: ( - -

{errorMessageAdd}

-
- )} - - - - - - - + ), + placeholder: '/example', + }, + targetUrlPath: { + title: intl.formatMessage(messages.targetUrlPathTitle), + description: ( + + ), + placeholder: '/example', + }, + }, + required: ['altUrlPath', 'targetUrlPath'], + }} + formData={editingData || {}} + /> + )} {hasBulkUpload && ( <> - setUploadModalOpen(false)} - title={intl.formatMessage(messages.BulkUploadAltUrls)} - submitError={uploadError} - description={ - <> -

- -

-

- Example: -
- - /old-home-page.asp,/front-page,2019/01/27 10:42:59 - GMT+1,true + {uploadModalOpen && ( + setUploadModalOpen(false)} + title={intl.formatMessage(messages.BulkUploadAltUrls)} + submitError={uploadError} + description={ + <> +

+ +

+

+ Example:
- /people/JoeT,/Users/joe-thurston,2018-12-31,false -
-

- - } - schema={{ - fieldsets: [ - { - id: 'default', - fields: ['file'], - }, - ], - properties: { - file: { - title: intl.formatMessage(messages.CSVFile), - type: 'object', - factory: 'File Upload', + + /old-home-page.asp,/front-page,2019/01/27 10:42:59 + GMT+1,true +
+ /people/JoeT,/Users/joe-thurston,2018-12-31,false +
+

+ + } + schema={{ + fieldsets: [ + { + id: 'default', + fields: ['file'], + }, + ], + properties: { + file: { + title: intl.formatMessage(messages.CSVFile), + type: 'object', + factory: 'File Upload', + }, }, - }, - required: ['file'], - }} - /> + required: ['file'], + }} + /> + )} )} @@ -529,7 +491,7 @@ const Aliases = (props) => { {aliases.get.loading && ( - + @@ -547,7 +509,21 @@ const Aliases = (props) => { {alias.path}
-   → {alias['redirect-to']} +   → {alias['redirect-to']}{' '} +
@@ -607,6 +583,7 @@ const Aliases = (props) => {
  → /events + +   → /events + + Remove selected From b8bed6f687f4a620ec528ccae52ab793898573d9 Mon Sep 17 00:00:00 2001 From: Timo Stollenwerk Date: Wed, 23 Oct 2024 17:34:04 +0200 Subject: [PATCH 26/50] Add German translations for URL management control panel (#6429) --- .../volto/locales/de/LC_MESSAGES/volto.po | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/volto/locales/de/LC_MESSAGES/volto.po b/packages/volto/locales/de/LC_MESSAGES/volto.po index 609ec8d2b7..accbee32db 100644 --- a/packages/volto/locales/de/LC_MESSAGES/volto.po +++ b/packages/volto/locales/de/LC_MESSAGES/volto.po @@ -95,7 +95,7 @@ msgstr "Hier werden verfügbare und installierte Backend-Add-ons gezeigt. Inform #. Default: "Add Alternative URL" #: components/manage/Controlpanels/Aliases msgid "Add Alternative URL" -msgstr "" +msgstr "Quell URL hinzufügen" #. Default: "Add Content…" #: components/manage/Toolbar/Types @@ -175,7 +175,7 @@ msgstr "Datum hinzufügen" #. Default: "Add element to container" #: components/manage/Blocks/Container/SimpleContainerToolbar msgid "Add element to container" -msgstr "" +msgstr "Element zum Container hinzufügen" #. Default: "Add field" #: components/manage/Widgets/SchemaWidget @@ -316,12 +316,12 @@ msgstr "Alias wurde hinzugefügt" #. Default: "Aliases have been removed." #: components/manage/Controlpanels/Aliases msgid "Aliases have been removed." -msgstr "" +msgstr "Weiterleitungen wurden entfernt." #. Default: "Aliases have been uploaded." #: components/manage/Controlpanels/Aliases msgid "Aliases have been uploaded." -msgstr "" +msgstr "Weiterleitungen wurden hochgeladen." #. Default: "Alignment" #: components/manage/Blocks/Image/schema @@ -424,7 +424,7 @@ msgstr "Aufsteigend" #. Default: "Assign the {role} role to {entry}" #: components/manage/Sharing/Sharing msgid "Assign the {role} role to {entry}" -msgstr "" +msgstr "Rolle {role} zum {entry} zugewiesen." #. Default: "Assignments" #: components/manage/Controlpanels/Rules/ConfigureRule @@ -519,7 +519,7 @@ msgstr "Seite durchsuchen, Bild ablegen oder URL eingeben" #. Default: "Bulk upload CSV" #: components/manage/Controlpanels/Aliases msgid "BulkUploadAltUrls" -msgstr "" +msgstr "CSV Massenupload" #. Default: "By default, permissions from the container of this item are inherited. If you disable this, only the explicitly defined sharing permissions will be valid. In the overview, the symbol {inherited} indicates an inherited value. Similarly, the symbol {global} indicates a global role, which is managed by the site administrator." #: components/manage/Sharing/Sharing @@ -529,7 +529,7 @@ msgstr "Standardmäßig werden die Berechtigungen von einem Ordner auf die in ih #. Default: "CSV file" #: components/manage/Controlpanels/Aliases msgid "CSVFile" -msgstr "" +msgstr "CSV Datei" #. Default: "Cache Name" #: components/manage/Controlpanels/DatabaseInformation @@ -1218,7 +1218,7 @@ msgstr "Bearbeiten" #. Default: "Edit Alternative URL" #: components/manage/Controlpanels/Aliases msgid "Edit Alternative URL" -msgstr "" +msgstr "Quell URL bearbeiten" #. Default: "Edit Rule" #: components/manage/Controlpanels/Rules/EditRule @@ -1339,7 +1339,7 @@ msgstr "Geben Sie den absoluten Pfad des Ziels ein. Das Ziel muss existieren ode #. Default: "Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." #: components/manage/Controlpanels/Aliases msgid "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." -msgstr "" +msgstr "Geben Sie den absoluten Pfad an wo die Quell URL hinterlegt werden sollte. Der Pfad muss mit einem '/' beginnen. Nur URLs welche einen 404 (Not Found) Fehler auslösen werden weitergeleitet." #. Default: "Enter the absolute path where the alternative url should exist. The path must start with '/'. Only urls that result in a 404 not found page will result in a redirect occurring." #: components/manage/Aliases/Aliases @@ -1370,7 +1370,7 @@ msgstr "Geben Sie Ihren Nutzernamen zur Verifikation ein." #. Default: "Entries" #: components/manage/Blocks/ToC/Schema msgid "Entries" -msgstr "" +msgstr "Einträge" #. Default: "Error" #: components/manage/Add/Add From d8727abcf17d142d3ad4f32626d28b108de470b8 Mon Sep 17 00:00:00 2001 From: David Glick Date: Wed, 23 Oct 2024 09:52:28 -0700 Subject: [PATCH 27/50] Test with plone.restapi 9.8.0 (#6430) --- packages/volto/news/6414.feature | 2 +- packages/volto/news/6421.feature.1 | 2 +- variables.mk | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/volto/news/6414.feature b/packages/volto/news/6414.feature index 9583c6da10..8ee0a49e68 100644 --- a/packages/volto/news/6414.feature +++ b/packages/volto/news/6414.feature @@ -1,3 +1,3 @@ URL Management control panel: add a filter for redirects created after a given date. -**Note:** This requires `Products.CMFPlone` 6.0.14 and `plone.restapi` 9.7.3 or later. +**Note:** This requires `Products.CMFPlone` 6.0.14 and `plone.restapi` 9.8.0 or later. @davisagli diff --git a/packages/volto/news/6421.feature.1 b/packages/volto/news/6421.feature.1 index 69374e60cc..b20307ca39 100644 --- a/packages/volto/news/6421.feature.1 +++ b/packages/volto/news/6421.feature.1 @@ -1,3 +1,3 @@ URL Management control panel: Add feature to bulk upload redirects in a CSV file. -**Note:** This requires `plone.restapi` 9.7.3 or later. +**Note:** This requires `plone.restapi` 9.8.0 or later. @davisagli diff --git a/variables.mk b/variables.mk index 3a40d4a3ca..6b621286d2 100644 --- a/variables.mk +++ b/variables.mk @@ -7,5 +7,5 @@ SCRIPTSPACKAGE = ./packages/scripts # Plone 5 legacy DOCKER_IMAGE5=plone/plone-backend:5.2.12 -KGS5=plone.restapi==9.7.0 plone.volto==4.2.0 plone.rest==3.0.1 +KGS5=plone.restapi==9.8.0 plone.volto==4.2.0 plone.rest==3.0.1 TESTING_ADDONS=plone.app.robotframework==2.0.0 plone.app.testing==7.0.1 From 4b690be37c317fb87160ff1d26fd05cb92cd30e7 Mon Sep 17 00:00:00 2001 From: dobri1408 <50819975+dobri1408@users.noreply.github.com> Date: Fri, 25 Oct 2024 02:12:53 +0300 Subject: [PATCH 28/50] (fix): Enable Volto Login to Redirect Back to Original Route After Authentication (#6419) Co-authored-by: Steve Piercy Co-authored-by: David Glick --- packages/coresandbox/src/index.ts | 8 ++++++++ .../volto/cypress/tests/coresandbox/login.js | 17 +++++++++++++++++ packages/volto/news/6419.bugfix | 1 + .../volto/src/components/theme/Login/Login.jsx | 3 +-- 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 packages/volto/cypress/tests/coresandbox/login.js create mode 100644 packages/volto/news/6419.bugfix diff --git a/packages/coresandbox/src/index.ts b/packages/coresandbox/src/index.ts index bad373a9b0..6bb0eb551c 100644 --- a/packages/coresandbox/src/index.ts +++ b/packages/coresandbox/src/index.ts @@ -19,6 +19,8 @@ import TestForm from './components/TestForm'; import FormBlockView from './components/Blocks/FormBlock/View'; import FormBlockEdit from './components/Blocks/FormBlock/Edit'; import { formBlockSchema } from './components/Blocks/FormBlock/schema'; +import { Login } from '@plone/volto/components'; + const testBlock: BlockConfigBase = { id: 'testBlock', title: 'testBlock', @@ -207,6 +209,12 @@ const applyConfig = (config: ConfigType) => { exact: false, }, ]; + + config.addonRoutes.push({ + path: '/fallback_login', + component: Login, + exact: false, + }); config.blocks.blocksConfig.testBlock = testBlock; config.blocks.blocksConfig.inputBlock = inputBlock; config.blocks.blocksConfig.testBlockConditional = testBlockConditional; diff --git a/packages/volto/cypress/tests/coresandbox/login.js b/packages/volto/cypress/tests/coresandbox/login.js new file mode 100644 index 0000000000..ed6c933198 --- /dev/null +++ b/packages/volto/cypress/tests/coresandbox/login.js @@ -0,0 +1,17 @@ +import { ploneAuth } from '../../support/constants'; + +describe('Login Tests', () => { + beforeEach(() => { + cy.visit('/fallback_login'); + }); + it('Check login redirect when the login is at another root', function () { + const user = ploneAuth[0]; + const password = ploneAuth[1]; + + cy.get('#login').type(user).should('have.value', user); + cy.get('#password').type(password).should('have.value', password); + cy.get('#login-form-submit').click(); + cy.wait(3000); + cy.location('pathname').should('eq', '/'); + }); +}); diff --git a/packages/volto/news/6419.bugfix b/packages/volto/news/6419.bugfix new file mode 100644 index 0000000000..e7e843cb57 --- /dev/null +++ b/packages/volto/news/6419.bugfix @@ -0,0 +1 @@ +Fix redirect after login if the `Login` component is used on a route other than `/login` or `/logout`. @dobri1408 diff --git a/packages/volto/src/components/theme/Login/Login.jsx b/packages/volto/src/components/theme/Login/Login.jsx index efdc409e21..5091ac9ef9 100644 --- a/packages/volto/src/components/theme/Login/Login.jsx +++ b/packages/volto/src/components/theme/Login/Login.jsx @@ -80,9 +80,8 @@ const Login = (props) => { const loading = useSelector((state) => state.userSession.login.loading); const returnUrl = qs.parse(props.location?.search ?? location.search).return_url || - location.pathname.replace(/\/login\/?$/, '').replace(/\/logout\/?$/, '') || + location.pathname.replace(/\/[^/]*\/?$/, '') || '/'; - const previousToken = usePrevious(token); useEffect(() => { From 67a4446a271788ab260f9d089b0e63c17be88d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Fri, 25 Oct 2024 09:25:01 +0200 Subject: [PATCH 29/50] Client transforms for reducer data (#6422) Co-authored-by: Steve Piercy --- docs/source/backend/index.md | 17 +++++++++++++++++ packages/registry/news/6422.bugfix | 1 + packages/registry/src/index.ts | 2 +- packages/registry/src/registry.test.tsx | 9 +++++++++ packages/volto/news/6422.feature | 1 + packages/volto/src/reducers/content/content.js | 12 ++++++++++++ 6 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 packages/registry/news/6422.bugfix create mode 100644 packages/volto/news/6422.feature diff --git a/docs/source/backend/index.md b/docs/source/backend/index.md index 8dbab251c4..4292411c35 100644 --- a/docs/source/backend/index.md +++ b/docs/source/backend/index.md @@ -34,6 +34,23 @@ Block transformers Search and indexing integration : By providing the right adapters, you can extract searchable text from blocks. +Client Reducer Content Transforms +: These transforms run in the client when the response from the backend is received. + These are useful when you need to modify on the fly the response from the backend, in case you need to make an amendment of the backend data, like a data migration of any kind. + You can register a utility that mutates the response at your convenience. + + ```ts + import { upgradeV20241023 } from './upgrades/upgradeV20241023'; + + config.registerUtility({ + name: 'upgradeV20241023', + type: 'transform', + dependencies: { reducer: 'content' }, + method: upgradeV20241023, + }); + ``` + + The `type` of the utility needs to be `transform` and the dependencies set to `{reducer: 'content'}`. ## Proxied backend routes diff --git a/packages/registry/news/6422.bugfix b/packages/registry/news/6422.bugfix new file mode 100644 index 0000000000..978f5bfa81 --- /dev/null +++ b/packages/registry/news/6422.bugfix @@ -0,0 +1 @@ +Return empty array when `getUtilities` does not match anything. @sneridagh diff --git a/packages/registry/src/index.ts b/packages/registry/src/index.ts index 830202f797..7f229a66a8 100644 --- a/packages/registry/src/index.ts +++ b/packages/registry/src/index.ts @@ -474,7 +474,7 @@ class Config { .join('+'); const utilityName = `${depsString ? `|${depsString}` : ''}`; - const utilitiesKeys = Object.keys(this._data.utilities[type]).filter( + const utilitiesKeys = Object.keys(this._data.utilities[type] || {}).filter( (key) => key.startsWith(utilityName), ); const utilities = utilitiesKeys.map( diff --git a/packages/registry/src/registry.test.tsx b/packages/registry/src/registry.test.tsx index ab189a9368..90ad418249 100644 --- a/packages/registry/src/registry.test.tsx +++ b/packages/registry/src/registry.test.tsx @@ -1063,4 +1063,13 @@ describe('Utilities registry', () => { .method(), ).toEqual('this is a validator for maxLength'); }); + + it('getUtilities - registers two utilities with the same dependencies and different names', () => { + expect( + config.getUtilities({ + dependencies: { fieldType: 'string' }, + type: 'validator', + }), + ).toEqual([]); + }); }); diff --git a/packages/volto/news/6422.feature b/packages/volto/news/6422.feature new file mode 100644 index 0000000000..7eb17ffd98 --- /dev/null +++ b/packages/volto/news/6422.feature @@ -0,0 +1 @@ +Introducing "client transforms for Redux reducers". @sneridagh diff --git a/packages/volto/src/reducers/content/content.js b/packages/volto/src/reducers/content/content.js index c610b46e0a..475498d7f6 100644 --- a/packages/volto/src/reducers/content/content.js +++ b/packages/volto/src/reducers/content/content.js @@ -20,6 +20,8 @@ import { UPDATE_UPLOADED_FILES, } from '@plone/volto/constants/ActionTypes'; +import config from '@plone/volto/registry'; + const initialState = { create: { loaded: false, @@ -192,6 +194,16 @@ export default function content(state = initialState, action = {}) { }; }); } + + const transforms = config.getUtilities({ + type: 'transform', + dependencies: { reducer: 'content' }, + }); + + transforms.forEach(({ method }) => { + method(result); + }); + return action.subrequest ? { ...state, From 6b9986a175fe351c2f3e89ec28af6aaf7f3c5a31 Mon Sep 17 00:00:00 2001 From: Faakhir Zahid <110815427+Faakhir30@users.noreply.github.com> Date: Fri, 25 Oct 2024 16:16:17 +0500 Subject: [PATCH 30/50] Used resource title instead of resource type in page title. (#6402) Co-authored-by: Jefferson Bledsoe Co-authored-by: Ichim David --- packages/volto/news/6308.internal | 1 + packages/volto/src/components/manage/Edit/Edit.jsx | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 packages/volto/news/6308.internal diff --git a/packages/volto/news/6308.internal b/packages/volto/news/6308.internal new file mode 100644 index 0000000000..c2b9271b6b --- /dev/null +++ b/packages/volto/news/6308.internal @@ -0,0 +1 @@ +Used `resource title` instead of `resource type` in page title on edit. @Faakhir30 diff --git a/packages/volto/src/components/manage/Edit/Edit.jsx b/packages/volto/src/components/manage/Edit/Edit.jsx index 333f6cf651..93efab9a7c 100644 --- a/packages/volto/src/components/manage/Edit/Edit.jsx +++ b/packages/volto/src/components/manage/Edit/Edit.jsx @@ -346,11 +346,15 @@ class Edit extends Component { <> {this.props.content?.language && ( From 8427cfb087eab4899195134063701052777de59a Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Fri, 25 Oct 2024 04:53:22 -0700 Subject: [PATCH 31/50] Fix broken links (#6439) --- docs/source/contributing/acceptance-tests.md | 2 +- docs/source/development/i18n.md | 8 ++++---- docs/source/upgrade-guide/index.md | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/source/contributing/acceptance-tests.md b/docs/source/contributing/acceptance-tests.md index ea9b66ec1f..c74bd9d4cb 100644 --- a/docs/source/contributing/acceptance-tests.md +++ b/docs/source/contributing/acceptance-tests.md @@ -72,7 +72,7 @@ There is a directory per spec. This directory is hot reloaded with your changes as you write the tests. ```{seealso} -[Cypress documentation](https://docs.cypress.io/guides/overview/why-cypress) +[Cypress documentation](https://docs.cypress.io/app/get-started/why-cypress) ``` diff --git a/docs/source/development/i18n.md b/docs/source/development/i18n.md index 01072108de..36bffe4dfc 100644 --- a/docs/source/development/i18n.md +++ b/docs/source/development/i18n.md @@ -17,7 +17,7 @@ This chapter describes the most common use cases for internationalization when d ## Process and file structure overview Volto uses the library [react-intl](https://www.npmjs.com/package/react-intl) to provide translations for any potential language. -Anything in the [official documentation of react-intl](https://formatjs.io/docs/react-intl/) also applies to Volto. +Anything in the [official documentation of react-intl](https://formatjs.github.io/docs/react-intl/) also applies to Volto. The workflow for creating *new* translatable text strings is as follows: @@ -79,13 +79,13 @@ function HelloWorld(props) { The identifier `hello_world` is then commonly used across all the translations. There are more features available, such as using placeholders. -See the documentation for all features in the [`FormattedMessage` component](https://formatjs.io/docs/react-intl/components#formattedmessage). +See the documentation for all features in the [`FormattedMessage` component](https://formatjs.github.io/docs/react-intl/components#formattedmessage). ### Translate attributes As `FormatMessage` is only suitable for creating text within HTML elements, it cannot be used for translating individual attributes. -But with the method [`formatMessage`](https://formatjs.io/docs/react-intl/api/#formatmessage), there is another way to translate primitive strings. +But with the method [`formatMessage`](https://formatjs.github.io/docs/react-intl/api/#formatmessage), there is another way to translate primitive strings. This approach can be best explained with an example. Assume you have a component called `TeaserImage` which contains an image that has, for accessibility reasons, the `alt` attribute. @@ -97,7 +97,7 @@ To translate the `alt` attribute, you have to do the following steps: import { defineMessages, injectIntl, intlShape } from 'react-intl'; ``` -2. Define a message (or more) via [`defineMessages`](https://formatjs.io/docs/react-intl/api/#definemessagesdefinemessage): +2. Define a message (or more) via [`defineMessages`](https://formatjs.github.io/docs/react-intl/api/#definemessagesdefinemessage): ```js const messages = defineMessages({ diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index 321510c672..2371e089c4 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -743,7 +743,7 @@ This is because the overrides that `@testing-library/cypress` introduce can be r Since there are some commands that can call exports in {file}`cypress/support/commands.js`, this import may be run more than once, and then it errors. So you have to make sure that import is run only once while the tests are run. -Check the official [Cypress Migration Guide](https://docs.cypress.io/guides/references/migration-guide) for more information. +Check the official [Cypress Migration Guide](https://docs.cypress.io/app/references/migration-guide) for more information. ### New Image component @@ -1135,7 +1135,7 @@ If you have already updated your configuration to use Cypress 10 or later in a p It is possible that forcing your project to use older versions might still work with old configurations. ```{seealso} -See https://docs.cypress.io/guides/references/migration-guide#Migrating-to-Cypress-version-10-0 for more information. +See https://docs.cypress.io/app/references/migration-guide#Migrating-to-Cypress-version-10-0 for more information. ``` ### The complete configuration registry is passed to the add-ons and the project configuration pipeline From 885b16a21397364994625dc359e06b8983be2753 Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Fri, 25 Oct 2024 05:55:04 -0700 Subject: [PATCH 32/50] Fix broken links (#6440) --- docs/source/upgrade-guide/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index 2371e089c4..3da7fbb39a 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -1135,7 +1135,7 @@ If you have already updated your configuration to use Cypress 10 or later in a p It is possible that forcing your project to use older versions might still work with old configurations. ```{seealso} -See https://docs.cypress.io/app/references/migration-guide#Migrating-to-Cypress-version-10-0 for more information. +See https://docs.cypress.io/app/references/migration-guide#Migrating-to-Cypress-100 for more information. ``` ### The complete configuration registry is passed to the add-ons and the project configuration pipeline From 42daabae0a9b37e0bfb638098feadcd7a31c98d3 Mon Sep 17 00:00:00 2001 From: David Glick Date: Fri, 25 Oct 2024 07:55:08 -0700 Subject: [PATCH 33/50] URL-Management control panel: Add missing translations (#6436) --- .../volto/locales/ca/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/de/LC_MESSAGES/volto.po | 36 ++++++++++++++++--- .../volto/locales/en/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/es/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/eu/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/fi/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/fr/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/hi/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/it/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/ja/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/nl/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/pt/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/pt_BR/LC_MESSAGES/volto.po | 26 ++++++++++++++ .../volto/locales/ro/LC_MESSAGES/volto.po | 26 ++++++++++++++ packages/volto/locales/volto.pot | 28 ++++++++++++++- .../volto/locales/zh_CN/LC_MESSAGES/volto.po | 26 ++++++++++++++ packages/volto/news/6436.bugfix | 1 + .../manage/Controlpanels/Aliases.jsx | 32 +++++++++++++---- 18 files changed, 449 insertions(+), 12 deletions(-) create mode 100644 packages/volto/news/6436.bugfix diff --git a/packages/volto/locales/ca/LC_MESSAGES/volto.po b/packages/volto/locales/ca/LC_MESSAGES/volto.po index 9c127313f2..9ad9f86d79 100644 --- a/packages/volto/locales/ca/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ca/LC_MESSAGES/volto.po @@ -432,6 +432,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -491,6 +496,11 @@ msgstr "Base de cerca" msgid "Block" msgstr "Bloc" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1414,6 +1424,11 @@ msgstr "" msgid "Event view" msgstr "Esdeveniment" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1525,6 +1540,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Fitxers pujats: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2185,6 +2201,11 @@ msgstr "Gestiona les traduccions per a {title}" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4584,6 +4605,11 @@ msgstr "quan" msgid "event_where" msgstr "On?" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/de/LC_MESSAGES/volto.po b/packages/volto/locales/de/LC_MESSAGES/volto.po index accbee32db..e8627e28be 100644 --- a/packages/volto/locales/de/LC_MESSAGES/volto.po +++ b/packages/volto/locales/de/LC_MESSAGES/volto.po @@ -431,6 +431,11 @@ msgstr "Rolle {role} zum {entry} zugewiesen." msgid "Assignments" msgstr "Zuweisungen" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "automatisch" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -490,6 +495,11 @@ msgstr "Basis Suchfilter" msgid "Block" msgstr "Block" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "beide" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -862,12 +872,12 @@ msgstr "Arbeitskopie erstellen" #. Default: "Created after" #: components/manage/Controlpanels/Aliases msgid "Created after" -msgstr "" +msgstr "Erstellt nach" #. Default: "Created before" #: components/manage/Controlpanels/Aliases msgid "Created before" -msgstr "" +msgstr "Erstellt vor" #. Default: "Created by {creator} on {date}" #: components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory @@ -1413,6 +1423,11 @@ msgstr "" msgid "Event view" msgstr "Termin" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "Beispiel" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1524,9 +1539,10 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Hochgeladene Dateien: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" -msgstr "" +msgstr "Filtern" #. Default: "Filter Rules:" #: components/manage/Controlpanels/Rules/Rules @@ -1536,7 +1552,7 @@ msgstr "Filterregeln:" #. Default: "Filter by path" #: components/manage/Controlpanels/Aliases msgid "Filter by prefix" -msgstr "Nach Präfix filtern" +msgstr "Nach Pfad filtern" #. Default: "Filter users by groups" #: helpers/MessageLabels/MessageLabels @@ -2184,6 +2200,11 @@ msgstr "Übersetzungen für {} verwalten" msgid "Manual" msgstr "Manuell" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "manuell" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4471,7 +4492,7 @@ msgstr "Passwort vergessen?" #. Default: "Add many alternative URLs at once by uploading a CSV file. The first column should be the path to redirect from; the second, the path to redirect to. Both paths must be Plone-site-relative, starting with a slash (/). An optional third column can contain a date and time. An optional fourth column can contain a boolean to mark as a manual redirect (default true)." #: components/manage/Controlpanels/Aliases msgid "bulkUploadUrlsHelp" -msgstr "" +msgstr "Fügen Sie mehrere alternative URLs auf einmal hinzu, indem Sie eine CSV-Datei hochladen. Die erste Spalte sollte den Pfad enthalten, von dem die Weiterleitung erfolgen soll; die zweite den Pfad, zu dem die Weiterleitung erfolgen soll. Beide Pfade müssen relativ zur Plone-Site sein und mit einem Schrägstrich (/) beginnen. Eine optionale dritte Spalte kann ein Datum und eine Uhrzeit enthalten. Eine optionale vierte Spalte kann einen Booleschen Wert enthalten, um eine manuelle Weiterleitung zu kennzeichnen (Standard: „true“)." #. Default: "Checkbox" #: config/Blocks @@ -4583,6 +4604,11 @@ msgstr "Datum" msgid "event_where" msgstr "Ort" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "/beispiel" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/en/LC_MESSAGES/volto.po b/packages/volto/locales/en/LC_MESSAGES/volto.po index 77d49db13f..1dba741cab 100644 --- a/packages/volto/locales/en/LC_MESSAGES/volto.po +++ b/packages/volto/locales/en/LC_MESSAGES/volto.po @@ -426,6 +426,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -485,6 +490,11 @@ msgstr "" msgid "Block" msgstr "" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1408,6 +1418,11 @@ msgstr "" msgid "Event view" msgstr "" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1519,6 +1534,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2179,6 +2195,11 @@ msgstr "" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4578,6 +4599,11 @@ msgstr "" msgid "event_where" msgstr "" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/es/LC_MESSAGES/volto.po b/packages/volto/locales/es/LC_MESSAGES/volto.po index 4cc52bdb15..23630b90a1 100644 --- a/packages/volto/locales/es/LC_MESSAGES/volto.po +++ b/packages/volto/locales/es/LC_MESSAGES/volto.po @@ -433,6 +433,11 @@ msgstr "" msgid "Assignments" msgstr "Tareas" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -492,6 +497,11 @@ msgstr "Consulta base de la búsqueda" msgid "Block" msgstr "Bloque" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1415,6 +1425,11 @@ msgstr "" msgid "Event view" msgstr "Vista de evento" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1526,6 +1541,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Archivos subidos: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "Filtrar" @@ -2186,6 +2202,11 @@ msgstr "Administrar traducciones de {title}" msgid "Manual" msgstr "Manual" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4585,6 +4606,11 @@ msgstr "Cuándo" msgid "event_where" msgstr "Dónde" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/eu/LC_MESSAGES/volto.po b/packages/volto/locales/eu/LC_MESSAGES/volto.po index e2fed09346..095444c38d 100644 --- a/packages/volto/locales/eu/LC_MESSAGES/volto.po +++ b/packages/volto/locales/eu/LC_MESSAGES/volto.po @@ -433,6 +433,11 @@ msgstr "" msgid "Assignments" msgstr "Esleipenak" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -492,6 +497,11 @@ msgstr "Oinarrizko bilaketa kontsulta" msgid "Block" msgstr "Blokea" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1415,6 +1425,11 @@ msgstr "" msgid "Event view" msgstr "Hitzorduaren bista" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1526,6 +1541,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Igotako fitxategiak: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2186,6 +2202,11 @@ msgstr "Kudeatu honen itzulpenak {title}" msgid "Manual" msgstr "Eskuz" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4585,6 +4606,11 @@ msgstr "Noiz" msgid "event_where" msgstr "Non" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/fi/LC_MESSAGES/volto.po b/packages/volto/locales/fi/LC_MESSAGES/volto.po index f851233f39..2be0080512 100644 --- a/packages/volto/locales/fi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fi/LC_MESSAGES/volto.po @@ -431,6 +431,11 @@ msgstr "" msgid "Assignments" msgstr "Tehtävät" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -490,6 +495,11 @@ msgstr "" msgid "Block" msgstr "Palikka" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1413,6 +1423,11 @@ msgstr "" msgid "Event view" msgstr "Tapahtuman näkymä" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1524,6 +1539,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Lähetetyt tiedostot: {uploadedFiles} " #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2184,6 +2200,11 @@ msgstr "Hallitse käännöksiä: {title}" msgid "Manual" msgstr "Manuaalinen" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4583,6 +4604,11 @@ msgstr "Milloin" msgid "event_where" msgstr "Missä" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/fr/LC_MESSAGES/volto.po b/packages/volto/locales/fr/LC_MESSAGES/volto.po index 2f5d0b3005..be16dc03d7 100644 --- a/packages/volto/locales/fr/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fr/LC_MESSAGES/volto.po @@ -433,6 +433,11 @@ msgstr "" msgid "Assignments" msgstr "Affectations" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -492,6 +497,11 @@ msgstr "Requête de base de la recherche" msgid "Block" msgstr "Bloc" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1415,6 +1425,11 @@ msgstr "" msgid "Event view" msgstr "Vue d'événement" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1526,6 +1541,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Fichiers téléchargés : {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2186,6 +2202,11 @@ msgstr "Gérer les traductions pour {title}" msgid "Manual" msgstr "Manuel" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4585,6 +4606,11 @@ msgstr "Quand" msgid "event_where" msgstr "Où" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/hi/LC_MESSAGES/volto.po b/packages/volto/locales/hi/LC_MESSAGES/volto.po index 06006f6f10..11afb55efa 100644 --- a/packages/volto/locales/hi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/hi/LC_MESSAGES/volto.po @@ -426,6 +426,11 @@ msgstr "{entry} को {role} भूमिका का काम दें" msgid "Assignments" msgstr "असाइनमेंट" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -485,6 +490,11 @@ msgstr "मूल खोज क्वेरी" msgid "Block" msgstr "ब्लॉक" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1408,6 +1418,11 @@ msgstr "" msgid "Event view" msgstr "आयोजन दृश्य" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1519,6 +1534,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr ""फ़ाइलें अपलोड की गईं: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "फ़िल्टर" @@ -2179,6 +2195,11 @@ msgstr "{title} के लिए अनुवाद प्रबंधित क msgid "Manual" msgstr "मैनुअल" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4578,6 +4599,11 @@ msgstr "कब" msgid "event_where" msgstr "कहाँ" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/it/LC_MESSAGES/volto.po b/packages/volto/locales/it/LC_MESSAGES/volto.po index 794ac7f9a6..13eb9c2280 100644 --- a/packages/volto/locales/it/LC_MESSAGES/volto.po +++ b/packages/volto/locales/it/LC_MESSAGES/volto.po @@ -426,6 +426,11 @@ msgstr "Assegnare il ruolo di {role} a {entry}" msgid "Assignments" msgstr "Assegnazione" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -485,6 +490,11 @@ msgstr "Ricerca iniziale" msgid "Block" msgstr "Blocco" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1408,6 +1418,11 @@ msgstr "La data di inizio evento essere uguale o precedente al {endDateValueOrEn msgid "Event view" msgstr "Vista evento" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1519,6 +1534,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "File caricati: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "Filtra" @@ -2179,6 +2195,11 @@ msgstr "Gestisci le traduzioni per {title}" msgid "Manual" msgstr "Manuale" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4578,6 +4599,11 @@ msgstr "Quando" msgid "event_where" msgstr "Dove" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/ja/LC_MESSAGES/volto.po b/packages/volto/locales/ja/LC_MESSAGES/volto.po index 3d016b4985..8f69541e34 100644 --- a/packages/volto/locales/ja/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ja/LC_MESSAGES/volto.po @@ -431,6 +431,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -490,6 +495,11 @@ msgstr "" msgid "Block" msgstr "ブロック" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1413,6 +1423,11 @@ msgstr "" msgid "Event view" msgstr "" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1524,6 +1539,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "アップロードされたファイル: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2184,6 +2200,11 @@ msgstr "{title}の翻訳を管理する" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4583,6 +4604,11 @@ msgstr "日時" msgid "event_where" msgstr "場所" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/nl/LC_MESSAGES/volto.po b/packages/volto/locales/nl/LC_MESSAGES/volto.po index 7ae5fd8b4a..4357dae948 100644 --- a/packages/volto/locales/nl/LC_MESSAGES/volto.po +++ b/packages/volto/locales/nl/LC_MESSAGES/volto.po @@ -430,6 +430,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -489,6 +494,11 @@ msgstr "" msgid "Block" msgstr "" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1412,6 +1422,11 @@ msgstr "" msgid "Event view" msgstr "" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1523,6 +1538,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Geüploade bestanden: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2183,6 +2199,11 @@ msgstr "" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4582,6 +4603,11 @@ msgstr "" msgid "event_where" msgstr "" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/pt/LC_MESSAGES/volto.po b/packages/volto/locales/pt/LC_MESSAGES/volto.po index 38e7165a15..d30596d054 100644 --- a/packages/volto/locales/pt/LC_MESSAGES/volto.po +++ b/packages/volto/locales/pt/LC_MESSAGES/volto.po @@ -431,6 +431,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -490,6 +495,11 @@ msgstr "" msgid "Block" msgstr "Bloco" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1413,6 +1423,11 @@ msgstr "" msgid "Event view" msgstr "" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1524,6 +1539,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Arquivos enviados: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2184,6 +2200,11 @@ msgstr "" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4583,6 +4604,11 @@ msgstr "" msgid "event_where" msgstr "" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po index a49133408d..af520c765e 100644 --- a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po +++ b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po @@ -432,6 +432,11 @@ msgstr "Atribuir o papel de {role} à {entry}" msgid "Assignments" msgstr "Atribuições" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -491,6 +496,11 @@ msgstr "Base da consulta para busca" msgid "Block" msgstr "Bloco" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1414,6 +1424,11 @@ msgstr "A data de início do evento deve ser igual ou anterior a {endDateValueOr msgid "Event view" msgstr "Visão de Evento" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1525,6 +1540,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Arquivos carregados: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "Filtrar" @@ -2185,6 +2201,11 @@ msgstr "Gerenciar traduções para {title}" msgid "Manual" msgstr "Manual" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4584,6 +4605,11 @@ msgstr "Quando" msgid "event_where" msgstr "Onde" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/ro/LC_MESSAGES/volto.po b/packages/volto/locales/ro/LC_MESSAGES/volto.po index 64f8414719..6ef3d38984 100644 --- a/packages/volto/locales/ro/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ro/LC_MESSAGES/volto.po @@ -426,6 +426,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -485,6 +490,11 @@ msgstr "Interogare căutare de bază" msgid "Block" msgstr "Bloc" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1408,6 +1418,11 @@ msgstr "" msgid "Event view" msgstr "" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1519,6 +1534,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "Fișiere încărcate: {uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2179,6 +2195,11 @@ msgstr "Gestionați traducerile pentru {title}" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4578,6 +4599,11 @@ msgstr "Data" msgid "event_where" msgstr "Locație" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/volto.pot b/packages/volto/locales/volto.pot index 8d69039230..0490c9b7a6 100644 --- a/packages/volto/locales/volto.pot +++ b/packages/volto/locales/volto.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Plone\n" -"POT-Creation-Date: 2024-10-22T18:13:27.236Z\n" +"POT-Creation-Date: 2024-10-24T16:41:21.354Z\n" "Last-Translator: Plone i18n \n" "Language-Team: Plone i18n \n" "Content-Type: text/plain; charset=utf-8\n" @@ -428,6 +428,11 @@ msgstr "" msgid "Assignments" msgstr "" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -487,6 +492,11 @@ msgstr "" msgid "Block" msgstr "" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1410,6 +1420,11 @@ msgstr "" msgid "Event view" msgstr "" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1521,6 +1536,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2181,6 +2197,11 @@ msgstr "" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4580,6 +4601,11 @@ msgstr "" msgid "event_where" msgstr "" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po index c64ddee6a5..6d98786196 100644 --- a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po +++ b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po @@ -432,6 +432,11 @@ msgstr "" msgid "Assignments" msgstr "分配" +#. Default: "Automatically" +#: components/manage/Controlpanels/Aliases +msgid "Automatically" +msgstr "" + #. Default: "Available" #: components/manage/Controlpanels/AddonsControlpanel msgid "Available" @@ -491,6 +496,11 @@ msgstr "基本搜索查询" msgid "Block" msgstr "块" +#. Default: "Both" +#: components/manage/Controlpanels/Aliases +msgid "Both" +msgstr "" + #. Default: "Both email address and password are case sensitive, check that caps lock is not enabled." #: components/theme/Login/Login msgid "Both email address and password are case sensitive, check that caps lock is not enabled." @@ -1414,6 +1424,11 @@ msgstr "" msgid "Event view" msgstr "事件视图" +#. Default: "Example" +#: components/manage/Controlpanels/Aliases +msgid "Example" +msgstr "" + #. Default: "Exclude from navigation" #: components/manage/Contents/ContentsPropertiesModal msgid "Exclude from navigation" @@ -1525,6 +1540,7 @@ msgid "Files uploaded: {uploadedFiles}" msgstr "已上载的文件:{uploadedFiles}" #. Default: "Filter" +#: components/manage/Controlpanels/Aliases #: helpers/MessageLabels/MessageLabels msgid "Filter" msgstr "" @@ -2185,6 +2201,11 @@ msgstr "管理{title}的翻译" msgid "Manual" msgstr "" +#. Default: "Manually" +#: components/manage/Controlpanels/Aliases +msgid "Manually" +msgstr "" + #. Default: "Manually or automatically added?" #: components/manage/Controlpanels/Aliases msgid "Manually or automatically added?" @@ -4584,6 +4605,11 @@ msgstr "" msgid "event_where" msgstr "" +#. Default: "/example" +#: components/manage/Controlpanels/Aliases +msgid "examplePath" +msgstr "" + #. Default: "This website does not accept files larger than {limit}" #: helpers/MessageLabels/MessageLabels msgid "fileTooLarge" diff --git a/packages/volto/news/6436.bugfix b/packages/volto/news/6436.bugfix new file mode 100644 index 0000000000..a0e0bf3309 --- /dev/null +++ b/packages/volto/news/6436.bugfix @@ -0,0 +1 @@ +URL Management control panel: add missing translations. @davisagli diff --git a/packages/volto/src/components/manage/Controlpanels/Aliases.jsx b/packages/volto/src/components/manage/Controlpanels/Aliases.jsx index 56bd71f0e9..d607e4949b 100644 --- a/packages/volto/src/components/manage/Controlpanels/Aliases.jsx +++ b/packages/volto/src/components/manage/Controlpanels/Aliases.jsx @@ -106,6 +106,22 @@ const messages = defineMessages({ id: 'CSVFile', defaultMessage: 'CSV file', }, + Both: { + id: 'Both', + defaultMessage: 'Both', + }, + Automatically: { + id: 'Automatically', + defaultMessage: 'Automatically', + }, + Manually: { + id: 'Manually', + defaultMessage: 'Manually', + }, + examplePath: { + id: 'examplePath', + defaultMessage: '/example', + }, }); const filterChoices = [ @@ -320,7 +336,7 @@ const Aliases = (props) => { defaultMessage="Enter the absolute path where the alternative URL should exist. The path must start with '/'. Only URLs that result in a 404 not found page will result in a redirect occurring." /> ), - placeholder: '/example', + placeholder: intl.formatMessage(messages.examplePath), }, targetUrlPath: { title: intl.formatMessage(messages.targetUrlPathTitle), @@ -330,7 +346,7 @@ const Aliases = (props) => { defaultMessage="Enter the absolute path of the target. Target must exist or be an existing alternative URL path to the target." /> ), - placeholder: '/example', + placeholder: intl.formatMessage(messages.examplePath), }, }, required: ['altUrlPath', 'targetUrlPath'], @@ -359,7 +375,11 @@ const Aliases = (props) => { />

- Example: + + :
/old-home-page.asp,/front-page,2019/01/27 10:42:59 @@ -407,7 +427,7 @@ const Aliases = (props) => { > setFilterQuery(e.target.value)} /> @@ -422,7 +442,7 @@ const Aliases = (props) => { {filterChoices.map((o, i) => ( { )} From bd591ca11e4a875864aa7ecf0a73f5f2f6e8153e Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Fri, 25 Oct 2024 09:40:43 -0700 Subject: [PATCH 34/50] Rename page title from Frontend to Volto UI (#6438) --- docs/source/index.md | 16 ++++++++-------- packages/volto/news/6438.documentation | 1 + 2 files changed, 9 insertions(+), 8 deletions(-) create mode 100644 packages/volto/news/6438.documentation diff --git a/docs/source/index.md b/docs/source/index.md index ef65b2294f..2b47ebce16 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -1,18 +1,18 @@ --- myst: html_meta: - "description": "Volto is the React-based frontend for the Plone CMS. It is the default UI for the Plone 6 release." - "property=og:description": "Volto is the React-based frontend for the Plone CMS. It is the default UI for the Plone 6 release." - "property=og:title": "Frontend" - "keywords": "Volto, Plone, frontend, React" + "description": "The Volto user interface (UI) is a React-based frontend for the Plone CMS. It is the default user interface starting with the release of Plone 6." + "property=og:description": "The Volto user interface (UI) is a React-based frontend for the Plone CMS. It is the default user interface starting with the release of Plone 6." + "property=og:title": "Volto UI" + "keywords": "Volto, Plone, frontend, user interface, React" --- (volto-index-label)= -# Frontend +# Volto UI -Volto is a React-based frontend for the [Plone CMS](https://plone.org). -It is the default frontend starting with the Plone 6 release. +The Volto user interface (UI) is a React-based frontend for the [Plone content management system](https://plone.org). +It is the default user interface starting with the release of Plone 6. Volto provides an attractive proposition: integration with the modern frontend development world, access to the huge ecosystem of React libraries and add-ons, combined with the ability to use the mature Plone CMS backend as a development platform. @@ -38,7 +38,7 @@ An integrator is someone who uses Volto to build a project. ### Users -A user of Volto is someone who edits content in a Plone content management system with Volto as the frontend. +A user of Volto is someone who edits content in a Plone content management system with Volto as the user interface. - {doc}`user-manual/index` provides information about how to manage content in a Plone site. diff --git a/packages/volto/news/6438.documentation b/packages/volto/news/6438.documentation new file mode 100644 index 0000000000..f894f6db1b --- /dev/null +++ b/packages/volto/news/6438.documentation @@ -0,0 +1 @@ +Rename page title from Frontend to Volto UI. @stevepiercy From 3ff2f2711a70288a0c5e51b6111dd938ee87947e Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Sat, 26 Oct 2024 04:42:58 -0700 Subject: [PATCH 35/50] Clean up #6422 (#6443) --- docs/source/backend/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/backend/index.md b/docs/source/backend/index.md index 4292411c35..614be62855 100644 --- a/docs/source/backend/index.md +++ b/docs/source/backend/index.md @@ -34,9 +34,9 @@ Block transformers Search and indexing integration : By providing the right adapters, you can extract searchable text from blocks. -Client Reducer Content Transforms +Client reducer content transforms : These transforms run in the client when the response from the backend is received. - These are useful when you need to modify on the fly the response from the backend, in case you need to make an amendment of the backend data, like a data migration of any kind. + These are useful when you need to modify the response from the backend on-the-fly for amending the backend data, such as a data migration of any kind. You can register a utility that mutates the response at your convenience. ```ts @@ -50,7 +50,7 @@ Client Reducer Content Transforms }); ``` - The `type` of the utility needs to be `transform` and the dependencies set to `{reducer: 'content'}`. + The `type` of the utility needs to be `transform`, and the `dependencies` set to `{reducer: 'content'}`. ## Proxied backend routes From 523e750a6d813a88e8a72a1e0eddae5b66bd1fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Sat, 26 Oct 2024 13:46:16 +0200 Subject: [PATCH 36/50] Add deprecation notices to the Upgrade guide (#6426) Co-authored-by: Steve Piercy Co-authored-by: David Glick --- docs/source/upgrade-guide/index.md | 136 +++++++++++++++++++++++++ packages/volto/news/6426.documentation | 1 + 2 files changed, 137 insertions(+) create mode 100644 packages/volto/news/6426.documentation diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index 3da7fbb39a..60de994f58 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -522,6 +522,142 @@ The `react/jsx-key` rule has been enabled in ESlint for catching missing `key` i You might catch some violations in your project or add-on code after running ESlint. Adding the missing `key` property whenever the violation is reported will fix it. +### Deprecation notices for Volto 18 + +#### `@plone/generator-volto` + +```{deprecated} Volto 18.0.0 +``` + +The Node.js-based Volto project boilerplate generator is deprecated from Volto 18 onwards. +After the release of Volto 18, it will be marked as deprecated, archived, and it won't receive any further updates. +Although you can still migrate your project to Volto 18 using this boilerplate, you should migrate to using [Cookieplone](https://github.com/plone/cookieplone). + +##### Alternative + +Migrate your project to use a [Cookieplone](https://github.com/plone/cookieplone) boilerplate. + +#### Volto project configurations + +```{deprecated} Volto 18.0.0 +``` + +Configuring Volto using {file}`src/config.js` at the project level is deprecated in Volto 18, and will be removed in Volto 19. + +```{seealso} +See https://github.com/plone/volto/issues/6396 for details. +``` + +##### Alternative + +You should configure your projects in a policy add-on. +You can move your project to use [Cookieplone](https://github.com/plone/cookieplone) which provides the necessary boilerplate for it. + +#### Semantic UI + +```{deprecated} Volto 18.0.0 +``` + +The Semantic UI library is not maintained anymore, and will be removed in Plone 7. +You should no longer use Semantic UI in add-ons and projects. + +```{seealso} +Related PLIPs: + +- https://github.com/plone/volto/issues/6321 +- https://github.com/plone/volto/issues/6323 +``` + +##### Alternatives + +You can use any supported component framework of your choice for implementing new components, especially in the public theme side. +If you create new widgets or components for the CMSUI—in other words, the non-public side—you should use the [`@plone/components`](https://github.com/plone/volto/tree/main/packages/components) library as an alternative. +Even though it's still in the development phase, it will be completed in the next few months, and will be supported in the future. + +#### `lodash` library + +```{deprecated} Volto 18.0.0 +``` + +`lodash` is deprecated in Volto 18, and will be removed in Plone 7. + +`lodash` has not received any updates since 2021. +It has performance issues from bloated bundles and it's not prepared for ESM. +Lots of `lodash` utility helpers can be replaced with vanilla ES. +These issues cause concern about its future maintainability. + +In place of `lodash`, Plone 7 will use both the `lodash-es` library, which is ESM ready, and modern vanilla ES alternatives whenever possible. + +##### Alternatives + +```{seealso} +The following links suggest alternatives to `lodash`. + +- https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore +- https://javascript.plainenglish.io/you-dont-need-lodash-how-i-gave-up-lodash-693c8b96a07c + +If you still need some of the utilities in `lodash` and cannot use vanilla ES, you can use `lodash-es` instead. +``` + +#### `@loadable/component` and Volto `Loadables` framework + +```{deprecated} Volto 18.0.0 +``` + +`@loadable/component` and the Volto `Loadables` framework is deprecated in Volto 18, and will be removed from Plone 7. +It's a Webpack-only library, and it does not have Vite plugin support. +Since React 18, this library is no longer necessary, as it has the initial implementation of the "concurrent mode". +React 19 will further improve it and add more features around it. + +##### Alternatives + +Use plain React 18 lazy load features and its idioms for lazy load components. + +```jsx +const myLazyComponent = lazy(()=> import('@plone/volto/components/theme/MyLazyComponent/MyLazyComponent')) + +const RandomComponent = (props) => ( + + + +) +``` + +There's no support for pre-loading or lazy loading entire libraries as in `@loadable/component`. +With the removal of barrel imports files, as described in the next deprecation notice, it is now unnecessary. + +#### Removal of barrel import files + +```{deprecated} Volto 18.0.0 +``` + +Volto previously used barrel imports, which are centralized files where other imports are re-exported, to improve the developer user experience. +With barrel imports, a developer only needs to remember to import from the re-exported place, not the full path. + +Since the barrel imports directly import all the code, a lot of imports ended up in the same main chunk of code. +It became a bad practice. +Modern bundlers, such as Vite, rely upon the import path to determine whether to bundle code together or not, reducing the bundle size. + +The barrel imports must be removed to increase the natural number of chunks that Volto divides on—especially on routes—resulting in code splitting done the right and natural way. +This forces us to rewrite all the imports everywhere—including core, projects, and add-ons—once we implement it. +The barrel imports files include the following. + +- {file}`src/components/index.js` +- {file}`src/helpers/index.js` +- {file}`src/actions/index.js` + +##### Alternative + +Implement only direct imports in code, preparing now for the upcoming change. + +```diff +-import { BodyClass } from '@plone/volto/helpers'; ++import BodyClass from '@plone/volto/helpers/BodyClass/BodyClass'; +``` + +Once this is implemented, a code modification will be provided for a smooth migration. + + (volto-upgrade-guide-17.x.x)= ## Upgrading to Volto 17.x.x diff --git a/packages/volto/news/6426.documentation b/packages/volto/news/6426.documentation new file mode 100644 index 0000000000..dc5079729a --- /dev/null +++ b/packages/volto/news/6426.documentation @@ -0,0 +1 @@ +Added deprecation notices to the upgrade guide for Volto 18. @sneridagh From 715503dcdd638cb5c6a4fd3fd55d7d82d1352613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Sat, 26 Oct 2024 13:52:08 +0200 Subject: [PATCH 37/50] Replace all `yarn` appearences with `pnpm` (#6433) Co-authored-by: David Glick Co-authored-by: Steve Piercy --- docs/source/addons/i18n.md | 6 +- docs/source/addons/theme.md | 2 +- docs/source/client/quick-start.md | 4 +- .../configuration/environmentvariables.md | 38 +++++------ docs/source/configuration/internalproxy.md | 2 +- docs/source/configuration/volto-config-js.md | 4 +- .../configuration/zero-config-builds.md | 2 +- docs/source/contributing/linting.md | 11 +++- docs/source/contributing/testing.md | 5 +- docs/source/deploying/seamless-mode.md | 8 +-- docs/source/deploying/sentry.md | 4 +- docs/source/deploying/simple.md | 6 +- docs/source/development/creating-project.md | 57 ++--------------- .../development/environment-variables.md | 8 +-- docs/source/development/i18n.md | 6 +- docs/source/development/ie11compat.md | 64 ------------------- docs/source/development/index.md | 1 - docs/source/development/lazyload.md | 2 +- packages/volto/news/6433.documentation | 1 + 19 files changed, 64 insertions(+), 167 deletions(-) delete mode 100644 docs/source/development/ie11compat.md create mode 100644 packages/volto/news/6433.documentation diff --git a/docs/source/addons/i18n.md b/docs/source/addons/i18n.md index 4ae542e544..9df832da70 100644 --- a/docs/source/addons/i18n.md +++ b/docs/source/addons/i18n.md @@ -23,10 +23,10 @@ Your add-on has a `locales` folder with a `.pot` file. └── volto.po ``` -1. Run `yarn i18n` in the context of your add-on. +1. Run `pnpm i18n` in the context of your add-on. 1. Go to each `.po` file in your `locales` folder, and write the translations for each translation literal. -In the context of your project, run `yarn i18n` to merge the add-on translations with the ones of your project. +In the context of your project, run `pnpm i18n` to merge the add-on translations with the ones of your project. ## Override translations @@ -34,4 +34,4 @@ In the context of your project, run `yarn i18n` to merge the add-on translations If you have multiple add-ons installed in your project, the translations are loaded in the order your add-ons are listed in `package.json`. If two add-ons provide different translations for the same message, then the last defined add-on wins. -When running `yarn i18n` in the context of your project, the project's own locales are processed last and can override translations from any add-on. +When running `pnpm i18n` in the context of your project, the project's own locales are processed last and can override translations from any add-on. diff --git a/docs/source/addons/theme.md b/docs/source/addons/theme.md index d14d559140..99251fd370 100644 --- a/docs/source/addons/theme.md +++ b/docs/source/addons/theme.md @@ -33,7 +33,7 @@ or add a key in your `package.json` project: or via a `THEME` variable: ```shell -THEME='volto-my-theme' yarn start +THEME='volto-my-theme' pnpm start ``` 2. Create a directory `src/theme` in your add-on, then add this file `theme.config`, replacing `` with your add-on name: diff --git a/docs/source/client/quick-start.md b/docs/source/client/quick-start.md index dd3174a9b7..ad62cd181f 100644 --- a/docs/source/client/quick-start.md +++ b/docs/source/client/quick-start.md @@ -21,9 +21,11 @@ These functions can be used in other use cases like command line helpers, script To install the Javascript Plone client run the following command: ```shell -yarn add @plone/client +pnpm add @plone/client ``` +or use your package manager of choice. + ## `ploneClient` entry point The main artifact that the client provides is the `ploneClient` entry point. diff --git a/docs/source/configuration/environmentvariables.md b/docs/source/configuration/environmentvariables.md index a63c6144f1..701ce5c7c2 100644 --- a/docs/source/configuration/environmentvariables.md +++ b/docs/source/configuration/environmentvariables.md @@ -21,7 +21,7 @@ All configurable environment variables work at runtime, not only at build time. You could, for example, build your Volto application, then start it in production with the `RAZZLE_API_PATH` environment variable. ```shell -yarn build && RAZZLE_API_PATH=https://plone.org yarn start:prod +pnpm build && RAZZLE_API_PATH=https://plone.org pnpm start:prod ``` This brings you a lot of power since you don't have to rebuild on every configuration change. @@ -40,7 +40,7 @@ You can also generate builds on your continuous integration, then deploy them an However, if you are not able to upgrade the packages `plone.restapi` (8.12.1 or greater) and `plone.rest` (2.0.0a1 or greater) in the backend, you can adjust your web server configuration and use the `RAZZLE_LEGACY_TRAVERSE` flag. ```shell - RAZZLE_LEGACY_TRAVERSE=true yarn start:prod + RAZZLE_LEGACY_TRAVERSE=true pnpm start:prod ``` `VOLTO_ROBOTSTXT` @@ -50,7 +50,7 @@ You can also generate builds on your continuous integration, then deploy them an ```shell VOLTO_ROBOTSTXT="User-agent: * - Disallow: /" yarn start + Disallow: /" pnpm start ``` ```{note} @@ -67,19 +67,19 @@ You can also generate builds on your continuous integration, then deploy them an It helps you identify problems with a customization that does not work as you expect. ```shell - DEBUG=volto:shadowing yarn start + DEBUG=volto:shadowing pnpm start ``` `i18n` enables the log of missing internationalization messages in the console. ```shell - DEBUG=volto:i18n yarn start + DEBUG=volto:i18n pnpm start ``` `*` enables logging everywhere it exists in Volto. ```shell - DEBUG=volto:* yarn start + DEBUG=volto:* pnpm start ``` `DEBUG_ADDONS_LOADER` @@ -107,34 +107,34 @@ You can also generate builds on your continuous integration, then deploy them an `ADDONS` can be used to temporarily add an add-on to your build for testing purposes. ```shell - yarn add volto-slate - ADDONS=volto-slate:asDefault yarn start + pnpm add @kitconcept/volto-light-theme + ADDONS=@kitconcept/volto-light-theme pnpm start ``` `ADDONS` can also be used to temporarily enable a feature or a set of customizations. ```shell # given a folder './packages/coresandbox', like in vanilla Volto - ADDONS=coresandbox:multilingualFixture yarn start + ADDONS=coresandbox:multilingualFixture pnpm start ``` If you need to specify several add-ons, separate them with a semicolon (`;`): ```shell - ADDONS="test-addon;test-addon2" yarn start + ADDONS="test-addon;test-addon2" pnpm start ``` - + You can specify profiles for installation: - + ```shell - ADDONS="test-addon:profile1;test-addon2:profile2" yarn start + ADDONS="test-addon:profile1;test-addon2:profile2" pnpm start ``` The following code snippets demonstrate how to configure add-ons. First in `package.json`: - + ```json "addons": [ "@kitconcept/volto-blocks-grid" @@ -152,8 +152,8 @@ You can also generate builds on your continuous integration, then deploy them an And finally using `ADDONS`: ```shell - yarn add volto-slate - ADDONS=volto-slate:asDefault yarn start + pnpm add volto-slate + ADDONS=volto-slate:asDefault pnpm start ``` As a result, your app will load the add-ons in the following order: @@ -165,14 +165,14 @@ You can also generate builds on your continuous integration, then deploy them an ```{important} The `ADDONS` key is a Volto specific configuration. Simply setting `ADDONS` doesn't download the JavaScript package. - This has to be covered another way, by either installing the add-on package (with `yarn add`), or loading it as a development package with `mrs-developer`. + This has to be covered another way, by either installing the add-on package (with `pnpm add`), or loading it as a development package with `mrs-developer`. ``` `BUILD_DIR` This is a runtime-only environment variable that directs the build to run Volto from a specific location, other than the default folder `build`. ```shell - yarn + pnpm install BUILD_DIR=dist node dist/server.js ``` @@ -182,7 +182,7 @@ You can also generate builds on your continuous integration, then deploy them an It can be relative to the current project or absolute. ```shell - VOLTOCONFIG=../../volto.config.js yarn start + VOLTOCONFIG=../../volto.config.js pnpm start ``` ```` diff --git a/docs/source/configuration/internalproxy.md b/docs/source/configuration/internalproxy.md index ec8612fe65..dde6c9b369 100644 --- a/docs/source/configuration/internalproxy.md +++ b/docs/source/configuration/internalproxy.md @@ -61,7 +61,7 @@ export const settings = { or use the environment variable: ```bash -RAZZLE_DEV_PROXY_API_PATH=http://localhost:8081/mysite yarn start +RAZZLE_DEV_PROXY_API_PATH=http://localhost:8081/mysite pnpm start ``` This redefines the request path from the internal proxy of the server side Node.js process to the Plone content backend API, but leaves the frontend Volto process making all content requests to `http://localhost:3000/++api++/`. diff --git a/docs/source/configuration/volto-config-js.md b/docs/source/configuration/volto-config-js.md index a8e4c4faa7..8bb16ce951 100644 --- a/docs/source/configuration/volto-config-js.md +++ b/docs/source/configuration/volto-config-js.md @@ -70,11 +70,11 @@ This environment variable allows you to specify a custom location for {file}`vol It can be relative to the current project or absolute. ```shell -VOLTOCONFIG=../../volto.config.js yarn start +VOLTOCONFIG=../../volto.config.js pnpm start ``` ```shell -VOLTOCONFIG=$(pwd)/volto.config.js yarn start +VOLTOCONFIG=$(pwd)/volto.config.js pnpm start ``` You can also set it from the root of the monorepo: diff --git a/docs/source/configuration/zero-config-builds.md b/docs/source/configuration/zero-config-builds.md index 7b4c396075..5ac09d7d87 100644 --- a/docs/source/configuration/zero-config-builds.md +++ b/docs/source/configuration/zero-config-builds.md @@ -17,7 +17,7 @@ In the past (before Volto 13), Volto was configured in build time using several environment variables, commonly supplied via the command line, such as the following: ```shell -PORT=11001 RAZZLE_API_PATH=https://plone.org/api yarn build` +PORT=11001 RAZZLE_API_PATH=https://plone.org/api pnpm build` ``` and since Razzle is an isomorphic application, some of these values passed on build time, were diff --git a/docs/source/contributing/linting.md b/docs/source/contributing/linting.md index cd291fd556..feea6f0307 100644 --- a/docs/source/contributing/linting.md +++ b/docs/source/contributing/linting.md @@ -76,7 +76,7 @@ From here we will have access to the commands to check for errors and to fix the You can run the pnpm `eslint`, `prettier`, and `stylelint` commands from the Volto package folder: ```shell -pnpm lint +pnpm lint pnpm prettier pnpm stylelint ``` @@ -89,8 +89,13 @@ pnpm prettier:fix pnpm stylelint:fix ``` -````{note} -The same commands can be found in your Volto add-on projects, as seen in the [`package.json.tpl`](https://github.com/plone/volto/blob/main/packages/generator-volto/generators/app/templates/package.json.tpl#L10) file. +```{versionadded} Volto 18.0.0-alpha.43 +[Cookieplone](https://github.com/plone/cookieplone) is now the recommended way to develop Volto projects, using it as a boilerplate generator. +Cookieplone uses the frontend code installed using `pnpm` instead of `yarn`. +``` + +````{deprecated} Volto 18.0.0 +The same commands can be found in your Volto legacy add-ons and projects created with `@plone/generator-volto`, as seen in the [`package.json.tpl`](https://github.com/plone/volto/blob/main/packages/generator-volto/generators/app/templates/package.json.tpl#L10) file. You will use similar commands to run the linting commands, but with `yarn` instead of `pnpm`: diff --git a/docs/source/contributing/testing.md b/docs/source/contributing/testing.md index a1244c9496..37f241151d 100644 --- a/docs/source/contributing/testing.md +++ b/docs/source/contributing/testing.md @@ -66,10 +66,9 @@ This makes it faster and easier to test code changes. In GitHub workflows or for testing add-ons, it's useful to use an alternate Jest configuration. Volto provides a way to do so using a file {file}`jest.config.js`, or pointing the test runner to a file of your choice, using the `RAZZLE_JEST_CONFIG` environment variable. -Because the Volto add-ons and Volto add-ons projects still use `yarn`, you must run the test command using `yarn` instead of `pnpm`. ```shell -RAZZLE_JEST_CONFIG=my-custom-jest-config.js yarn test +RAZZLE_JEST_CONFIG=my-custom-jest-config.js pnpm test ``` ```{note} @@ -85,7 +84,7 @@ Sometimes you need to enable different configurations and enable optional compon You can use the `ADDONS` environment variable to define them. ```bash -ADDONS=test-addon,test-addon2 yarn start +ADDONS=test-addon,test-addon2 pnpm start ``` See {doc}`../configuration/environmentvariables` for more information. diff --git a/docs/source/deploying/seamless-mode.md b/docs/source/deploying/seamless-mode.md index a678728a73..0173bdbaf3 100644 --- a/docs/source/deploying/seamless-mode.md +++ b/docs/source/deploying/seamless-mode.md @@ -48,13 +48,13 @@ All the environment variables that are configurable now work at runtime, not at Before Volto 13, you'd do: ```bash -RAZZLE_API_PATH=https://plone.org yarn build && yarn start:prod +RAZZLE_API_PATH=https://plone.org pnpm build && pnpm start:prod ``` From Volto 13 onwards, you can now do: ```bash -yarn build && RAZZLE_API_PATH=https://plone.org yarn start:prod +pnpm build && RAZZLE_API_PATH=https://plone.org pnpm start:prod ``` ```` @@ -130,7 +130,7 @@ server { error_log /dev/stdout; # [seamless mode] Recommended as default configuration, using seamless mode new plone.rest traversal - # yarn build && yarn start:prod + # pnpm build && pnpm start:prod location ~ /\+\+api\+\+($|/.*) { rewrite ^/\+\+api\+\+($|/.*) /VirtualHostBase/http/myservername.org/Plone/++api++/VirtualHostRoot/$1 break; proxy_pass http://backend; @@ -138,7 +138,7 @@ server { # Legacy deployment example, using RAZZLE_LEGACY_TRAVERSE Volto won't append ++api++ automatically # Recommended only if you can't upgrade to latest `plone.restapi` and `plone.rest` - # yarn build && RAZZLE_API_PATH=http://myservername.org/api RAZZLE_LEGACY_TRAVERSE=true yarn start:prod + # pnpm build && RAZZLE_API_PATH=http://myservername.org/api RAZZLE_LEGACY_TRAVERSE=true pnpm start:prod # location ~ /api($|/.*) { # rewrite ^/api($|/.*) /VirtualHostBase/http/myservername.org/Plone/VirtualHostRoot/_vh_api$1 break; # proxy_pass http://backend; diff --git a/docs/source/deploying/sentry.md b/docs/source/deploying/sentry.md index f92ba34ecc..4266ffd4b8 100644 --- a/docs/source/deploying/sentry.md +++ b/docs/source/deploying/sentry.md @@ -82,7 +82,7 @@ SENTRY_AUTH_TOKEN=foo \ SENTRY_ORG=my_organization \ SENTRY_PROJECT=new_project \ SENTRY_RELEASE=2.0.0 \ -SENTRY_DSN=https://boo@sentry.com/1 yarn build +SENTRY_DSN=https://boo@sentry.com/1 pnpm build node build/server.js ``` @@ -265,7 +265,7 @@ SENTRY_PROJECT=new_project SENTRY_RELEASE=2.0.0 SENTRY_DSN=https://boo@sentry.com/1 SENTRY_FRONTEND_CONFIG='{"tags":{"site":"www.test.com","app":"test_app"},"extras":{"logger":"javascript-frontend", "release":"1.4.1"}}' -SENTRY_BACKEND_CONFIG='{"tags":{"site":"www.test.com","app":"test_app"} yarn build +SENTRY_BACKEND_CONFIG='{"tags":{"site":"www.test.com","app":"test_app"} pnpm build node build/server.js ``` diff --git a/docs/source/deploying/simple.md b/docs/source/deploying/simple.md index 1215cb3cd5..31b3894a3e 100644 --- a/docs/source/deploying/simple.md +++ b/docs/source/deploying/simple.md @@ -12,7 +12,7 @@ myst: Volto is a Node.js application that runs on your machine/server and listens to a port. Once you are ready to deploy it, you should build it running: ```bash -$ yarn build +$ pnpm build ``` The Volto configuration determines the external URL Volto will be served, so if you just issue this command, the build will get that values and build an static bundle with that values (PORT=3000, API_PATH=http://localhost:8080/Plone). @@ -20,13 +20,13 @@ The Volto configuration determines the external URL Volto will be served, so if In order to make Volto work on a server under an specific DNS name, you must parametrize the build like: ```bash -$ PORT=volto_node_process_port RAZZLE_API_PATH=https://mywebsite.com/api yarn build +$ PORT=volto_node_process_port RAZZLE_API_PATH=https://mywebsite.com/api pnpm build ``` After the build, the bundle is created in `/build` folder, then in order to launch your application you can run: ```bash -$ yarn start:prod +$ pnpm start:prod ``` or ```bash diff --git a/docs/source/development/creating-project.md b/docs/source/development/creating-project.md index 5052533f81..f5ef93fefc 100644 --- a/docs/source/development/creating-project.md +++ b/docs/source/development/creating-project.md @@ -9,60 +9,15 @@ myst: # Create a Volto project without a backend -This document shows how to create a Volto project with the frontend only when you have your own existing backend, such as Plone {term}`Classic UI`, {term}`Nick`, or {term}`Guillotina`. +```{versionadded} Volto 18.0.0-alpha.43 +``` + +[Cookieplone](https://github.com/plone/cookieplone) is now the recommended way to develop Volto projects, using it as a boilerplate generator. +Even if you don't need the backend, you can create a Plone project, then use only the {file}`frontend` folder for your purposes. +As a bonus, it will contain the means for deploying your project. ```{seealso} To create a full Plone project with both frontend and backend, see {doc}`plone:install/create-project` instead. To contribute to Volto, see {doc}`../contributing/developing-core`. ``` - -For using Volto for a project—in other words, use Volto as a library—you should use Volto's project generator `@plone/generator-volto`. -It's a boilerplate project generator based on Yeoman that will provide you with the basic files and folder structure to bootstrap a Volto site. -In addition to bootstrapping stand-alone Volto projects, it can also bootstrap Volto add-ons. - -1. Open a terminal and execute: - - ```shell - npm install -g yo @plone/generator-volto - # Install the latest and stable release of Volto with the following command - yo @plone/volto - # or you can install the "canary" release, including any alpha release - yo @plone/volto --canary - # or you can install any specific released version - yo @plone/volto --volto=15.0.0 - # you can even pass a GitHub repo and specific branch - yo @plone/volto --volto=plone/volto#16.0.0 - # you can bootstrap with add-ons - yo @plone/volto --addon=volto-form-block - ``` - -2. Answer the questions when prompted, and provide the name of the new app (folder) to be created. - For the sake of this documentation, use `myvoltoproject` as the project name. - - ````{note} - You can run the generator with parameters to tailor your requirements. - - ```shell - yo @plone/volto --help - ``` - - ```{seealso} - [`@plone/generator-volto` `README.md`](https://github.com/plone/volto/blob/main/packages/generator-volto/README.md). - ``` - ```` - -3. Change your working directory to the newly created folder `myvoltoproject` (or whatever name you entered). - - ```shell - cd myvoltoproject - ``` - -4. `@plone/generator-volto` installed the dependencies for you. - Start the project. - - ```shell - yarn start - ``` - - This starts the development server, which compiles the project code, and when done, it serves the app at http://localhost:3000. diff --git a/docs/source/development/environment-variables.md b/docs/source/development/environment-variables.md index 6b8b79efc3..78dc734177 100644 --- a/docs/source/development/environment-variables.md +++ b/docs/source/development/environment-variables.md @@ -33,7 +33,7 @@ docker run -it --rm -p 55001:8080 -e SITE=Plone -e ADDONS='plone.restapi==8.20.0 ``` ```shell -RAZZLE_DEV_PROXY_API_PATH='http://localhost:55001/Plone' yarn start +RAZZLE_DEV_PROXY_API_PATH='http://localhost:55001/Plone' pnpm start ``` Let's say that you do have it in a customized site id: http://localhost:55001/myplonesite @@ -43,7 +43,7 @@ docker run -it --rm -p 55001:8080 -e SITE=myplonesite -e ADDONS='plone.restapi== ``` ```shell -RAZZLE_DEV_PROXY_API_PATH='http://localhost:55001/myplonesite' yarn start +RAZZLE_DEV_PROXY_API_PATH='http://localhost:55001/myplonesite' pnpm start ``` ### Debug an external site (provided you have access to it) @@ -55,7 +55,7 @@ This is an advanced feature, and needs understanding of what you are doing and w Let's say you want to debug a deployed site in production, but the build does not allow you to look deeper into the tracebacks. You could bootstrap a frontend in your machine, and point it to the production server, combining environment variables like: ``` -RAZZLE_DEV_PROXY_API_PATH=https://2021.ploneconf.org RAZZLE_PROXY_REWRITE_TARGET=https://2021.ploneconf.org/++api++ yarn start +RAZZLE_DEV_PROXY_API_PATH=https://2021.ploneconf.org RAZZLE_PROXY_REWRITE_TARGET=https://2021.ploneconf.org/++api++ pnpm start ``` This has the drawback that could be that the proxy does not work well with the proxied SSL connection. @@ -63,7 +63,7 @@ This has the drawback that could be that the proxy does not work well with the p If you have access (via tunnel) to the port of the deployed backend is even more easier: ``` -RAZZLE_DEV_PROXY_API_PATH=http://2021.ploneconf.org:8080/Plone yarn start +RAZZLE_DEV_PROXY_API_PATH=http://2021.ploneconf.org:8080/Plone pnpm start ``` This will use the internal proxy to access the backend, bypassing CORS. diff --git a/docs/source/development/i18n.md b/docs/source/development/i18n.md index 36bffe4dfc..f9f2f4dd03 100644 --- a/docs/source/development/i18n.md +++ b/docs/source/development/i18n.md @@ -145,7 +145,7 @@ Volto provides an i18n extraction script to get all translatable strings from yo You can invoke this script with the following command. ```sh -yarn i18n +pnpm i18n ``` This will generate the following output: @@ -181,7 +181,7 @@ defineMessages({ }); ``` -Then run `yarn i18n`. +Then run `pnpm i18n`. You will find the translation ready to override in your `locales` directory, such as `locales/de/LC_MESSAGES/volto.po`. ```text @@ -190,7 +190,7 @@ msgid "Back" msgstr "My overridden translation" ``` -After you set the override, then run `yarn i18n` again to create the `de.json` translation files. +After you set the override, then run `pnpm i18n` again to create the `de.json` translation files. Restart Volto to see the changes applied. diff --git a/docs/source/development/ie11compat.md b/docs/source/development/ie11compat.md deleted file mode 100644 index 16735ed7ae..0000000000 --- a/docs/source/development/ie11compat.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -myst: - html_meta: - "description": "Legacy browser support with polyfills, babel-env, and pre- and post-transpiling" - "property=og:description": "Legacy browser support with polyfills, babel-env, and pre- and post-transpiling" - "property=og:title": "Legacy Browser Support (IE11 compatibility)" - "keywords": "Volto, Plone, frontend, React, IE11 compatibility, polyfills, legacy browser support" ---- - -# Legacy Browser Support (IE11 compatibility) - -There are some caveats if we still want to target IE11 as supported browser. - -```{important} -This documentation is orientative. Volto does NOT support legacy or vendor deprecated browsers (as in IE11). -``` - -## Version pinning - -These package versions should be pinned to this especific versions, unless -their code or dependencies have some es6 only compatible, because their -maintainers mainly target the Node.js world. - -* "query-string": "4.1.0" -* "superagent": "3.8.2" - -## Polyfills - -Then in the project that should target it, these changes are required: - -add as a dependency `@babel/polyfill`. - - yarn add @babel/polyfill - -and in `src/client.jsx`: - -```js -import '@babel/polyfill'; -``` - -```{seealso} -See https://babeljs.io/docs/babel-polyfill for more updated information -``` - -## babel-env - -Razzle supports `@babel/preset-env`, that supports including `browserlist` in -`package.json`. So you can add this to `package.json`: - -```json - "browserslist": [ - "last 2 version", - "IE 11" - ], -``` - -This supports the query specific DSL for `browserlist` targeting the browsers -that you need to add. - -## Pre-transpiling - -Some packages in `node_modules` are ES6 only, for some older browsers, you might want to add a pre (or post) transpiling. There's a script `pre-build-transpiling.js` (Volto root folder) that might help you with it. Also this command line might help: - - ./node_modules/.bin/babel --presets="@babel/env" XXX --out-dir XXX diff --git a/docs/source/development/index.md b/docs/source/development/index.md index 90c28191f8..a1e5952999 100644 --- a/docs/source/development/index.md +++ b/docs/source/development/index.md @@ -36,5 +36,4 @@ pluggables widget how-to-restrict-blocks color-picker-widget -ie11compat ``` diff --git a/docs/source/development/lazyload.md b/docs/source/development/lazyload.md index 668a7190b8..7a04d373cf 100644 --- a/docs/source/development/lazyload.md +++ b/docs/source/development/lazyload.md @@ -36,7 +36,7 @@ You can find the complete `@loadable/component` documentation here: https://load You can check the code splitting state by using the included bundle analyzer: ```shell -yarn analyze +pnpm --filter=volto analyze ``` A browser will open with the bundle inspector. diff --git a/packages/volto/news/6433.documentation b/packages/volto/news/6433.documentation new file mode 100644 index 0000000000..82111de185 --- /dev/null +++ b/packages/volto/news/6433.documentation @@ -0,0 +1 @@ +Replace `yarn` with `pnpm` wherever necessary. @sneridagh From f576c13850e36ca4faf0ae54a6c86b21914658bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Sat, 26 Oct 2024 13:52:20 +0200 Subject: [PATCH 38/50] [Next.js] Better Vercel deployment (#6441) Co-authored-by: Steve Piercy --- apps/nextjs/README.md | 95 +++++++++++++++++++++++------------ apps/nextjs/next.config.mjs | 27 ++++++---- apps/nextjs/src/app/config.ts | 21 ++++++-- 3 files changed, 97 insertions(+), 46 deletions(-) diff --git a/apps/nextjs/README.md b/apps/nextjs/README.md index c04dca61ad..4660a9939a 100644 --- a/apps/nextjs/README.md +++ b/apps/nextjs/README.md @@ -1,6 +1,7 @@ # Plone on Next.js -This is a proof of concept of a [Next.js](https://nextjs.org) app, using the app router and the `@plone/client` and `@plone/components` library. This is intended to serve as both a playground for the development of both packages and as demo of Plone using Next.js. +This is a proof of concept of a [Next.js](https://nextjs.org) app, using the app router and the `@plone/client` and `@plone/components` library. +This is intended to serve as both a playground for the development of both packages and as a demo of Plone using Next.js. > [!WARNING] > This package or app is experimental. @@ -9,7 +10,7 @@ This is a proof of concept of a [Next.js](https://nextjs.org) app, using the app ## Development -To start, from the root of the monorepo: +To start, from the root of the monorepo, issue the following commands in a shell session. ```shell pnpm install @@ -25,65 +26,93 @@ make backend-docker-start ## Deployment at Vercel - -We introduce an environment variable `API_SERVER_URL`. -You need to create this environment variable in the Vercel deployment's control panel, specifying the URL where your backend API server is deployed, and the route where the API is located, as shown. +For deploying your app at Vercel, you need to create the environment variable `API_SERVER_URL` in Vercel's deployment control panel, specifying the URL where your backend API server is deployed, and the route where the API is located, as shown. ```shell API_SERVER_URL=https://my-server-DNS-name.tld/api ``` +For production deployments, you will need to force the deployment URL, otherwise you will have issues with CORS. +To do so, set another environment variable for the production URL, `NEXT_PRODUCTION_URL`. +This URL needs to be scheme-less, without `http` or `https`, and consist only of the domain name: + +```shell +NEXT_PRODUCTION_URL=my-nextjs-production-DNS-name.tld +``` + ### Application rewrite configuragtion -To avoid issues with CORS and maintain the server counterpart private, our Next.js app should have a rewrite, configured as follows: +To avoid issues with CORS and maintain the server counterpart private, your Next.js app should have a rewrite, configured as follows: ```jsx const nextConfig = { // Rewrite to the backend to avoid CORS async rewrites() { - const apiServerURL = - process.env.API_SERVER_URL || - 'http://localhost:8080/Plone/%2B%2Bapi%2B%2B'; + let apiServerURL, vhmRewriteRule; + if ( + process.env.API_SERVER_URL && + (process.env.NEXT_PRODUCTION_URL || process.env.NEXT_PUBLIC_VERCEL_URL) + ) { + // We are in Vercel + apiServerURL = process.env.API_SERVER_URL; + vhmRewriteRule = `/VirtualHostBase/https/${ + process.env.NEXT_PRODUCTION_URL + ? // We are in the production deployment + process.env.NEXT_PRODUCTION_URL + : // We are in the preview deployment + process.env.NEXT_PUBLIC_VERCEL_URL + }%3A443/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot`; + } else if (process.env.API_SERVER_URL) { + // We are in development + apiServerURL = process.env.API_SERVER_URL; + vhmRewriteRule = + '/VirtualHostBase/http/localhost%3A3000/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot'; + } else { + // We are in development and the API_SERVER_URL is not set, so we use a local backend + apiServerURL = 'http://localhost:8080'; + vhmRewriteRule = + '/VirtualHostBase/http/localhost%3A3000/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot'; + } return [ { source: '/\\+\\+api\\+\\+/:slug*', destination: - `${apiServerURL}/VirtualHostBase/https/${process.env.NEXT_PUBLIC_VERCEL_URL}%3A443/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot/:slug*`, + `${apiServerURL}${vhmRewriteRule}/:slug*`, }, ]; }, }; ``` -Plone Client uses the `++api++` prefix as default, so we should create a redirect in our app pointing to the API server, but using Plone's traditional virtual host management configuration. +Plone Client uses the `++api++` prefix as default, so you should create a redirect in your app pointing to the API server, but using Plone's traditional virtual host management configuration. -Next.js rewrites are picky on the `destination` field, because its rewrite library does not support URLs with regular expression operators. -Therefore, we can't use the usual `++api++` route for the rewrite. -This will allow us to infer the current server URL—even in deployed branches and pull requests—without touching the rewrite rules. -We will fallback to configure a `api` route in our reverse proxy of choice. +Next.js rewrites are picky with the `destination` field, because its rewrite library does not support URLs with regular expression operators. +Therefore, you can't use the usual `++api++` route for the rewrite. +This will allow you to infer the current server URL—even in deployed branches and pull requests—without touching the rewrite rules. +You will fallback to configure a `api` route in your reverse proxy of choice. ### Plone backend You have to deploy the Plone backend elsewhere, since Vercel is serverless oriented. -We need to set up the rewrite rule in Next.js's `rewrite` feature as shown in the previous section. +You need to set up the rewrite rule in Next.js's `rewrite` feature as shown in the previous section. -We will fallback to configure an `api` route in our reverse proxy of choice. +You will fallback to configure an `api` route in your reverse proxy of choice. -For example, if we use `traefik`: +For example, if you use `traefik`: ```yaml - ## VHM rewrite /api/ (Plone Next.js) - - "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.regex=^/api($$|/.*)" - ## We remove the incoming /api and just use the path - - "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.replacement=$$1" - - ## /api router - - traefik.http.routers.rt-backend-api.rule=Host(`my_server_DNS_name`) && PathPrefix(`/api`) - - traefik.http.routers.rt-backend-api.entrypoints=https - - traefik.http.routers.rt-backend-api.tls=true - - traefik.http.routers.rt-backend-api.service=svc-backend - - traefik.http.routers.rt-backend-api.middlewares=gzip,mw-backend-vhm-api +## VHM rewrite /api/ (Plone Next.js) +- "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.regex=^/api($$|/.*)" +## We remove the incoming /api and just use the path +- "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.replacement=$$1" + +## /api router +- traefik.http.routers.rt-backend-api.rule=Host(`my_server_DNS_name`) && PathPrefix(`/api`) +- traefik.http.routers.rt-backend-api.entrypoints=https +- traefik.http.routers.rt-backend-api.tls=true +- traefik.http.routers.rt-backend-api.service=svc-backend +- traefik.http.routers.rt-backend-api.middlewares=gzip,mw-backend-vhm-api ``` ## About this app @@ -100,16 +129,18 @@ pnpm dev Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. +You can start editing the page by modifying `app/page.tsx`. +The page auto-updates as you edit the file. ## Learn More To learn more about Next.js, take a look at the following resources: -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and its API. - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/). +Your feedback and contributions are welcome! ## Deploy on Vercel diff --git a/apps/nextjs/next.config.mjs b/apps/nextjs/next.config.mjs index f214d4f86b..2bc72a90f0 100644 --- a/apps/nextjs/next.config.mjs +++ b/apps/nextjs/next.config.mjs @@ -1,4 +1,4 @@ -import path from 'path'; +// import path from 'path'; /** @type {import('next').NextConfig} */ const nextConfig = { @@ -21,17 +21,26 @@ const nextConfig = { // Rewrite to the backend to avoid CORS async rewrites() { let apiServerURL, vhmRewriteRule; - if (process.env.API_SERVER_URL) { - apiServerURL = process.env.API_SERVER_URL; - vhmRewriteRule = `/VirtualHostBase/https/${process.env.NEXT_PUBLIC_VERCEL_URL}%3A443/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot`; - } else if ( + if ( process.env.API_SERVER_URL && - !process.env.NEXT_PUBLIC_VERCEL_URL + (process.env.NEXT_PRODUCTION_URL || process.env.NEXT_PUBLIC_VERCEL_URL) ) { - throw new Error( - 'API_SERVER_URL set and NEXT_PUBLIC_VERCEL_URL not present.', - ); + // We are in Vercel + apiServerURL = process.env.API_SERVER_URL; + vhmRewriteRule = `/VirtualHostBase/https/${ + process.env.NEXT_PRODUCTION_URL + ? // We are in the production deployment + process.env.NEXT_PRODUCTION_URL + : // We are in the preview deployment + process.env.NEXT_PUBLIC_VERCEL_URL + }%3A443/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot`; + } else if (process.env.API_SERVER_URL) { + // We are in development + apiServerURL = process.env.API_SERVER_URL; + vhmRewriteRule = + '/VirtualHostBase/http/localhost%3A3000/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot'; } else { + // We are in development and the API_SERVER_URL is not set, so we use a local backend apiServerURL = 'http://localhost:8080'; vhmRewriteRule = '/VirtualHostBase/http/localhost%3A3000/Plone/%2B%2Bapi%2B%2B/VirtualHostRoot'; diff --git a/apps/nextjs/src/app/config.ts b/apps/nextjs/src/app/config.ts index 2bbdde6a9a..8d0b440630 100644 --- a/apps/nextjs/src/app/config.ts +++ b/apps/nextjs/src/app/config.ts @@ -1,15 +1,26 @@ import config from '@plone/registry'; +import type { ConfigType } from '@plone/registry'; import { slate } from '@plone/blocks'; import { blocksConfig } from '@plone/blocks'; -const settings = { - apiPath: process.env.NEXT_PUBLIC_VERCEL_URL - ? // Vercel does not prepend the schema to the NEXT_PUBLIC_VERCEL_URL automatic env var - `https://${process.env.NEXT_PUBLIC_VERCEL_URL}` - : 'http://localhost:3000', +const settings: Partial = { slate, }; +if (process.env.NEXT_PUBLIC_VERCEL_URL) { + // This app is at Vercel + if (process.env.NEXT_PRODUCTION_URL) { + // This app is in a production deployment, so set the apiPath to the production URL + settings.apiPath = process.env.NEXT_PRODUCTION_URL; + } else { + // This app is in a preview deployment, so set the apiPath to the Vercel URL + settings.apiPath = `https://${process.env.NEXT_PUBLIC_VERCEL_URL}`; + } +} else { + // This app is in development, so set the apiPath to localhost + settings.apiPath = 'http://localhost:3000/'; +} + // @ts-expect-error Improve typings config.set('settings', settings); From 83e2a6ab73d25cdb77a01f97bd11d80952f88eed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Sun, 27 Oct 2024 15:37:06 +0100 Subject: [PATCH 39/50] `@plone/registry` as ESM module, move to TS, complete documentation (#6399) Co-authored-by: Steve Piercy Co-authored-by: David Glick --- .eslintignore | 2 + .github/workflows/acceptance.yml | 3 + .github/workflows/docs-rtd-pr-preview.yml | 1 + .github/workflows/readme-link-check.yml | 2 +- .prettierignore | 1 + apps/remix/tsconfig.json | 2 - apps/remix/vite.config.ts | 2 + docs/source/upgrade-guide/index.md | 57 ++ package.json | 3 + .../generators/app/templates/.eslintrc.js | 10 +- .../app/templates/.storybook/main.js | 4 +- packages/generator-volto/news/6399.breaking | 2 + .../registry/{.eslintrc.js => .eslintrc.cjs} | 8 +- packages/registry/.gitignore | 7 +- packages/registry/.readthedocs.yaml | 34 + packages/registry/Makefile | 90 ++ packages/registry/README.md | 196 +--- .../__tests__/addon-registry-app.test.js | 18 + .../registry/__tests__/addon-registry.test.js | 366 ++++++++ .../__tests__/create-addons-loader.test.js | 164 ++++ .../@plone/slots/components/Logo/Logo.svg | 1 + .../node_modules/@plone/slots/index.js | 1 + .../node_modules/@plone/slots/package.json | 4 + .../@plone/slots/components/Logo/Logo.svg | 1 + .../test-app/node_modules/my-addon/index.js | 1 + .../node_modules/my-addon/package.json | 4 + .../__tests__/fixtures/test-app/package.json | 3 + .../fixtures/test-app/registry.config.js | 3 + .../addons/my-volto-config-addon/package.json | 10 + .../my-volto-config-addon/src/testaddon.js} | 0 .../addons/non-volto-addon-lib/index.js | 1 + .../addons/non-volto-addon-lib/package.json | 5 + .../addons/test-addon/package.json | 10 + .../test-released-source-addon/index.js | 1 + .../src/custom-addons/volto/server.jsx | 1 + .../addons/test-addon/src/testaddon.js | 0 .../addons/test-released-dummy/index.js | 1 + .../addons/test-released-dummy/package.json | 8 + .../fixtures/test-volto-project/jsconfig.json | 11 + .../@plone/volto/src/LanguageSwitcher.jsx | 1 + .../@plone/volto/src/TSComponent.tsx | 1 + .../node_modules/@plone/volto/src/client.js | 1 + .../node_modules/@plone/volto/src/routes.jsx | 1 + .../node_modules/@plone/volto/src/server.jsx | 0 .../index.js | 1 + .../package.json | 11 + .../node_modules/test-released-addon/index.js | 1 + .../test-released-addon/package.json | 8 + .../node_modules/test-released-dummy/index.js | 2 + .../test-released-dummy/package.json | 5 + .../test-released-source-addon/package.json | 5 + .../razzle.extend.js | 0 .../src/customizations/@root/marker.js | 0 .../src/customizations/LanguageSwitcher.js | 1 + .../src/customizations/TSComponent.jsx | 1 + .../src/customizations/client.js | 1 + .../src/customizations/routes.tsx | 1 + .../test-released-source-addon/src/index.js | 0 .../test-released-unmentioned/index.js | 2 + .../test-released-unmentioned/package.json | 5 + .../test-released-via-addons-env-var/index.js | 2 + .../package.json | 4 + .../fixtures/test-volto-project/package.json | 12 + .../package.json | 4 + .../src/index.js | 1 + .../src/custom-addons/test-addon/testaddon.js | 1 + .../src/custom-addons/volto/client.js | 1 + .../src/customizations/LanguageSwitcher.js | 1 + .../src/customizations/TSComponent.jsx | 0 .../src/customizations/client.js | 1 + .../src/customizations/routes.tsx | 0 .../src/customizations/server.jsx | 1 + .../fixtures/test-volto-project/src/marker.js | 0 .../test-volto-project/volto.config.envvar.js | 3 + .../test-volto-project/volto.config.js | 3 + .../__tests__/fixtures/volto-addon1.js | 14 + .../__tests__/fixtures/volto-addon2.js | 29 + .../__tests__/fixtures/volto-addon3.js | 41 + .../docs/_static/Plone_logo_square.png | Bin 0 -> 30912 bytes packages/registry/docs/_static/favicon.ico | Bin 0 -> 5430 bytes packages/registry/docs/_static/logo.svg | 48 + packages/registry/docs/_static/print.css | 3 + .../docs/conceptual-guides/add-on-registry.md | 38 + .../conceptual-guides/component-registry.md | 20 + .../configuration-registry.md | 78 ++ .../conceptual-guides/utility-registry.md | 14 + packages/registry/docs/conf.py | 297 ++++++ .../docs/how-to-guides/access-registry.md | 20 + .../how-to-guides/instantiate-registry.md | 56 ++ .../docs/how-to-guides/register-an-add-on.md | 94 ++ .../register-and-retrieve-components.md | 114 +++ .../register-and-retrieve-utilities.md | 113 +++ .../docs/how-to-guides/shadow-a-component.md | 61 ++ packages/registry/docs/index.md | 43 + packages/registry/docs/robots.txt | 8 + packages/registry/news/6399.breaking | 6 + packages/registry/news/6399.feature | 1 + packages/registry/package.json | 45 +- .../addon-registry.ts} | 375 +++++--- .../create-addons-loader.ts} | 52 +- .../create-theme-loader.ts} | 54 +- packages/registry/src/index.ts | 35 +- packages/registry/tsconfig.json | 2 +- packages/registry/tsconfig.node.json | 24 + packages/registry/vite-plugin.d.ts | 5 + packages/registry/vite-plugin.js | 60 ++ packages/scripts/i18n.cjs | 23 +- packages/scripts/news/6399.feature | 1 + packages/volto/.eslintrc | 1 - packages/volto/.storybook/main.js | 4 +- .../__tests__/addon-registry-project.test.js | 52 +- .../__tests__/addon-registry-volto.test.js | 14 +- .../__tests__/create-addons-loader.test.js | 74 +- .../webpack-relative-resolver.test.js | 4 +- packages/volto/news/6399.internal | 1 + packages/volto/package.json | 6 +- packages/volto/razzle.config.js | 13 +- .../volto/src/express-middleware/static.js | 4 +- patches/jest-resolve@26.6.2.patch | Bin 0 -> 7680 bytes pnpm-lock.yaml | 885 ++++++++++++++++-- 120 files changed, 3400 insertions(+), 552 deletions(-) create mode 100644 packages/generator-volto/news/6399.breaking rename packages/registry/{.eslintrc.js => .eslintrc.cjs} (88%) create mode 100644 packages/registry/.readthedocs.yaml create mode 100644 packages/registry/Makefile create mode 100644 packages/registry/__tests__/addon-registry-app.test.js create mode 100644 packages/registry/__tests__/addon-registry.test.js create mode 100644 packages/registry/__tests__/create-addons-loader.test.js create mode 100644 packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/components/Logo/Logo.svg create mode 100644 packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/index.js create mode 100644 packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/package.json create mode 100644 packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/customizations/@plone/slots/components/Logo/Logo.svg create mode 100644 packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/index.js create mode 100644 packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/package.json create mode 100644 packages/registry/__tests__/fixtures/test-app/package.json create mode 100644 packages/registry/__tests__/fixtures/test-app/registry.config.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/my-volto-config-addon/package.json rename packages/registry/{pnpm-lock.yaml => __tests__/fixtures/test-volto-project/addons/my-volto-config-addon/src/testaddon.js} (100%) create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/test-released-source-addon/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/volto/server.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/testaddon.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/jsconfig.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/LanguageSwitcher.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/TSComponent.tsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/client.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/routes.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/server.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/razzle.extend.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/@root/marker.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/client.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/routes.tsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/package.json create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/src/index.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/test-addon/testaddon.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/volto/client.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/customizations/LanguageSwitcher.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/customizations/TSComponent.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/customizations/client.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/customizations/routes.tsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/customizations/server.jsx create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/marker.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/volto.config.envvar.js create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/volto.config.js create mode 100644 packages/registry/__tests__/fixtures/volto-addon1.js create mode 100644 packages/registry/__tests__/fixtures/volto-addon2.js create mode 100644 packages/registry/__tests__/fixtures/volto-addon3.js create mode 100644 packages/registry/docs/_static/Plone_logo_square.png create mode 100644 packages/registry/docs/_static/favicon.ico create mode 100644 packages/registry/docs/_static/logo.svg create mode 100644 packages/registry/docs/_static/print.css create mode 100644 packages/registry/docs/conceptual-guides/add-on-registry.md create mode 100644 packages/registry/docs/conceptual-guides/component-registry.md create mode 100644 packages/registry/docs/conceptual-guides/configuration-registry.md create mode 100644 packages/registry/docs/conceptual-guides/utility-registry.md create mode 100644 packages/registry/docs/conf.py create mode 100644 packages/registry/docs/how-to-guides/access-registry.md create mode 100644 packages/registry/docs/how-to-guides/instantiate-registry.md create mode 100644 packages/registry/docs/how-to-guides/register-an-add-on.md create mode 100644 packages/registry/docs/how-to-guides/register-and-retrieve-components.md create mode 100644 packages/registry/docs/how-to-guides/register-and-retrieve-utilities.md create mode 100644 packages/registry/docs/how-to-guides/shadow-a-component.md create mode 100644 packages/registry/docs/index.md create mode 100644 packages/registry/docs/robots.txt create mode 100644 packages/registry/news/6399.breaking create mode 100644 packages/registry/news/6399.feature rename packages/registry/src/{addon-registry.js => addon-registry/addon-registry.ts} (65%) rename packages/registry/src/{create-addons-loader.js => addon-registry/create-addons-loader.ts} (66%) rename packages/registry/src/{create-theme-addons-loader.js => addon-registry/create-theme-loader.ts} (50%) create mode 100644 packages/registry/tsconfig.node.json create mode 100644 packages/registry/vite-plugin.d.ts create mode 100644 packages/registry/vite-plugin.js create mode 100644 packages/scripts/news/6399.feature create mode 100644 packages/volto/news/6399.internal create mode 100644 patches/jest-resolve@26.6.2.patch diff --git a/.eslintignore b/.eslintignore index 7df5c928c1..77fb2df91b 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,3 +4,5 @@ packages/volto packages/volto-guillotina !.* dist +packages/registry/lib +packages/registry/docs diff --git a/.github/workflows/acceptance.yml b/.github/workflows/acceptance.yml index a52a7502a3..82480849c7 100644 --- a/.github/workflows/acceptance.yml +++ b/.github/workflows/acceptance.yml @@ -521,6 +521,9 @@ jobs: - name: Install yalc run: npm -g install yalc + - name: Build dependencies + run: make build-deps + - name: Install a yalc'ed version of the current Volto in the project - publish run: | yalc publish packages/types diff --git a/.github/workflows/docs-rtd-pr-preview.yml b/.github/workflows/docs-rtd-pr-preview.yml index 83d7e72494..a123d8ef75 100644 --- a/.github/workflows/docs-rtd-pr-preview.yml +++ b/.github/workflows/docs-rtd-pr-preview.yml @@ -10,6 +10,7 @@ on: - "docs/source/**" - .readthedocs.yaml - requirements-docs.txt + - "packages/registry/docs/**" permissions: pull-requests: write diff --git a/.github/workflows/readme-link-check.yml b/.github/workflows/readme-link-check.yml index 7f53b65824..42c96e1455 100644 --- a/.github/workflows/readme-link-check.yml +++ b/.github/workflows/readme-link-check.yml @@ -20,4 +20,4 @@ jobs: - name: Check links in README.md with awesome_bot run: | gem install awesome_bot - awesome_bot --request-delay 1 --allow-dupe --white-list http://localhost:8080/Plone,http://localhost:3000,https://github.com/kitconcept/volto-blocks-grid.git,https://my-server-DNS-name.tld/api --files PACKAGES.md,README.md,packages/blocks/README.md,packages/client/README.md,packages/components/README.md,packages/generator-volto/README.md,packages/registry/README.md,packages/scripts/README.md,packages/tsconfig/README.md,packages/types/README.md,packages/volto-slate/README.md,apps/nextjs/README.md,apps/remix/README.md,apps/vite-ssr/README.md + awesome_bot --request-delay 1 --allow-dupe --white-list http://localhost:8080/Plone,http://localhost:8080,http://localhost:3000,https://github.com/kitconcept/volto-blocks-grid.git,https://my-server-DNS-name.tld/api --files PACKAGES.md,README.md,packages/blocks/README.md,packages/client/README.md,packages/components/README.md,packages/generator-volto/README.md,packages/registry/README.md,packages/scripts/README.md,packages/tsconfig/README.md,packages/types/README.md,packages/volto-slate/README.md,apps/nextjs/README.md,apps/remix/README.md,apps/vite-ssr/README.md diff --git a/.prettierignore b/.prettierignore index cf39cfcd94..1749ca9b36 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,6 +5,7 @@ styles/rules/* node_modules packages/volto/types/* +packages/registry/docs/* storybook-static apps/vite-ssr/src/routeTree.gen.ts apps/vite/src/routeTree.gen.ts diff --git a/apps/remix/tsconfig.json b/apps/remix/tsconfig.json index 9d87dd378f..42f049fa4a 100644 --- a/apps/remix/tsconfig.json +++ b/apps/remix/tsconfig.json @@ -25,8 +25,6 @@ "paths": { "~/*": ["./app/*"] }, - - // Vite takes care of building everything, not tsc. "noEmit": true } } diff --git a/apps/remix/vite.config.ts b/apps/remix/vite.config.ts index 1a43ce37db..03bfa30a99 100644 --- a/apps/remix/vite.config.ts +++ b/apps/remix/vite.config.ts @@ -1,6 +1,7 @@ import { vitePlugin as remix } from '@remix-run/dev'; import { defineConfig } from 'vite'; import tsconfigPaths from 'vite-tsconfig-paths'; +import { PloneRegistryVitePlugin } from '@plone/registry/vite-plugin'; export default defineConfig({ plugins: [ @@ -12,6 +13,7 @@ export default defineConfig({ }, }), tsconfigPaths(), + PloneRegistryVitePlugin(), ], server: { port: 3000, diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index 60de994f58..b9b67fcf4d 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -522,6 +522,63 @@ The `react/jsx-key` rule has been enabled in ESlint for catching missing `key` i You might catch some violations in your project or add-on code after running ESlint. Adding the missing `key` property whenever the violation is reported will fix it. +### `@plone/registry` moved to ESM + +The `@plone/registry` package has been moved to ESM. +The add-on registry scripts have also been refactored to TypeScript. +For maximum compatibility with CommonJS builds, the default exports have been moved to named exports. +The modules affected are now built, and the import paths have changed, too. +These changes force some import path changes that you should patch in your Plone project or add-on boilerplates. + +```{note} +As always, when something changes in the boilerplate, you may regenerate one from Cookieplone and move your code into it, instead of fiddling with it. +``` + +For example, in your project's {file}`.eslintrc.js`: + +```diff + const fs = require('fs'); + const projectRootPath = __dirname; +-const AddonConfigurationRegistry = require('@plone/registry/src/addon-registry'); ++const { AddonRegistry } = require('@plone/registry/addon-registry'); + + let voltoPath = './node_modules/@plone/volto'; + +@@ -17,15 +17,15 @@ if (configFile) { + voltoPath = `./${jsConfig.baseUrl}/${pathsConfig['@plone/volto'][0]}`; + } + +-const reg = new AddonConfigurationRegistry(__dirname); ++const { registry } = AddonRegistry.init(__dirname); + + // Extends ESlint configuration for adding the aliases to `src` directories in Volto addons +-const addonAliases = Object.keys(reg.packages).map((o) => [ ++const addonAliases = Object.keys(registry.packages).map((o) => [ + o, +- reg.packages[o].modulePath, ++ registry.packages[o].modulePath, + ]); + +-const addonExtenders = reg.getEslintExtenders().map((m) => require(m)); ++const addonExtenders = registry.getEslintExtenders().map((m) => require(m)); +``` + +Also in the Storybook configuration {file}`.storybook/main.js`. + +```diff +- const AddonConfigurationRegistry = require('@plone/registry/src/addon-registry'); ++ const { AddonRegistry } = require('@plone/registry/addon-registry'); + +- const registry = new AddonConfigurationRegistry(projectRootPath); ++ const { registry } = AddonRegistry.init(projectRootPath); +``` + +```{versionadded} Volto 18.0.0-alpha.47 +``` + +```{versionadded} @plone/registry 3.0.0-alpha.0 +``` + ### Deprecation notices for Volto 18 #### `@plone/generator-volto` diff --git a/package.json b/package.json index 0b7d97e4de..603b737d9a 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,9 @@ "overrides": { "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", "react-refresh": "0.14.0" + }, + "patchedDependencies": { + "jest-resolve@26.6.2": "patches/jest-resolve@26.6.2.patch" } } } diff --git a/packages/generator-volto/generators/app/templates/.eslintrc.js b/packages/generator-volto/generators/app/templates/.eslintrc.js index 6148e2e62f..a5aaf045b1 100644 --- a/packages/generator-volto/generators/app/templates/.eslintrc.js +++ b/packages/generator-volto/generators/app/templates/.eslintrc.js @@ -1,6 +1,6 @@ const fs = require('fs'); const projectRootPath = __dirname; -const AddonConfigurationRegistry = require('@plone/registry/src/addon-registry'); +const { AddonRegistry } = require('@plone/registry/addon-registry'); let voltoPath = './node_modules/@plone/volto'; @@ -17,15 +17,15 @@ if (configFile) { voltoPath = `./${jsConfig.baseUrl}/${pathsConfig['@plone/volto'][0]}`; } -const reg = new AddonConfigurationRegistry(__dirname); +const { registry } = AddonRegistry.init(__dirname); // Extends ESlint configuration for adding the aliases to `src` directories in Volto addons -const addonAliases = Object.keys(reg.packages).map((o) => [ +const addonAliases = Object.keys(registry.packages).map((o) => [ o, - reg.packages[o].modulePath, + registry.packages[o].modulePath, ]); -const addonExtenders = reg.getEslintExtenders().map((m) => require(m)); +const addonExtenders = registry.getEslintExtenders().map((m) => require(m)); const defaultConfig = { extends: `${voltoPath}/.eslintrc`, diff --git a/packages/generator-volto/generators/app/templates/.storybook/main.js b/packages/generator-volto/generators/app/templates/.storybook/main.js index aa094cb6d7..da6c799e56 100644 --- a/packages/generator-volto/generators/app/templates/.storybook/main.js +++ b/packages/generator-volto/generators/app/templates/.storybook/main.js @@ -104,9 +104,9 @@ module.exports = { [], defaultRazzleOptions, ); - const AddonConfigurationRegistry = require('@plone/registry/src/addon-registry'); + const { AddonRegistry } = require('@plone/registry/addon-registry'); - const registry = new AddonConfigurationRegistry(projectRootPath); + const { registry } = AddonRegistry.init(projectRootPath); config = lessPlugin({ registry }).modifyWebpackConfig({ env: { target: 'web', dev: 'dev' }, diff --git a/packages/generator-volto/news/6399.breaking b/packages/generator-volto/news/6399.breaking new file mode 100644 index 0000000000..2b0695d18f --- /dev/null +++ b/packages/generator-volto/news/6399.breaking @@ -0,0 +1,2 @@ +Breaking changes in `.eslintrc.js` and `.storybook/main.js` because of #6399. @sneridagh +Please see the [Upgrade Guide](https://6.docs.plone.org/volto/upgrade-guide/index.html). diff --git a/packages/registry/.eslintrc.js b/packages/registry/.eslintrc.cjs similarity index 88% rename from packages/registry/.eslintrc.js rename to packages/registry/.eslintrc.cjs index b60637a973..8614b4cd25 100644 --- a/packages/registry/.eslintrc.js +++ b/packages/registry/.eslintrc.cjs @@ -16,6 +16,8 @@ module.exports = { // Base config extends: ['eslint:recommended'], + ignorePatterns: ['docs/_static/searchtools.js'], + overrides: [ // React { @@ -61,7 +63,11 @@ module.exports = { // Node { - files: ['.eslintrc.js', 'src/*.js'], + files: [ + '.eslintrc.cjs', + 'src/addon-registry/**/*.{js,ts}', + '__tests__/**/*.{js,ts}', + ], env: { node: true, es6: true, diff --git a/packages/registry/.gitignore b/packages/registry/.gitignore index d32327c9cd..2c29928dd0 100644 --- a/packages/registry/.gitignore +++ b/packages/registry/.gitignore @@ -1,6 +1,7 @@ .parcel-cache/ dist +/bin +/lib +/include -# yarn 3 -.pnp.* -.yarn/* +docs/_build/ diff --git a/packages/registry/.readthedocs.yaml b/packages/registry/.readthedocs.yaml new file mode 100644 index 0000000000..b1f7970727 --- /dev/null +++ b/packages/registry/.readthedocs.yaml @@ -0,0 +1,34 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the OS, Python version and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.12" + # You can also specify other tool versions: + # nodejs: "19" + # rust: "1.64" + # golang: "1.19" + commands: + - cd ./packages/registry && make docs-rtd-registry + +# Build documentation in the "docs/" directory with Sphinx +#sphinx: +# configuration: packages/registry/docs/conf.py + +# Optionally build your docs in additional formats such as PDF and ePub +# formats: +# - pdf +# - epub + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +#python: +# install: +# - requirements: requirements-docs.txt diff --git a/packages/registry/Makefile b/packages/registry/Makefile new file mode 100644 index 0000000000..d0e9c89f6d --- /dev/null +++ b/packages/registry/Makefile @@ -0,0 +1,90 @@ +### 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 + +# Sphinx variables +# You can set these variables from the command line. +SPHINXOPTS ?= +VALEOPTS ?= +# Internal variables. +SPHINXBUILD = "$(realpath bin/sphinx-build)" +SPHINXAUTOBUILD = "$(realpath bin/sphinx-autobuild)" +DOCS_DIR = ./docs/ +BUILDDIR = ./_build/ +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(SPHINXOPTS) . +VALEFILES := $(shell find $(DOCS_DIR) -type f -name "*.md" -print) + +# 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` + +## Docs + +bin/python: ## Create a Python virtual environment with the latest pip, and install documentation requirements + python3 -m venv . || virtualenv --clear --python=python3 . + bin/python -m pip install --upgrade pip + @echo "Python environment created." + bin/pip install -r ../../requirements-docs.txt + @echo "Requirements installed." + +.PHONY: docs-clean +docs-clean: ## Clean current and legacy docs build directories, and Python virtual environment + rm -rf bin include lib + rm -rf docs/_build + cd $(DOCS_DIR) && rm -rf $(BUILDDIR)/ + +.PHONY: docs-html +docs-html: bin/python ## Build html + cd $(DOCS_DIR) && $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +.PHONY: docs-livehtml +docs-livehtml: bin/python ## Rebuild Sphinx documentation on changes, with live-reload in the browser + cd "$(DOCS_DIR)" && ${SPHINXAUTOBUILD} \ + --ignore "*.swp" \ + -b html . "$(BUILDDIR)/html" $(SPHINXOPTS) + +.PHONY: docs-linkcheck +docs-linkcheck: bin/python ## Run linkcheck + cd $(DOCS_DIR) && $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/ ." + +.PHONY: docs-linkcheckbroken +docs-linkcheckbroken: bin/python ## Run linkcheck and show only broken links + cd $(DOCS_DIR) && $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck | GREP_COLORS='0;31' grep -wi "broken\|redirect" --color=always | GREP_COLORS='0;31' grep -vi "https://github.com/plone/volto/issues/" --color=always && if test $$? -eq 0; then exit 1; fi || test $$? -ne 0 + +.PHONY: docs-vale +docs-vale: bin/python ## Install (once) and run Vale style, grammar, and spell checks + bin/vale sync + bin/vale --no-wrap $(VALEOPTS) $(VALEFILES) + @echo + @echo "Vale is finished; look for any errors in the above output." + +.PHONY: docs-rtd-pr-preview +docs-rtd-pr-preview: ## Build previews of pull requests that have documentation changes on Read the Docs via CI + pip install -r requirements-docs.txt + cd $(DOCS_DIR) && sphinx-build -b html $(ALLSPHINXOPTS) ${READTHEDOCS_OUTPUT}/html/ + +.PHONY: docs-rtd-registry +docs-rtd-registry: ## Build Plone Registry docs on RTD + pip install -r ../../requirements-docs.txt && cd $(DOCS_DIR) && sphinx-build -b html $(ALLSPHINXOPTS) ${READTHEDOCS_OUTPUT}/html/ + +## Build + +.PHONY: rename-to-cjs +rename-to-cjs: ## Rename the built files js -> cjs + mv dist/cjs/addon-registry.js dist/cjs/addon-registry.cjs + mv dist/cjs/create-addons-loader.js dist/cjs/create-addons-loader.cjs + mv dist/cjs/create-theme-loader.js dist/cjs/create-theme-loader.cjs diff --git a/packages/registry/README.md b/packages/registry/README.md index 552133573c..0c4ae8865b 100644 --- a/packages/registry/README.md +++ b/packages/registry/README.md @@ -10,198 +10,10 @@ That means you have to build something that has very specific requirements, beha Sometimes you need to build something generic that is pluggable and extensible. In the JavaScript and TypeScript ecosystem, this is often quite complex, and the existing frameworks do not provide the means to do this. -## Add-on registry +`@plone/registry` provides tools to facilitate pluggability for your app. -An add-on registry is a facility that allows an app, which was built on an existing framework, to itself be extensible and pluggable. +## Documentation -The add-on registry is a store where you can register a number of add-ons that your app consumes. +You can find the detailed documentation of this package by visiting the following link. -Add-on packages are just CommonJS packages. -The only requirement is that they point the `main` key of their `package.json` to a module that exports as a default function, which acts as a configuration loader. - -An add-on can be published in an npm registry, just as any other package. -However, add-ons are meant to not be transpiled. -They should be released as source packages. - -## Register an add-on - -You should declare your add-on in your project. -This is done in your app's `package.json`'s `addons` key: - -```json -{ - "name": "my-app-project", - "addons": [ - "acme-volto-foo-addon", - "@plone/some-addon", - "collective-another-volto-addon" - ] -} -``` - -The `addons` key ensures the add-on's main default export function is executed, being passed the configuration registry. -In that function, the add-on can customize the registry. -The function needs to return the `config` object (the configuration registry), so that it's passed further along to the other add-ons. - -The add-ons are registered in the order they are found in the `addons` key. -The last add-on takes precedence over the others. -This means that if you configure something in `acme-volto-foo-addon`, then the same thing later in `collective-another-volto-addon`, the latter configured thing will win and its configuration will be applied. - -The default export of any add-on main `index.js` file should be a function with the signature `config => config`. -That is, it should take the configuration registry object and return it, possibly mutated or changed. - -## Configuration registry - -The configuration registry supplements the add-on registry. - -It is a facility that stores app configuration to be shared in the app. - -Let's say that your app is the user interface of a content management system (CMS). -This CMS uses blocks as its main fundamental unit of content. -The pages that the CMS builds are made up of these blocks. -The CMS has some basic available blocks, but it's a requirement that integrators are able to register more blocks in a pluggable way. - -This app will use the add-on registry to extend the basic CMS capabilities, so an external add-on can supplement their own add-ons to the basic CMS ones. - -Let's assume we've defined a key in the registry `config.blocks.blocksConfig`, and defined a way to register the available blocks in the CMS as the keys in that object in the configuration registry: - -```js - config.blocks.blocksConfig.faq_viewer = { - id: 'faq_viewer', - title: 'FAQ Viewer', - edit: FAQBlockEdit, - view: FAQBlockView, - icon: chartIcon, - group: 'common', - restricted: false, - mostUsed: true, - sidebarTab: 1, - }; -``` - -The configuration registry will have other keys already set by default, which will compose the initial set of basic blocks used by the CMS. -Then the CMS will properly populate the available blocks in the user interface. - -The add-on is meant to extend the initial configuration. -From the default export function of our add-on, we should provide the configuration of the new block: - -```ts -export default function applyConfig(config: ConfigData) { - config.blocks.blocksConfig.faq_viewer = { - id: 'faq_viewer', - title: 'FAQ Viewer', - edit: FAQBlockEdit, - view: FAQBlockView, - icon: chartIcon, - group: 'common', - restricted: false, - mostUsed: true, - sidebarTab: 1, - }; - - return config; -} -``` - -Once the app starts, the add-on registry will execute, in order, all the registered add-ons' default export functions, configuring the new block. -The add-on will then become available to the CMS when it asks the configuration registry for it. - -## Accessing the configuration registry - -The configuration registry can be accessed by: - -```ts -import config from '@plone/registry' - -const blocksConfig = config.blocks.blocksConfig -``` - -## Component registry - -The configuration registry also stores a components registry in itself. -The components registry is a mapping of name to component. -You can look up a name, and receive a component that you can reference in your code. -This provides an alternative, and more convenient, way to customize components. -You can override programmatically such registrations from your add-on or projects because it's stored in the configuration registry. -You can customize a component without using shadowing at all, if the code that uses the component retrieves from the component registry, rather then import it directly. -You can even have modifiers to the component registrations through dependencies. -Thus you can adapt the call, given an array of such dependencies. - -## Register components by name using `config.registerComponent` - -You can register components by name, typically from an add-on or project configuration: - -```js -import MyToolbarComponent from './MyToolbarComponent' - -config.registerComponent({ - name: 'Toolbar', - component: MyToolbarComponent, -}); -``` - -## Retrieve a component from the component registry - -You can programmatically retrieve a component from the registry using `config.getComponent`: - -```js -const Toolbar = config.getComponent('Toolbar').component -``` - -Or you can retrieve a component by using the convenience component `Component`, if you want to use it in JSX code directly. - -```jsx -import Component from '@plone/volto/components/theme/Component/Component'; - - -``` - -Note that you can pass `props` down to the retrieved component. - -## Adapt the component using the `dependencies` array - -You can register components, then retrieve them, given a list of modifiers using `dependencies`. - -```js -import MyTeaserNewsItemComponent from './MyTeaserNewsItemComponent' - -config.registerComponent({ - name: 'Teaser', - component: MyTeaserNewsItemComponent, - dependencies: 'News Item', - }); -``` - -And then retrieve the component: - -```js -config.getComponent({ - name: 'Teaser', - dependencies: ['News Item'], - }).component -``` - -You can have both, either with or without dependencies: - -```js -import MyTeaserDefaultComponent from './MyTeaserDefaultComponent' -import MyTeaserNewsItemComponent from './MyTeaserNewsItemComponent' - -config.registerComponent({ - name: 'Teaser', - component: MyTeaserDefaultComponent, - }); - -config.registerComponent({ - name: 'Teaser', - component: MyTeaserNewsItemComponent, - dependencies: 'News Item', - }); -``` - -Then retrieve them both, depending on the use case. -In the example, given a content type value coming from the `content` prop, you would retrieve them as shown: - -```jsx - -``` +https://plone-registry.readthedocs.io diff --git a/packages/registry/__tests__/addon-registry-app.test.js b/packages/registry/__tests__/addon-registry-app.test.js new file mode 100644 index 0000000000..7c3d7d7e04 --- /dev/null +++ b/packages/registry/__tests__/addon-registry-app.test.js @@ -0,0 +1,18 @@ +import path from 'path'; +import { AddonRegistry } from '../src/addon-registry/addon-registry'; +import { describe, it, expect } from 'vitest'; + +describe('AddonRegistry - get()', () => { + it('Basic information', () => { + const base = path.join(import.meta.dirname, 'fixtures', 'test-app'); + const { addons, shadowAliases, theme } = AddonRegistry.init(base); + expect(addons).toStrictEqual(['@plone/slots', 'my-addon']); + expect(shadowAliases).toStrictEqual([ + { + find: '@plone/slots/components/Logo/Logo.svg', + replacement: `${base}/node_modules/my-addon/customizations/@plone/slots/components/Logo/Logo.svg`, + }, + ]); + expect(theme).toStrictEqual(undefined); + }); +}); diff --git a/packages/registry/__tests__/addon-registry.test.js b/packages/registry/__tests__/addon-registry.test.js new file mode 100644 index 0000000000..cc21df88fa --- /dev/null +++ b/packages/registry/__tests__/addon-registry.test.js @@ -0,0 +1,366 @@ +import path from 'path'; +import { + AddonRegistry, + buildDependencyGraph, + getAddonsLoaderChain, +} from '../src/addon-registry/addon-registry'; +import { vi, describe, it, expect, test, beforeEach, afterEach } from 'vitest'; + +vi.mock( + 'fixtures/test-volto-project/node_modules/@plone/volto/package.json', + () => ({ + // TODO: mock the packages folder inside the mocked @plone/volto to work with resolves + coreAddons: {}, + }), + { virtual: true }, +); + +describe('AddonRegistry - get()', () => { + it('Basic information', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { addons, shadowAliases, theme } = AddonRegistry.init(base); + expect(addons).toStrictEqual([ + 'test-released-unmentioned:extra1,extra2', + 'test-released-dummy', + 'test-addon', + 'test-released-addon:extra', + 'test-released-source-addon', + 'my-volto-config-addon', + ]); + expect(shadowAliases).toStrictEqual([ + { + find: 'test-released-source-addon/index', + replacement: `${base}/addons/test-addon/src/custom-addons/test-released-source-addon/index.js`, + }, + { + find: '@plone/volto/server', + replacement: `${base}/addons/test-addon/src/custom-addons/volto/server.jsx`, + }, + { + find: '@root/marker', + replacement: `${base}/node_modules/test-released-source-addon/src/customizations/@root/marker.js`, + }, + { + find: '@plone/volto/routes', + replacement: `${base}/node_modules/test-released-source-addon/src/customizations/routes.tsx`, + }, + { + find: '@plone/volto/client', + replacement: `${base}/node_modules/test-released-source-addon/src/customizations/client.js`, + }, + { + find: '@plone/volto/TSComponent', + replacement: `${base}/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx`, + }, + { + find: '@plone/volto/LanguageSwitcher', + replacement: `${base}/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js`, + }, + ]); + expect(theme).toStrictEqual(undefined); + }); +}); + +describe('AddonRegistry - Project', () => { + it('works in a mock project directory', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + + const voltoPath = `${base}/node_modules/@plone/volto`; + + expect(registry.projectRootPath).toStrictEqual(base); + expect(registry.voltoPath).toStrictEqual(voltoPath); + + expect(registry.addonNames).toStrictEqual([ + 'test-addon', + 'test-released-addon', + 'test-released-source-addon', + 'my-volto-config-addon', + 'test-released-dummy', + 'test-released-unmentioned', + ]); + + expect(registry.packages).toEqual({ + 'test-addon': { + isPublishedPackage: false, + modulePath: `${base}/addons/test-addon/src`, + name: 'test-addon', + packageJson: `${base}/addons/test-addon/package.json`, + addons: ['test-released-dummy'], + isRegisteredAddon: true, + version: '0.0.0', + }, + 'test-released-addon': { + basePath: `${base}/node_modules/test-released-addon`, + isPublishedPackage: true, + modulePath: `${base}/node_modules/test-released-addon`, + name: 'test-released-addon', + packageJson: `${base}/node_modules/test-released-addon/package.json`, + addons: ['test-released-unmentioned:extra1,extra2'], + isRegisteredAddon: true, + tsConfigPaths: null, + version: '0.0.0', + }, + 'test-released-source-addon': { + basePath: `${base}/node_modules/test-released-source-addon`, + isPublishedPackage: true, + modulePath: `${base}/node_modules/test-released-source-addon/src`, + name: 'test-released-source-addon', + packageJson: `${base}/node_modules/test-released-source-addon/package.json`, + razzleExtender: `${base}/node_modules/test-released-source-addon/razzle.extend.js`, + addons: [], + isRegisteredAddon: true, + tsConfigPaths: null, + version: '0.0.0', + }, + 'test-released-unmentioned': { + addons: [], + basePath: `${base}/node_modules/test-released-unmentioned`, + isPublishedPackage: true, + modulePath: `${base}/node_modules/test-released-unmentioned`, + name: 'test-released-unmentioned', + packageJson: `${base}/node_modules/test-released-unmentioned/package.json`, + isRegisteredAddon: true, + tsConfigPaths: null, + version: '0.0.0', + }, + 'my-volto-config-addon': { + addons: ['test-released-dummy'], + isPublishedPackage: false, + modulePath: `${base}/addons/my-volto-config-addon/src`, + name: 'my-volto-config-addon', + packageJson: `${base}/addons/my-volto-config-addon/package.json`, + isRegisteredAddon: true, + version: '0.0.0', + }, + 'test-released-dummy': { + addons: ['test-released-unmentioned'], + isPublishedPackage: false, + modulePath: `${base}/addons/test-released-dummy`, + name: 'test-released-dummy', + packageJson: `${base}/addons/test-released-dummy/package.json`, + isRegisteredAddon: true, + version: '0.0.0', + }, + }); + }); + + it('provides aliases for addons', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + expect(registry.getResolveAliases()).toStrictEqual({ + 'my-volto-config-addon': `${base}/addons/my-volto-config-addon/src`, + 'test-addon': `${base}/addons/test-addon/src`, + 'test-released-addon': `${base}/node_modules/test-released-addon`, + 'test-released-dummy': `${base}/addons/test-released-dummy`, + 'test-released-source-addon': `${base}/node_modules/test-released-source-addon/src`, + 'test-released-unmentioned': `${base}/node_modules/test-released-unmentioned`, + }); + }); + + it('provides addon extenders', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + expect(registry.getAddonExtenders().length).toBe(1); + }); + + it('provides a list of addon records ordered by initial package declaration', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + const addons = registry.getAddons(); + expect(addons.map((a) => a.name)).toStrictEqual([ + 'test-released-unmentioned', + 'test-released-dummy', + 'test-addon', + 'test-released-addon', + 'test-released-source-addon', + 'my-volto-config-addon', + ]); + }); + + it('provides customization paths declared in a Volto project', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + expect(registry.getProjectCustomizationPaths()).toStrictEqual({ + '@plone/volto/LanguageSwitcher': `${base}/src/customizations/LanguageSwitcher.js`, + '@plone/volto/TSComponent': `${base}/src/customizations/TSComponent.jsx`, + '@plone/volto/client': `${base}/src/customizations/client.js`, + '@plone/volto/routes': `${base}/src/customizations/routes.tsx`, + 'test-addon/testaddon': `${base}/src/custom-addons/test-addon/testaddon.js`, + '@plone/volto/server': `${base}/src/customizations/server.jsx`, + }); + }); + + it('provides customization paths declared in addons', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + expect(registry.getAddonCustomizationPaths()).toStrictEqual({ + '@plone/volto/LanguageSwitcher': `${base}/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js`, + '@plone/volto/TSComponent': `${base}/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx`, + '@plone/volto/client': `${base}/node_modules/test-released-source-addon/src/customizations/client.js`, + '@plone/volto/routes': `${base}/node_modules/test-released-source-addon/src/customizations/routes.tsx`, + '@plone/volto/server': `${base}/addons/test-addon/src/custom-addons/volto/server.jsx`, + '@root/marker': `${base}/node_modules/test-released-source-addon/src/customizations/@root/marker.js`, + 'test-released-source-addon/index': `${base}/addons/test-addon/src/custom-addons/test-released-source-addon/index.js`, + }); + }); +}); + +describe('Addon chain loading dependencies', () => { + const depTree = { + add0: ['add1'], + add1: ['add2:e0', 'add4'], + add2: ['add3:e6', 'add5', 'add6'], + add3: ['add0'], + add4: ['add2:e1,e3'], + add5: ['add6'], + }; + const extractor = (name) => depTree[name] || []; + + test('no addons', () => { + const graph = buildDependencyGraph([], extractor); + const deps = getAddonsLoaderChain(graph); + expect(deps).toEqual([]); + }); + + test('one addon', () => { + const graph = buildDependencyGraph(['volto-addon1'], extractor); + const deps = getAddonsLoaderChain(graph); + expect(deps).toEqual(['volto-addon1']); + }); + + test('two addons', () => { + const graph = buildDependencyGraph( + ['volto-addon1', 'volto-addon2'], + extractor, + ); + const deps = getAddonsLoaderChain(graph); + expect(deps).toEqual(['volto-addon1', 'volto-addon2']); + }); + + test('one addon with dependency', () => { + const graph = buildDependencyGraph(['add5'], extractor); + const deps = getAddonsLoaderChain(graph); + expect(deps).toEqual(['add6', 'add5']); + }); + + test('one addon with circular dependencies', () => { + const graph = buildDependencyGraph(['add0'], extractor); + const deps = getAddonsLoaderChain(graph); + expect(deps).toEqual([ + 'add3:e6', + 'add6', + 'add5', + 'add2:e0,e1,e3', + 'add4', + 'add1', + 'add0', + ]); + }); +}); + +describe('Addon via env var - Released addon (same as dev add-on, when resolved via workspaces)', () => { + const originalEnv = process.env; + + beforeEach(() => { + vi.resetModules(); + process.env = { + ...originalEnv, + ADDONS: 'test-released-via-addons-env-var', + }; + }); + + afterEach(() => { + process.env = originalEnv; + }); + + it('addons can be specified on the fly using ADDONS env var - Released addon', () => { + const base = path.join( + import.meta.dirname, + 'fixtures', + 'test-volto-project', + ); + const { registry } = AddonRegistry.init(base); + expect( + Object.keys(registry.packages).includes( + 'test-released-via-addons-env-var', + ), + ).toBe(true); + }); +}); + +describe('Add-on via config file provided using an env var', () => { + const originalEnv = process.env; + const base = path.join(import.meta.dirname, 'fixtures', 'test-volto-project'); + + beforeEach(() => { + vi.resetModules(); + }); + + afterEach(() => { + process.env = originalEnv; + }); + + it('VOLTOCONFIG - provides a list of addon records ordered using an env var for providing the configuration file', () => { + process.env = { + ...originalEnv, + VOLTOCONFIG: `${base}/volto.config.envvar.js`, + }; + const { registry } = AddonRegistry.init(base); + const addons = registry.getAddons(); + expect(addons.map((a) => a.name)).toStrictEqual([ + 'test-released-unmentioned', + 'test-released-dummy', + 'test-addon', + 'test-released-addon', + 'test-released-source-addon', + 'my-volto-config-addon-via-env-var', + ]); + }); + + it('[REGISTRYCONFIG - provides a list of addon records ordered using an env var for providing the configuration file', () => { + process.env = { + ...originalEnv, + REGISTRYCONFIG: `${base}/volto.config.envvar.js`, + }; + + const { registry } = AddonRegistry.init(base); + const addons = registry.getAddons(); + expect(addons.map((a) => a.name)).toStrictEqual([ + 'test-released-unmentioned', + 'test-released-dummy', + 'test-addon', + 'test-released-addon', + 'test-released-source-addon', + 'my-volto-config-addon-via-env-var', + ]); + }); +}); diff --git a/packages/registry/__tests__/create-addons-loader.test.js b/packages/registry/__tests__/create-addons-loader.test.js new file mode 100644 index 0000000000..60b611ad67 --- /dev/null +++ b/packages/registry/__tests__/create-addons-loader.test.js @@ -0,0 +1,164 @@ +import { + getAddonsLoaderCode, + nameFromPackage, +} from '../src/addon-registry/create-addons-loader'; +import { describe, expect, test } from 'vitest'; + +describe('create-addons-loader code generation', () => { + test('no addon creates simple loader, default = no loadProjectConfig', () => { + const code = getAddonsLoaderCode([]); + expect(code).toBe(`/* +This file is autogenerated. Don't change it directly. +Instead, change the "addons" setting in your package.json file. +*/ + + +const addonsInfo = {}; +export { addonsInfo }; + +const safeWrapper = (func) => (config) => { + const res = func(config); + if (typeof res === 'undefined') { + throw new Error("Configuration function doesn't return config"); + } + return res; +} + +const projectConfigLoader = false; +const projectConfig = (config) => { + return projectConfigLoader && typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; +} + +const load = (config) => { + const addonLoaders = []; + if(!addonLoaders.every((el) => typeof el === "function")) { + throw new TypeError( + 'Each addon has to provide a function applying its configuration to the projects configuration.', + ); + } + return projectConfig(addonLoaders.reduce((acc, apply) => safeWrapper(apply)(acc), config)); +}; +export default load; +`); + }); + + test('no addon creates simple loader, loadProjectConfig set to true', () => { + const code = getAddonsLoaderCode([], {}, true); + expect(code).toBe(`/* +This file is autogenerated. Don't change it directly. +Instead, change the "addons" setting in your package.json file. +*/ + +const projectConfigLoader = require('@root/config'); + +const addonsInfo = {}; +export { addonsInfo }; + +const safeWrapper = (func) => (config) => { + const res = func(config); + if (typeof res === 'undefined') { + throw new Error("Configuration function doesn't return config"); + } + return res; +} + + +const projectConfig = (config) => { + return projectConfigLoader && typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; +} + +const load = (config) => { + const addonLoaders = []; + if(!addonLoaders.every((el) => typeof el === "function")) { + throw new TypeError( + 'Each addon has to provide a function applying its configuration to the projects configuration.', + ); + } + return projectConfig(addonLoaders.reduce((acc, apply) => safeWrapper(apply)(acc), config)); +}; +export default load; +`); + }); + + test('one addon creates loader', () => { + const code = getAddonsLoaderCode(['volto-addon1']); + expect(code.indexOf("import voltoAddon1 from 'volto-addon1';") > 0).toBe( + true, + ); + }); + + test('two addons create loaders', () => { + const code = getAddonsLoaderCode(['volto-addon1', 'volto-addon2']); + expect( + code.indexOf(` +import voltoAddon1 from 'volto-addon1'; +import voltoAddon2 from 'volto-addon2';`) > 0, + ).toBe(true); + }); + + test('one addons plus one extra creates loader', () => { + const code = getAddonsLoaderCode(['volto-addon1:loadExtra1']); + expect( + code.indexOf(` +import voltoAddon1, { loadExtra1 as loadExtra10 } from 'volto-addon1'; +`) > 0, + ).toBe(true); + }); + + test('one addons plus two extras creates loader', () => { + const code = getAddonsLoaderCode(['volto-addon1:loadExtra1,loadExtra2']); + expect( + code.indexOf(` +import voltoAddon1, { loadExtra1 as loadExtra10, loadExtra2 as loadExtra21 } from 'volto-addon1'; +`) > 0, + ).toBe(true); + }); + + test('two addons plus extras creates loader', () => { + const code = getAddonsLoaderCode([ + 'volto-addon1:loadExtra1,loadExtra2', + 'volto-addon2:loadExtra3,loadExtra4', + ]); + expect( + code.indexOf(` +import voltoAddon1, { loadExtra1 as loadExtra10, loadExtra2 as loadExtra21 } from 'volto-addon1'; +import voltoAddon2, { loadExtra3 as loadExtra32, loadExtra4 as loadExtra43 } from 'volto-addon2'; +`) > 0, + ).toBe(true); + }); +}); + +describe('create-addons-loader default name generation', () => { + const getName = nameFromPackage; + + test('passing a simple word returns a word', () => { + expect(getName('something')).toBe('something'); + }); + + test('passing a kebab-name returns a word', () => { + expect(getName('volto-something-else')).toBe('voltoSomethingElse'); + }); + + test('passing a simple relative path returns random string', () => { + const rand = getName('../../'); + expect(rand.length).toBe(10); + expect(new RegExp(/[abcdefghjk]+/).exec(rand)[0].length > 0).toBe(true); + }); + test('passing a tilda relative path with addon strips tilda', () => { + const name = getName('~/addons/volto-addon1'); + expect(name).toBe('addonsvoltoAddon1'); + }); + test('passing a namespace package strips @', () => { + const name = getName('@plone/volto-addon1'); + expect(name).toBe('plonevoltoAddon1'); + }); + test('passing a tilda relative path strips tilda', () => { + const name = getName('~/../'); + expect(name.length).toBe(10); + expect(new RegExp(/[abcdefghjk]+/).exec(name)[0].length > 0).toBe(true); + }); + test('passing a backspaced path strips backspace', () => { + const name = getName('c:\\nodeprojects'); + expect(name).toBe('cnodeprojects'); + }); +}); diff --git a/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/components/Logo/Logo.svg b/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/components/Logo/Logo.svg new file mode 100644 index 0000000000..1aa6adfdf3 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/components/Logo/Logo.svg @@ -0,0 +1 @@ +asdasd diff --git a/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/index.js b/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/package.json b/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/package.json new file mode 100644 index 0000000000..68a86c4d37 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/node_modules/@plone/slots/package.json @@ -0,0 +1,4 @@ +{ + "name": "@plone/slots", + "main": "index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/customizations/@plone/slots/components/Logo/Logo.svg b/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/customizations/@plone/slots/components/Logo/Logo.svg new file mode 100644 index 0000000000..3e8fcacea6 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/customizations/@plone/slots/components/Logo/Logo.svg @@ -0,0 +1 @@ + diff --git a/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/index.js b/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/package.json b/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/package.json new file mode 100644 index 0000000000..ccf0c501c1 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/node_modules/my-addon/package.json @@ -0,0 +1,4 @@ +{ + "name": "my-addon", + "main": "index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-app/package.json b/packages/registry/__tests__/fixtures/test-app/package.json new file mode 100644 index 0000000000..24de726e14 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/package.json @@ -0,0 +1,3 @@ +{ + "name": "test-app" +} diff --git a/packages/registry/__tests__/fixtures/test-app/registry.config.js b/packages/registry/__tests__/fixtures/test-app/registry.config.js new file mode 100644 index 0000000000..f520684acb --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-app/registry.config.js @@ -0,0 +1,3 @@ +module.exports = { + addons: ['@plone/slots', 'my-addon'], +}; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/my-volto-config-addon/package.json b/packages/registry/__tests__/fixtures/test-volto-project/addons/my-volto-config-addon/package.json new file mode 100644 index 0000000000..87e8d2ad96 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/my-volto-config-addon/package.json @@ -0,0 +1,10 @@ +{ + "name": "test-addon", + "version": "0.0.0", + "customizationPaths": [ + "src/custom-addons" + ], + "addons": [ + "test-released-dummy" + ] +} diff --git a/packages/registry/pnpm-lock.yaml b/packages/registry/__tests__/fixtures/test-volto-project/addons/my-volto-config-addon/src/testaddon.js similarity index 100% rename from packages/registry/pnpm-lock.yaml rename to packages/registry/__tests__/fixtures/test-volto-project/addons/my-volto-config-addon/src/testaddon.js diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/index.js b/packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/package.json b/packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/package.json new file mode 100644 index 0000000000..c81be50ab7 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/non-volto-addon-lib/package.json @@ -0,0 +1,5 @@ +{ + "name": "non-volto-addon-lib", + "version": "0.0.0", + "main": "index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/package.json b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/package.json new file mode 100644 index 0000000000..87e8d2ad96 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/package.json @@ -0,0 +1,10 @@ +{ + "name": "test-addon", + "version": "0.0.0", + "customizationPaths": [ + "src/custom-addons" + ], + "addons": [ + "test-released-dummy" + ] +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/test-released-source-addon/index.js b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/test-released-source-addon/index.js new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/test-released-source-addon/index.js @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/volto/server.jsx b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/volto/server.jsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/custom-addons/volto/server.jsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/testaddon.js b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-addon/src/testaddon.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/index.js b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/package.json b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/package.json new file mode 100644 index 0000000000..18c940d721 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/addons/test-released-dummy/package.json @@ -0,0 +1,8 @@ +{ + "name": "test-released-dummy", + "version": "0.0.0", + "main": "index.js", + "addons": [ + "test-released-unmentioned" + ] +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/jsconfig.json b/packages/registry/__tests__/fixtures/test-volto-project/jsconfig.json new file mode 100644 index 0000000000..4c3beb25ec --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/jsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "paths": { + "test-addon": ["test-addon/src"], + "test-released-dummy": ["test-released-dummy"], + "my-volto-config-addon": ["my-volto-config-addon/src"], + "non-volto-addon-lib": ["non-volto-addon-lib/src"] + }, + "baseUrl": "addons" + } +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/LanguageSwitcher.jsx b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/LanguageSwitcher.jsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/LanguageSwitcher.jsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/TSComponent.tsx b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/TSComponent.tsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/TSComponent.tsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/client.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/client.js new file mode 100644 index 0000000000..0dae97301d --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/client.js @@ -0,0 +1 @@ +//dummy file diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/routes.jsx b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/routes.jsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/routes.jsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/server.jsx b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/server.jsx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/index.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/package.json b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/package.json new file mode 100644 index 0000000000..ac0652a9b0 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/my-volto-config-addon-via-env-var/package.json @@ -0,0 +1,11 @@ +{ + "name": "my-volto-config-addon-via-env-var", + "version": "0.0.0", + "main": "index.js", + "customizationPaths": [ + "src/custom-addons" + ], + "addons": [ + "test-released-dummy" + ] +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/index.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/package.json b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/package.json new file mode 100644 index 0000000000..4f1f61b465 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-addon/package.json @@ -0,0 +1,8 @@ +{ + "name": "test-released-addon", + "version": "0.0.0", + "main": "index.js", + "addons": [ + "test-released-unmentioned:extra1,extra2" + ] +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/index.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/index.js new file mode 100644 index 0000000000..53e61140f2 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/index.js @@ -0,0 +1,2 @@ +export default (config) => config; + diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/package.json b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/package.json new file mode 100644 index 0000000000..4640873bbf --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-dummy/package.json @@ -0,0 +1,5 @@ +{ + "name": "test-released-dummy", + "main": "index.js", + "addons": [] +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/package.json b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/package.json new file mode 100644 index 0000000000..3220bd17cc --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/package.json @@ -0,0 +1,5 @@ +{ + "name": "test-released-source-addon", + "version": "0.0.0", + "main": "src/index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/razzle.extend.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/razzle.extend.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/@root/marker.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/@root/marker.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/client.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/client.js new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/client.js @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/routes.tsx b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/routes.tsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/customizations/routes.tsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/index.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-source-addon/src/index.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/index.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/index.js new file mode 100644 index 0000000000..53e61140f2 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/index.js @@ -0,0 +1,2 @@ +export default (config) => config; + diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/package.json b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/package.json new file mode 100644 index 0000000000..b3b3c399f1 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-unmentioned/package.json @@ -0,0 +1,5 @@ +{ + "name": "test-released-unmentioned", + "version": "0.0.0", + "main": "index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/index.js b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/index.js new file mode 100644 index 0000000000..53e61140f2 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/index.js @@ -0,0 +1,2 @@ +export default (config) => config; + diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/package.json b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/package.json new file mode 100644 index 0000000000..c6a4424310 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/test-released-via-addons-env-var/package.json @@ -0,0 +1,4 @@ +{ + "name": "test-released-via-addons-env-var", + "main": "index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/package.json b/packages/registry/__tests__/fixtures/test-volto-project/package.json new file mode 100644 index 0000000000..bb67637bb2 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/package.json @@ -0,0 +1,12 @@ +{ + "name": "test-volto-project", + "addons": [ + "test-addon", + "test-released-addon:extra", + "test-released-source-addon" + ], + "customizationPaths": [ + "src/custom-addons", + "src/customizations/" + ] +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/package.json b/packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/package.json new file mode 100644 index 0000000000..7e6c4a11fb --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/package.json @@ -0,0 +1,4 @@ +{ + "name": "test-local-packages-via-addons-env-var", + "main": "src/index.js" +} diff --git a/packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/src/index.js b/packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/src/index.js new file mode 100644 index 0000000000..8cb61d300a --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/packages/test-local-packages-via-addons-env-var/src/index.js @@ -0,0 +1 @@ +export default (config) => config; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/test-addon/testaddon.js b/packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/test-addon/testaddon.js new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/test-addon/testaddon.js @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/volto/client.js b/packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/volto/client.js new file mode 100644 index 0000000000..4d389677f0 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/src/custom-addons/volto/client.js @@ -0,0 +1 @@ +// another customization diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/LanguageSwitcher.js b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/LanguageSwitcher.js new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/LanguageSwitcher.js @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/TSComponent.jsx b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/TSComponent.jsx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/client.js b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/client.js new file mode 100644 index 0000000000..b262fa10a3 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/client.js @@ -0,0 +1 @@ +// dummy file diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/routes.tsx b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/routes.tsx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/server.jsx b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/server.jsx new file mode 100644 index 0000000000..8337712ea5 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/server.jsx @@ -0,0 +1 @@ +// diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/marker.js b/packages/registry/__tests__/fixtures/test-volto-project/src/marker.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/registry/__tests__/fixtures/test-volto-project/volto.config.envvar.js b/packages/registry/__tests__/fixtures/test-volto-project/volto.config.envvar.js new file mode 100644 index 0000000000..2e37cd37c2 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/volto.config.envvar.js @@ -0,0 +1,3 @@ +module.exports = { + addons: ['my-volto-config-addon-via-env-var'], +}; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/volto.config.js b/packages/registry/__tests__/fixtures/test-volto-project/volto.config.js new file mode 100644 index 0000000000..ec05e8e085 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/volto.config.js @@ -0,0 +1,3 @@ +module.exports = { + addons: ['my-volto-config-addon'], +}; diff --git a/packages/registry/__tests__/fixtures/volto-addon1.js b/packages/registry/__tests__/fixtures/volto-addon1.js new file mode 100644 index 0000000000..b406bacbd8 --- /dev/null +++ b/packages/registry/__tests__/fixtures/volto-addon1.js @@ -0,0 +1,14 @@ +export default (config) => { + const settings = { + nonContentRoutes: [], + supportedLanguages: ['en'], + navDepth: 1, + }; + + config.settings = { + ...config.settings, + ...settings, + }; + + return config; +}; diff --git a/packages/registry/__tests__/fixtures/volto-addon2.js b/packages/registry/__tests__/fixtures/volto-addon2.js new file mode 100644 index 0000000000..62ec3d2cf0 --- /dev/null +++ b/packages/registry/__tests__/fixtures/volto-addon2.js @@ -0,0 +1,29 @@ +export default (config) => { + const settings = { + nonContentRoutes: [], + supportedLanguages: ['en', 'de'], + navDepth: 3, + }; + + config.settings = { + ...config.settings, + ...settings, + }; + + return config; +}; + +const additionalConfig = (config) => { + const settings = { + navDepth: 6, + }; + + config.settings = { + ...config.settings, + ...settings, + }; + + return config; +}; + +export { additionalConfig }; diff --git a/packages/registry/__tests__/fixtures/volto-addon3.js b/packages/registry/__tests__/fixtures/volto-addon3.js new file mode 100644 index 0000000000..2231f8a8b1 --- /dev/null +++ b/packages/registry/__tests__/fixtures/volto-addon3.js @@ -0,0 +1,41 @@ +export default (config) => { + const settings = { + nonContentRoutes: [], + supportedLanguages: ['en', 'de'], + navDepth: 3, + }; + + config.settings = { + ...config.settings, + ...settings, + }; + + return config; +}; + +const additionalConfig = (config) => { + const settings = { + navDepth: 6, + }; + + config.settings = { + ...config.settings, + ...settings, + }; + + return config; +}; + +const alternateAdditionalConfig = (config) => { + const settings = { + navDepth: 10, + }; + + config.settings = { + ...config.settings, + ...settings, + }; + + return config; +}; +export { additionalConfig, alternateAdditionalConfig }; diff --git a/packages/registry/docs/_static/Plone_logo_square.png b/packages/registry/docs/_static/Plone_logo_square.png new file mode 100644 index 0000000000000000000000000000000000000000..f42a1220d761a40ad9f0f0df919136f61ef729e2 GIT binary patch literal 30912 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 LD@#>L7zh0yh&`2n literal 0 HcmV?d00001 diff --git a/packages/registry/docs/_static/favicon.ico b/packages/registry/docs/_static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ae7bb0cd8b1f4f2e6d657bc7a253472819d77819 GIT binary patch literal 5430 zcmdUzv1$}y6or39*mCm*nMy3Tv=B0n;3G_FX)6dj5Wz;UwcFM%Z{S2y*ogZGGvWhm z#3q7dJYSp}Zf^dW-Bm#h9Pa(^J?Gr{Z)P`;lCe04v=C~c5&99(gR}V4d8U_FC9H+9nPYV{kIiS_C~YBdpE3Vk>v$CV z%oqQ$uo;<6{X}5T9@M5ZJMBUq>^pZi?on>L2OI%z&ZC;rOT)dRu2t=NF1cX$9(~US z9@^-a-Gg|A5ck)pc3{t}d?iG`+WIk~74YyHW)vB2Pb;nr@L;rhn2Sno0`a^%NO%p=Cq^TlH~kz?oDb9c@6@!W^|AI<+;`~Mg3 zU*q0~cH7Ry<*vNLpz?g3OM&+bl)h)V>hbdj*WN#3R)=1_b>PCk^%=8SG2$Kc%>Jj} zza#f5GtbVx{hoYYM}9nK?tb<62cCLW@NRXEe}7kjv-5ns1U$Vaes?#a-}pPI$9KEe z`+VWKF_&)A8@@P&;NMOB(OvIB`AVSfQN?+7Ml0aq`OGMcH&q- zV?-mM^|Q%u>^-BaG8%M^P)2?{!x^}7F6S!pb7%3`L;PKsU#lLU1>1o|YV?ffBVLpD zj?W=}Av7a?-g{e)M-lyZJxf~&>)&_|G}W$iw(;a;@7>f+=<)lQ{5<+ueK+g-`c8kD z((*@2M;C_|hv&~O=Uum)z3-OCXQxMJFHes?zwDNu=iTyr{{7qeygwaKKb`krIMWjc zE*i9WbX`Bg6K`fPiOdT`*PLHiTJtBB+P literal 0 HcmV?d00001 diff --git a/packages/registry/docs/_static/logo.svg b/packages/registry/docs/_static/logo.svg new file mode 100644 index 0000000000..6bfdc1ee90 --- /dev/null +++ b/packages/registry/docs/_static/logo.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/registry/docs/_static/print.css b/packages/registry/docs/_static/print.css new file mode 100644 index 0000000000..8dbc2d5794 --- /dev/null +++ b/packages/registry/docs/_static/print.css @@ -0,0 +1,3 @@ +.tooltip { + display: none; +} diff --git a/packages/registry/docs/conceptual-guides/add-on-registry.md b/packages/registry/docs/conceptual-guides/add-on-registry.md new file mode 100644 index 0000000000..763d9f54d9 --- /dev/null +++ b/packages/registry/docs/conceptual-guides/add-on-registry.md @@ -0,0 +1,38 @@ +--- +myst: + html_meta: + "description": "An explanation of the add-on registry in @plone/registry" + "property=og:description": "An explanation of the add-on registry in @plone/registry" + "property=og:title": "Add-on registry" + "keywords": "@plone/registry, registry, add-on" +--- + +# Add-on registry + +An add-on registry is a facility that allows an app, which was built on an existing framework, to itself be extensible and pluggable. + +The add-on registry is a store where you can register a number of add-ons that your app consumes. + +The add-on registry can be queried, so it can provide a list of add-ons installed in the registry and their properties. + + +## What is an add-on? + +Add-on packages are just CommonJS or ESM packages. +Their main purpose is to encapsulate logic, configuration and customizations in a reusable way. +The only requirement is that their primary entry point (the `main` key of their `package.json`) points to a module that exports a default function, which acts as a default configuration loader for that package. + +Add-ons are applied in the order they are declared in the `addons` key of {file}`package.json` or programatically via a provided configuration file. +Add-ons can override configuration coming from other add-ons, providing a hierarchy of configuration stacks. + +An add-on can be published in an npm registry, just as any other package. +However, add-ons are meant to not be transpiled, but built along with your app code. +They can be released as "source" packages or used directly in your app as local code. + +Add-ons can define shadowed components. +"Component shadowing" is a technique for overriding modules of other packages at build time. +This technique builds upon the `resolve.aliases` facilities of bundlers, so modules can be replaced when the app is being built. + +Add-ons can be chained, where each one can configure the app in some way. +If needed, each add-on in the chain can override or extend the previous configuration that other add-ons set. +Thus, the order in which you register add-ons matters. diff --git a/packages/registry/docs/conceptual-guides/component-registry.md b/packages/registry/docs/conceptual-guides/component-registry.md new file mode 100644 index 0000000000..08fb9226d9 --- /dev/null +++ b/packages/registry/docs/conceptual-guides/component-registry.md @@ -0,0 +1,20 @@ +--- +myst: + html_meta: + "description": "An explanation of the component registry in @plone/registry" + "property=og:description": "An explanation of the component registry in @plone/registry" + "property=og:title": "Component registry" + "keywords": "@plone/registry, registry, component" +--- + +# Component registry + +The configuration registry stores a component registry in itself. +The component registry is a mapping of names to components. +You can look up a name, and receive a component that you can reference in your code. +This provides an alternative, and more convenient, way to customize components in a pluggable way. + +You can programmatically override such registrations from your add-on or projects because it's stored in the configuration registry. +You can customize a component without using shadowing at all, if the code that uses the component retrieves from the component registry, rather than import it directly. +You can even have modifiers to the component registrations through dependencies. +Thus you can adapt the call, given an array of such dependencies. diff --git a/packages/registry/docs/conceptual-guides/configuration-registry.md b/packages/registry/docs/conceptual-guides/configuration-registry.md new file mode 100644 index 0000000000..c1fd19db20 --- /dev/null +++ b/packages/registry/docs/conceptual-guides/configuration-registry.md @@ -0,0 +1,78 @@ +--- +myst: + html_meta: + "description": "An explanation of the configuration registry in @plone/registry" + "property=og:description": "An explanation of the configuration registry in @plone/registry" + "property=og:title": "Configuration registry" + "keywords": "@plone/registry, registry, configuration" +--- + +# Configuration registry + +The configuration registry supplements the add-on registry. +They both work together to provide extensibility and pluggability capabilities. +The configuration registry is a facility that stores app configuration to share in the app. +The add-ons save configuration from the registry using their default export function on app bootstrap time. +They retrieve this configuration as needed by the functionality and components they expose. + +## Example use case - Pluggable block system + +Let's say that your app is the user interface of a content management system (CMS). +This CMS uses blocks as its main fundamental unit of content. +The pages that the CMS builds are made up of these blocks. +The CMS has some basic available blocks, yet it's a requirement that integrators can register more blocks in a pluggable way. +This app will use the add-on registry to extend the basic CMS capabilities, so an external add-on can supplement their own add-ons to those in the basic CMS. + +Let's assume we've defined a key in the registry `config.blocks.blocksConfig`, and defined a way to register the available blocks in the CMS as the keys in that object in the configuration registry: + +```js + config.blocks.blocksConfig.faq_viewer = { + id: 'faq_viewer', + title: 'FAQ Viewer', + edit: FAQBlockEdit, + view: FAQBlockView, + icon: chartIcon, + group: 'common', + restricted: false, + mostUsed: true, + sidebarTab: 1, + }; +``` + +The configuration registry will have other keys already set by default, which will compose the initial set of basic blocks used by the CMS. +Then the CMS will populate the available blocks in the user interface. + +The add-on is meant to extend the initial configuration. +From the default export function of our add-on, you should provide the configuration of the new block: + +```ts +export default function applyConfig(config: ConfigData) { + config.blocks.blocksConfig.faq_viewer = { + id: 'faq_viewer', + title: 'FAQ Viewer', + edit: FAQBlockEdit, + view: FAQBlockView, + icon: chartIcon, + group: 'common', + restricted: false, + mostUsed: true, + sidebarTab: 1, + }; + + return config; +} +``` + +Once the app starts, the add-on registry will execute, in order, all the registered add-ons' default export functions, configuring the new block. +The add-on will then become available to the CMS when it asks the configuration registry for it. + + +## Configuration registry artifacts + +The configuration registry also stores special elements that can be queried and retrieved in a pluggable way. + +- Components +- Slots +- Utilities + +Some of the components are particular to the use case of a CMS, such as slots, but the abstraction can be ported and applied to different scenarios. diff --git a/packages/registry/docs/conceptual-guides/utility-registry.md b/packages/registry/docs/conceptual-guides/utility-registry.md new file mode 100644 index 0000000000..5c0d284bae --- /dev/null +++ b/packages/registry/docs/conceptual-guides/utility-registry.md @@ -0,0 +1,14 @@ +--- +myst: + html_meta: + "description": "An explanation of the utility registry in @plone/registry" + "property=og:description": "An explanation of the utility registry in @plone/registry" + "property=og:title": "Utility registry" + "keywords": "@plone/registry, registry, utility" +--- + +# Utility registry + +The configuration registry stores a utility registry in itself. +The component registry is a mapping of a `name` and a `type` to a method or function. +The utility registry works similarly, but for methods and functions, and with additional query argument `type`. diff --git a/packages/registry/docs/conf.py b/packages/registry/docs/conf.py new file mode 100644 index 0000000000..796fc4b620 --- /dev/null +++ b/packages/registry/docs/conf.py @@ -0,0 +1,297 @@ +# Configuration file for the Sphinx documentation builder. +# Plone Documentation build configuration file + + +# -- Path setup -------------------------------------------------------------- + +from datetime import datetime + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath(".")) + +import os +import json + + +# -- Project information ----------------------------------------------------- + +project = "@plone/registry documentation" +copyright = "Plone Foundation" +author = "Plone Community" +trademark_name = "Plone" +now = datetime.now() +year = str(now.year) + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +with open( + os.path.join(os.path.abspath("."), "../package.json"), "r" +) as package_json: + data = package_json.read() + +version_from_package_json = json.loads(data)["version"] + +if version_from_package_json: + # The short X.Y version. + version = version_from_package_json + # The full version, including alpha/beta/rc tags. + release = version_from_package_json +else: + version = "1.8.0" + release = "1.8.0" + + +# -- General configuration ---------------------------------------------------- + +# Add any paths that contain templates here, relative to this directory. +# templates_path = ["_templates"] + +# Add any Sphinx extension module names here, as strings. +# They can be extensions coming with Sphinx (named "sphinx.ext.*") +# or your custom ones. +extensions = [ + "myst_parser", + "sphinx.ext.intersphinx", + "sphinx.ext.todo", + "sphinx_copybutton", + "sphinxext.opengraph", +] + + +# If true, the Docutils Smart Quotes transform, originally based on SmartyPants +# (limited to English) and currently applying to many languages, will be used +# to convert quotes and dashes to typographically correct entities. +# Note to maintainers: setting this to `True` will cause contractions and +# hyphenated words to be marked as misspelled by spellchecker. +smartquotes = False + +# The name of the Pygments (syntax highlighting) style to use. +# pygments_style = "sphinx.pygments_styles.PyramidStyle" +pygments_style = "sphinx" + +# Options for the linkcheck builder +# Ignore localhost +linkcheck_ignore = [ + # TODO: Before release, clean up any links to ignore + r"http://127.0.0.1", + r"http://localhost", + # Ignore pages that require authentication + r"https://github.com/plone/volto/issues/new/choose", # requires auth + # Ignore github.com pages with anchors + r"https://github.com/.*#.*", + # Ignore other specific anchors +] +linkcheck_anchors = True +linkcheck_timeout = 5 +linkcheck_retries = 1 + +# The suffix of source filenames. +source_suffix = { + ".md": "markdown", + ".bugfix": "markdown", + ".breaking": "markdown", + ".documentation": "markdown", + ".feature": "markdown", + ".internal": "markdown", +} + +# The master toctree document. +master_doc = "index" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [ +] + +suppress_warnings = [ + # "toc.excluded", # Suppress `WARNING: document isn't included in any toctree` + "toc.not_readable", # Suppress `WARNING: toctree contains reference to nonexisting document 'news*'` +] + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = "plone_sphinx_theme" +html_logo = "_static/logo.svg" +html_favicon = "_static/favicon.ico" +html_theme_options = { + "article_header_start": ["toggle-primary-sidebar"], + "extra_footer": """

The text and illustrations in this website are licensed by the Plone Foundation under a Creative Commons Attribution 4.0 International license. Plone and the Plone® logo are registered trademarks of the Plone Foundation, registered in the United States and other countries. For guidelines on the permitted uses of the Plone trademarks, see https://plone.org/foundation/logo. All other trademarks are owned by their respective owners.

+

Pull request previews by Read the Docs.

""", + "footer_end": ["version.html"], + "icon_links": [ + { + "name": "GitHub", + "url": "https://github.com/plone/volto", + "icon": "fa-brands fa-square-github", + "type": "fontawesome", + "attributes": { + "target": "_blank", + "rel": "noopener me", + "class": "nav-link custom-fancy-css" + } + }, + { + "name": "Mastodon", + "url": "https://plone.social/@plone", + "icon": "fa-brands fa-mastodon", + "type": "fontawesome", + "attributes": { + "target": "_blank", + "rel": "noopener me", + "class": "nav-link custom-fancy-css" + } + }, + { + "name": "X (formerly Twitter)", + "url": "https://x.com/plone", + "icon": "fa-brands fa-square-x-twitter", + "type": "fontawesome", + "attributes": { + "target": "_blank", + "rel": "noopener me", + "class": "nav-link custom-fancy-css" + } + }, + ], + "logo": { + "text": "@plone/registry Documentation", + }, + "navigation_with_keys": True, + "path_to_docs": "docs", + "repository_branch": "main", + "repository_url": "https://github.com/plone/volto/tree/main/packages/registry", + "search_bar_text": "Search", # TODO: Confirm usage of search_bar_text in plone-sphinx-theme + "use_edit_page_button": True, + "use_issues_button": True, + "use_repository_button": True, +} + +# Announce that we have an opensearch plugin +# https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-html_use_opensearch +html_use_opensearch = "https://plone-registry.readthedocs.io/" # TODO: Confirm usage of opensearch in theme + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +html_title = "%(project)s v%(release)s" % {"project": project, "release": release} + +html_css_files = ["custom.css", ("print.css", {"media": "print"})] + +# If false, no index is generated. +html_use_index = True + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +html_title = "%(project)s v%(release)s" % {"project": project, "release": release} + +html_extra_path = [ + "robots.txt", +] + +html_static_path = [ + "_static", +] + + +# -- Options for MyST markdown conversion to HTML ----------------------------- + +# For more information see: +# https://myst-parser.readthedocs.io/en/latest/syntax/optional.html +myst_enable_extensions = [ + "deflist", # Support definition lists. + # https://myst-parser.readthedocs.io/en/latest/syntax/optional.html#definition-lists + "linkify", # Identify "bare" web URLs and add hyperlinks. + "colon_fence", # You can also use ::: delimiters to denote code fences,\ + # instead of ```. + "html_image", # For inline images. See https://myst-parser.readthedocs.io/en/latest/syntax/optional.html#html-images +] + + +# -- Intersphinx configuration ---------------------------------- + +# This extension can generate automatic links to the documentation of objects +# in other projects. Usage is simple: whenever Sphinx encounters a +# cross-reference that has no matching target in the current documentation set, +# it looks for targets in the documentation sets configured in +# intersphinx_mapping. A reference like :py:class:`zipfile.ZipFile` can then +# linkto the Python documentation for the ZipFile class, without you having to +# specify where it is located exactly. +# +# https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html +# +intersphinx_mapping = { + "plone": ("https://6.docs.plone.org/", None), + "python": ("https://docs.python.org/3/", None), + "training": ("https://training.plone.org/", None), +} + + +# -- OpenGraph configuration ---------------------------------- + +ogp_site_url = "https://plone-registry.readthedocs.io/" +ogp_description_length = 200 +ogp_image = "https://plone-registry.readthedocs.io/en/latest/_static/Plone_logo_square.png" +ogp_site_name = "@plone/registry Documentation" +ogp_type = "website" +ogp_custom_meta_tags = [ + '', +] + + +# -- Options for sphinx.ext.todo ----------------------- +# See http://sphinx-doc.org/ext/todo.html#confval-todo_include_todos +todo_include_todos = True + + +# -- Options for HTML help output ------------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = "PloneRegistryDocumentation" + + +# -- Options for LaTeX output ------------------------------------------------- + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]) +latex_documents = [ + ( + "index", + "PloneRegistryDocumentation.tex", + "@plone/registry Documentation", + "Plone Community", + "manual", + ), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +latex_logo = "_static/logo_2x.png" + + +# An extension that allows replacements for code blocks that +# are not supported in `rst_epilog` or other substitutions. +# https://stackoverflow.com/a/56328457/2214933 +def source_replace(app, docname, source): + result = source[0] + for key in app.config.source_replacements: + result = result.replace(key, app.config.source_replacements[key]) + source[0] = result + + +# Dict of replacements. +source_replacements = { + "{NVM_VERSION}": "0.39.5", +} + + +def setup(app): + app.add_config_value("source_replacements", {}, True) + app.connect("source-read", source_replace) diff --git a/packages/registry/docs/how-to-guides/access-registry.md b/packages/registry/docs/how-to-guides/access-registry.md new file mode 100644 index 0000000000..cbe6923633 --- /dev/null +++ b/packages/registry/docs/how-to-guides/access-registry.md @@ -0,0 +1,20 @@ +--- +myst: + html_meta: + "description": "How to access the configuration registry in @plone/registry" + "property=og:description": "How to access the configuration registry in @plone/registry" + "property=og:title": "Access the configuration registry" + "keywords": "@plone/registry, registry, configuration, guide" +--- + +# Access the configuration registry + +You can access the configuration registry as follows. + +```ts +import config from '@plone/registry' + +const blocksConfig = config.blocks.blocksConfig +``` + +This method assumes that either you previously created a `blocksConfig` key in `blocks` in your add-on, or another add-on sets it. diff --git a/packages/registry/docs/how-to-guides/instantiate-registry.md b/packages/registry/docs/how-to-guides/instantiate-registry.md new file mode 100644 index 0000000000..f915e983fe --- /dev/null +++ b/packages/registry/docs/how-to-guides/instantiate-registry.md @@ -0,0 +1,56 @@ +--- +myst: + html_meta: + "description": "How to instantiate the registry in @plone/registry" + "property=og:description": "How to instantiate the registry in @plone/registry" + "property=og:title": "Instantiate the registry" + "keywords": "@plone/registry, registry, instantiate" +--- + +# Instantiate the registry + +The registry is instantiated in the context of your app folder. +It gets your app folder path as argument. + +```js +import path from 'path'; +import { AddonRegistry } from '@plone/registry/addon-registry'; + +const appRootPath = path.resolve('.'); +const { registry } = AddonRegistry.init(appRootPath) +``` + +You have full access to the add-on registry API in the `registry` object. + +By default, you also get these objects after calling `init`. + +```js +const { registry, addons, theme, shadowAliases } = AddonRegistry.init(appRootPath) +``` + +This can be useful for configuring your build process. + + +## Initialization + +By default, the configuration registry is empty. +It only contains the base object keys which are required for it to work properly. +These are the keys present on initialization. +The optional keys are excluded. + +```ts +export type ConfigData = { + settings: SettingsConfig | Record; + blocks: BlocksConfig | Record; + views: ViewsConfig | Record; + widgets: WidgetsConfig | Record; + addonReducers?: AddonReducersConfig; + addonRoutes?: AddonRoutesConfig; + slots: SlotsConfig | Record; + components: ComponentsConfig | Record; + utilities: UtilitiesConfig | Record; + experimental?: ExperimentalConfig; +}; +``` + +In the context of a Volto app, the registry gets initialized by Volto by default. diff --git a/packages/registry/docs/how-to-guides/register-an-add-on.md b/packages/registry/docs/how-to-guides/register-an-add-on.md new file mode 100644 index 0000000000..874b35471d --- /dev/null +++ b/packages/registry/docs/how-to-guides/register-an-add-on.md @@ -0,0 +1,94 @@ +--- +myst: + html_meta: + "description": "How to register an add-on in @plone/registry" + "property=og:description": "How to register an add-on in @plone/registry" + "property=og:title": "Register an add-on" + "keywords": "@plone/registry, registry, add-on" +--- + +# Register an add-on + +You have two ways available to register an add-on in your app. +You can do so either through the `addons` key in your {file}`package.json` or by using a configuration file. + +```{note} +Using a configuration file is useful when you want to add some logic to the `addons` list, if you want it to be dynamic. +For example, you can make the list dynamic given an environment variable. +``` + + +## Via `addons` key in `package.json` + +The following code sample shows how to register your add-on in your app through the `addons` key in your {file}`package.json`. + +```json +{ + "name": "my-app-project", + "addons": [ + "acme-volto-foo-addon", + "@plone/some-addon", + "collective-another-volto-addon" + ] +} +``` + +The add-ons are registered in the order they are found in the `addons` key. +The last add-on takes precedence over the others. +This means that if you configure something in `acme-volto-foo-addon`, then the same thing later in `collective-another-volto-addon`, the latter configured thing will win and its configuration will be applied. + +All add-ons should set the value for the `main` entry module, such as `src/index.js`, in {file}`package.json`. +This function should have a signature of `config => config`. +That is, it should take the configuration registry object and return it, possibly mutated or changed. + +```ts +import type { ConfigType } from '@plone/registry' + +export default function applyConfig(config: ConfigType) { + return config +}; +``` + +The `addons` key ensures the add-on's main default export function is executed, being passed the configuration registry. + + +## Via a configuration file + +The configuration file can be provided via an environment variable. +You can use one of these two environment variables. + +- `REGISTRYCONFIG` +- `VOLTOCONFIG` + +The value of the environment variable must point to a file that exists relative to the app folder, that is, the one you pass to the instantiation of the add-on registry. +You can also pass the full path of the file. + +For example, if your configuration file is named {file}`my-add-on-registry-config.js` and is located at the root of your add-on package, you would set your environment variable as shown. + +```shell +set REGISTRYCONFIG="my-add-on-registry.config.js" +``` + +```{note} +This is useful when you want to provide different `addon` configuration files under different scenarios. +``` + +If the file that you specify in the environment variable exists, then `@plone/registry` uses it to configure your add-on. +If it does not exist, then `@plone/registry` looks for the configuration file in the following locations in the root of your app in order. +The first found configuration file wins. + +- {file}`registry.config.js` +- {file}`volto.config.js` + +This is an example of a configuration file. +You must define it in [CommonJS](https://en.wikipedia.org/wiki/CommonJS) format. + +```js +module.exports = { + addons: ['my-volto-config-addon'], +}; +``` + +If your app is in ESM (`"type": "module"` in {file}`package.json`), then you should use the `.cjs` suffix for the configuration file to mark it as a proper `CommonJS` file. + +If `@plone/registry` finds no configuration file, then it only relies on the configuration, if any, in the `addons` key in {file}`package.json`. diff --git a/packages/registry/docs/how-to-guides/register-and-retrieve-components.md b/packages/registry/docs/how-to-guides/register-and-retrieve-components.md new file mode 100644 index 0000000000..08e8623e0b --- /dev/null +++ b/packages/registry/docs/how-to-guides/register-and-retrieve-components.md @@ -0,0 +1,114 @@ +--- +myst: + html_meta: + "description": "How to register, retrieve, adapt, and load components in @plone/registry" + "property=og:description": "How to register, retrieve, adapt, and load components in @plone/registry" + "property=og:title": "Register and retrieve components" + "keywords": "@plone/registry, registry, register, retrieve, components" +--- + +# Register and retrieve components + +This section of the documentation describes how to register, retrieve, adapt, and load components. + + +## Register components by name + +You can register components by name, typically from an add-on or project configuration, using `config.registerComponent`. + +```js +import MyToolbarComponent from './MyToolbarComponent' + +config.registerComponent({ + name: 'Toolbar', + component: MyToolbarComponent, +}); +``` + + +## Retrieve a component from the component registry + +You can programmatically retrieve a component from the component registry using `config.getComponent`. + +```js +const Toolbar = config.getComponent('Toolbar').component +``` + +Alternatively, you can retrieve a component by using the convenience component `Component`, if you want to use it in JSX code directly. + +```jsx +import Component from '@plone/volto/components/theme/Component/Component'; + + +``` + +Note that you can pass `props` down to the retrieved component. + + +## Adapt the component + +You can register components, then retrieve them, given a list of modifiers using the `dependencies` array. + +```js +import MyTeaserNewsItemComponent from './MyTeaserNewsItemComponent' + +config.registerComponent({ + name: 'Teaser', + component: MyTeaserNewsItemComponent, + dependencies: ['News Item'], + }); +``` + +To retrieve the component, use `getComponent`. + +```js +config.getComponent({ + name: 'Teaser', + dependencies: ['News Item'], + }).component +``` + +If you have a single dependency, you can use a string instead of an array. + +You can have both, either with or without dependencies. + +```js +import MyTeaserDefaultComponent from './MyTeaserDefaultComponent' +import MyTeaserNewsItemComponent from './MyTeaserNewsItemComponent' + +config.registerComponent({ + name: 'Teaser', + component: MyTeaserDefaultComponent, + }); + +config.registerComponent({ + name: 'Teaser', + component: MyTeaserNewsItemComponent, + dependencies: 'News Item', + }); +``` + +After you register them, you can retrieve both or either of them, depending on your use case. +In the next example, given a content type value coming from the `content` prop, you can retrieve them. + +```jsx + +``` + + +## Lazy load components + +```{todo} +Test it properly. +``` + +You can lazy load the component in the registry, too, if you need it. + +```js +const MyTeaserDefaultComponent = lazy(()=> import(./MyTeaserDefaultComponent)) + +config.registerComponent({ + name: 'Teaser', + component: MyTeaserDefaultComponent, + }); +``` diff --git a/packages/registry/docs/how-to-guides/register-and-retrieve-utilities.md b/packages/registry/docs/how-to-guides/register-and-retrieve-utilities.md new file mode 100644 index 0000000000..d58fc92d4c --- /dev/null +++ b/packages/registry/docs/how-to-guides/register-and-retrieve-utilities.md @@ -0,0 +1,113 @@ +--- +myst: + html_meta: + "description": "How to register and retrieve utilities in @plone/registry" + "property=og:description": "How to register and retrieve utilities in @plone/registry" + "property=og:title": "Register and retrieve utilities" + "keywords": "@plone/registry, registry, utilities, register, retrieve" +--- + +# Register and retrieve utilities + +This section of the documentation describes how to register and retrieve utilities. + + +## Register utilities by `name` and `type` + +You can register a utility using `config.registerUtility` by using its specific `name` and `type` arguments. + +```js +config.registerUtility({ + name: 'url', + type: 'validator', + method: () => 'this is a simple validator utility', +}); +``` + +For utilities of the same `type`, you can register different `name` utilities. + +```js +config.registerUtility({ + name: 'url', + type: 'validator', + method: () => 'this is a simple URL validator utility', +}); + +config.registerUtility({ + name: 'email', + type: 'validator', + method: () => 'this is a simple email validator utility', +}); +``` + +However, if you register two utilities under the same `name`, then the latter will override the former. +Thus you can override existing utilities in your add-ons. + +```js +config.registerUtility({ + name: 'url', + type: 'validator', + method: () => 'this is a simple URL validator utility', +}); + +config.registerUtility({ + name: 'url', + type: 'validator', + method: () => 'this registered URL validator utility is the last defined, and therefore overrides all previous utilities with the same `name`', +}); +``` + + +## Register utilities using a `dependencies` object + +It is possible to register utilities using a `dependencies` object. +This is useful to further specify the utility. + +```js +config.registerUtility({ + name: 'email', + type: 'validator', + dependencies: { fieldType: 'email' }, + method: () => 'this is an email validator utility with dependencies for email', +}); +``` + + +## Retrieve a specific utility + +You can retrieve one specific utility using `config.getUtility`, given the `name` and `type`. + +```js +config.getUtility({ name: 'url', type: 'validator' }).method() +``` + +You can do the same using a `dependencies` object. + +```js +config.getUtility({ + name: 'email', + dependencies: { fieldType: 'string' }, + type: 'validator', +}).method() +``` + + +### Retrieve groups of utilities + +You can retrieve all utilities registered under the same `type`. + +```js +config.getUtilities({ type: 'validator' }) +``` + +You can do the same using a `dependencies` object. + +```js +config.getUtilities({ + type: 'validator', + dependencies: { fieldType: 'string' }, +}).length +``` + +This is useful when building pluggable systems, so you can query all the utilities present in the registry. +For example, retrieve all validator utilities with the `fieldType` of `string`. diff --git a/packages/registry/docs/how-to-guides/shadow-a-component.md b/packages/registry/docs/how-to-guides/shadow-a-component.md new file mode 100644 index 0000000000..90179a1f04 --- /dev/null +++ b/packages/registry/docs/how-to-guides/shadow-a-component.md @@ -0,0 +1,61 @@ +--- +myst: + html_meta: + "description": "How to shadow a component or module in @plone/registry" + "property=og:description": "How to shadow a component or module in @plone/registry" + "property=og:title": "Shadow a component or module" + "keywords": "@plone/registry, registry, shadow, component" +--- + +# Shadow a component or module + +Component or module shadowing is a technique that allows you to define an alternative module for a specific module. +You normally would want to override a module from another add-on. +This add-on should not be transpiled. + +This technique relies on the `resolve.alias` feature of the bundlers, so the module is effectively being replaced by the alternative one supplied. +You will need to modify some imports in the alternative module to comply with the new placement and convert relative imports to absolute ones. + +To override the component, first, you should identify the component you want to shadow in the package. +Then, replicate the same folder structure that the original component has in the source code and place it inside the `customizations` folder of your add-on. + +Start by using the name of the package you want to shadow. +If the package has a namespace, then use a folder to define it. + +To identify a component to shadow, you can use several approaches. +The primary method uses [React Developer Tools](https://chromewebstore.google.com/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi). +You can inspect the app and find out the name of the component (the name +of the tag), then search for it in the source code. +Alternatively, you can browse the contents of the source package you want to shadow by searching for it inside {file}`node_modules` of your app folder. + + +## Example: customize the `Logo` resource + +To replace the `Logo` resource, your folder structure needs to match the folder structure of the package in the `customizations` folder. +The `Logo` resource is located in the `@plone/slots` package in the {file}`components/Logo/Logo.svg` file. +├── slots + +```text +node_modules +└── @plone + └── slots + └── components + └── Logo.svg +``` + +The structure inside your `customizations` of the component shadowing the original should be {file}`src/customizations/@plone/slots/components/Logo/Logo.svg`. + +```text +src +└── customizations + └── @plone + └── slots + └── components + └── Logo.svg +``` + +```{warning} +When upgrading add-ons in your project, it's important to review any shadowed components from the updated add-on. +Changes in the add-on's public API could potentially break your application. +Ensure that your shadowed components are updated to align with the new specifications of the original module. +``` diff --git a/packages/registry/docs/index.md b/packages/registry/docs/index.md new file mode 100644 index 0000000000..ad433cc9b6 --- /dev/null +++ b/packages/registry/docs/index.md @@ -0,0 +1,43 @@ +--- +myst: + html_meta: + "description": "@plone/registry provides support for building an add-on and configuration registry with infrastructure for JavaScript and TypeScript-based apps." + "property=og:description": "@plone/registry provides support for building an add-on and configuration registry with infrastructure for JavaScript and TypeScript-based apps." + "property=og:title": "@plone/registry" + "keywords": "@plone/registry, registry, add-on, configuration, component, utility, JavaScript, TypeScript, app" +--- + +# `@plone/registry` + +`@plone/registry` provides support for building an add-on and configuration registry with infrastructure for JavaScript and TypeScript-based apps. + +As a developer when you build an app, regardless of the framework and technologies used, it's a one-off app. +That means you have to build something that has very specific requirements, behavior, and look and feel. + +Sometimes you need to build something generic that is pluggable and extensible. +In the JavaScript and TypeScript ecosystem, this is often quite complex, and the existing frameworks do not provide the means to do this. +`@plone/registry` helps developers extend their apps in a pluggable way. + + +```{toctree} +:maxdepth: 1 +:hidden: +:caption: How-to guides +how-to-guides/instantiate-registry +how-to-guides/register-an-add-on +how-to-guides/access-registry +how-to-guides/register-and-retrieve-components +how-to-guides/register-and-retrieve-utilities +how-to-guides/shadow-a-component +``` + + +```{toctree} +:maxdepth: 1 +:hidden: +:caption: Conceptual guides +conceptual-guides/add-on-registry +conceptual-guides/configuration-registry +conceptual-guides/component-registry +conceptual-guides/utility-registry +``` diff --git a/packages/registry/docs/robots.txt b/packages/registry/docs/robots.txt new file mode 100644 index 0000000000..fa4599903a --- /dev/null +++ b/packages/registry/docs/robots.txt @@ -0,0 +1,8 @@ +# Disallow all user agents from the following directories and files +User-agent: * +Disallow: /_sources/ +Disallow: /.doctrees/ +Disallow: /*.txt$ +Disallow: /.buildinfo$ +Disallow: /objects.inv$ +Sitemap: https://plone-registry.readthedocs.io/sitemap.xml diff --git a/packages/registry/news/6399.breaking b/packages/registry/news/6399.breaking new file mode 100644 index 0000000000..d0315478f6 --- /dev/null +++ b/packages/registry/news/6399.breaking @@ -0,0 +1,6 @@ +Moved the package to ESM and refactored the add-on registry scripts to TypeScript. @sneridagh +Breaking: +- For maximum compatibility with CommonJS builds, the default exports have been moved to named exports. +- The modules affected are now built, and the import paths have changed, too. +- These changes force the modification in imports in a couple of files. +Please see the [Upgrade Guide](https://6.docs.plone.org/volto/upgrade-guide/index.html). diff --git a/packages/registry/news/6399.feature b/packages/registry/news/6399.feature new file mode 100644 index 0000000000..1a5f49ddbc --- /dev/null +++ b/packages/registry/news/6399.feature @@ -0,0 +1 @@ +Added an experimental Vite plugin. @sneridagh diff --git a/packages/registry/package.json b/packages/registry/package.json index 5b4d3e8284..78f14702d7 100644 --- a/packages/registry/package.json +++ b/packages/registry/package.json @@ -31,16 +31,36 @@ "publishConfig": { "access": "public" }, + "type": "module", "source": "src/index.ts", - "main": "dist/main.js", - "module": "dist/module.js", + "main": "dist/index.cjs", + "module": "dist/index.js", "types": "dist/types.d.ts", "exports": { - "./src/*": "./src/*.js", + "./src/*": "./src/*.cjs", + "./addon-registry": { + "require": "./dist/cjs/addon-registry.cjs", + "import": "./dist/esm/addon-registry.js", + "types": "./dist/esm/addon-registry.d.ts" + }, + "./create-addons-loader": { + "require": "./dist/cjs/create-addons-loader.cjs", + "import": "./dist/esm/create-addons-loader.js", + "types": "./dist/esm/create-addons-loader.d.ts" + }, + "./create-theme-loader": { + "require": "./dist/cjs/create-theme-loader.cjs", + "import": "./dist/esm/create-theme-loader.js", + "types": "./dist/esm/create-theme-loader.d.ts" + }, + "./vite-plugin": { + "import": "./vite-plugin.js", + "types": "./vite-plugin.d.ts" + }, ".": { "types": "./dist/types.d.ts", - "import": "./dist/module.js", - "require": "./dist/main.js" + "import": "./dist/index.js", + "require": "./dist/index.cjs" } }, "targets": { @@ -50,9 +70,12 @@ }, "scripts": { "watch": "parcel watch", - "build": "parcel build", - "build:force": "parcel build --no-cache", + "build": "parcel build && pnpm build:node:esm && pnpm build:node:cjs", + "build:force": "rm -rf dist && parcel build --no-cache && pnpm build:node:esm && pnpm build:node:cjs", + "build:node:esm": "tsc --project tsconfig.node.json || true", + "build:node:cjs": "tsc --project tsconfig.node.json --module commonjs --moduleResolution Node --outDir dist/cjs || true && make rename-to-cjs", "test": "vitest", + "test:debug": "vitest --inspect-brk --no-file-parallelism registry", "dry-release": "release-it --dry-run", "release": "release-it", "release-major-alpha": "release-it major --preRelease=alpha", @@ -71,20 +94,26 @@ "crypto-random-string": "3.2.0", "debug": "4.3.2", "dependency-graph": "0.10.0", - "glob": "7.1.6" + "glob": "^10.4.5", + "tmp": "0.2.1" }, "devDependencies": { "@parcel/packager-ts": "^2.12.0", "@parcel/transformer-typescript-types": "^2.12.0", "@plone/types": "workspace:*", + "@types/debug": "^4.1.12", + "@types/glob": "^8.1.0", + "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "@types/tmp": "^0.2.6", "parcel": "^2.12.0", "react": "^18.2.0", "react-dom": "^18.2.0", "release-it": "16.2.1", "tsconfig": "workspace:*", "typescript": "^5.6.3", + "vite": "^5.4.8", "vitest": "^2.1.3" } } diff --git a/packages/registry/src/addon-registry.js b/packages/registry/src/addon-registry/addon-registry.ts similarity index 65% rename from packages/registry/src/addon-registry.js rename to packages/registry/src/addon-registry/addon-registry.ts index 26ae57555c..576d439d4d 100644 --- a/packages/registry/src/addon-registry.js +++ b/packages/registry/src/addon-registry/addon-registry.ts @@ -1,64 +1,120 @@ /* eslint no-console: 0 */ -const glob = require('glob').sync; -const path = require('path'); -const fs = require('fs'); -const debug = require('debug')('shadowing'); -const { DepGraph } = require('dependency-graph'); - -function getPackageBasePath(base) { +import { globSync as glob } from 'glob'; +import path from 'path'; +import fs from 'fs'; +import _debug from 'debug'; +import { DepGraph } from 'dependency-graph'; + +const debug = _debug('shadowing'); + +export type Package = { + name: string; + version: string; + isPublishedPackage: boolean; + isRegisteredAddon: boolean; + modulePath: string; + packageJson: string; + basePath?: string; + tsConfigPaths?: [string, any] | null; + addons: Array; + razzleExtender?: string; + eslintExtender?: string; +}; +type VoltoConfigJS = { + addons: Array; + theme: string; +}; +type Aliases = Record; +type AliasesObject = { find: string; replacement: string }[]; +type CoreAddons = { [x: string]: { package: string } }; +type PackageJsonObject = { + type: 'module' | 'commonjs'; + addons: Array; + coreAddons: CoreAddons; + theme: string; + customizationPaths: string[]; +}; + +type flatAliases = Record; + +type AddonRegistryGet = { + /** The ordered list of addons */ + addons: Array; + /** The theme name */ + theme: string; + /** The customizations (shadows) aliases */ + shadowAliases: AliasesObject; + /** The add-ons aliases - Only for Volto add-ons for which code lives inside `src` */ + addonAliases: AliasesObject; +}; + +function getPackageBasePath(base: string) { while (!fs.existsSync(`${base}/package.json`)) { base = path.join(base, '../'); } return path.resolve(base); } -function fromEntries(pairs) { - const res = {}; +function fromEntries(pairs: [string, any][]) { + const res: { [key: string]: any } = {}; pairs.forEach((p) => { res[p[0]] = p[1]; }); return res; } -function buildDependencyGraph(addons, extractDependency) { +function flatAliasesToObject(flatAliases: flatAliases): AliasesObject { + return Object.entries(flatAliases).map(([key, value]) => ({ + find: key, + replacement: value, + })); +} + +function buildDependencyGraph( + addons: Array, + extractDependency: (name: string) => Array, +) { // getAddonsLoaderChain - const graph = new DepGraph({ circular: true }); + const graph = new DepGraph({ circular: true }); graph.addNode('@root'); const seen = ['@root']; - const stack = [['@root', addons]]; + const stack: Array<[string, Array]> = [['@root', addons]]; while (stack.length > 0) { - const [pkgName, addons] = stack.shift(); - if (!graph.hasNode(pkgName)) { - graph.addNode(pkgName, []); - } - - if (!seen.includes(pkgName)) { - stack.push([pkgName, extractDependency(pkgName)]); - seen.push(pkgName); - } - - addons.forEach((loaderString) => { - const [name, extra] = loaderString.split(':'); - if (!graph.hasNode(name)) { - graph.addNode(name, []); + const [pkgName, addons] = stack.shift() || []; + if (pkgName && addons) { + if (!graph.hasNode(pkgName)) { + graph.addNode(pkgName, []); } - const data = graph.getNodeData(name) || []; - if (extra) { - extra.split(',').forEach((funcName) => { - if (!data.includes(funcName)) data.push(funcName); - }); + if (!seen.includes(pkgName)) { + stack.push([pkgName, extractDependency(pkgName)]); + seen.push(pkgName); } - graph.setNodeData(name, data); - graph.addDependency(pkgName, name); + addons.forEach((loaderString) => { + const [name, extra] = loaderString.split(':'); + if (!graph.hasNode(name)) { + graph.addNode(name, []); + } - if (!seen.includes(name)) { - stack.push([name, extractDependency(name)]); - } - }); + const data = graph.getNodeData(name) || []; + if (extra) { + extra.split(',').forEach((funcName) => { + // @ts-expect-error TODO: fix this + if (!data.includes(funcName)) data.push(funcName); + }); + } + graph.setNodeData(name, data); + + graph.addDependency(pkgName, name); + + if (!seen.includes(name)) { + stack.push([name, extractDependency(name)]); + } + }); + } } return graph; @@ -68,7 +124,7 @@ function buildDependencyGraph(addons, extractDependency) { * Given an addons loader string, it generates an addons loader string with * a resolved chain of dependencies */ -function getAddonsLoaderChain(graph) { +function getAddonsLoaderChain(graph: DepGraph) { return graph.dependenciesOf('@root').map((name) => { const extras = graph.getNodeData(name) || [].join(','); return extras.length ? `${name}:${extras}` : name; @@ -92,26 +148,29 @@ function getAddonsLoaderChain(graph) { * addons to customize the webpack configuration) * */ -class AddonConfigurationRegistry { - constructor(projectRootPath) { - const packageJson = (this.packageJson = require( - path.join(projectRootPath, 'package.json'), +class AddonRegistry { + public packageJson: PackageJsonObject; + public voltoConfigJS: VoltoConfigJS; + public projectRootPath: string; + public isVoltoProject: boolean; + public voltoPath: string; + public coreAddons: CoreAddons; + public resultantMergedAddons: Array; + public addonNames: Array; + public packages: Record; + public customizations: any; + public theme: any; + public dependencyGraph: DepGraph; + + constructor(projectRootPath: string) { + const packageJson = (this.packageJson = JSON.parse( + fs.readFileSync(path.join(projectRootPath, 'package.json'), { + encoding: 'utf-8', + }), )); - this.voltoConfigJS = {}; + // Loads the dynamic config, if any - if (process.env.VOLTOCONFIG) { - if (fs.existsSync(path.resolve(process.env.VOLTOCONFIG))) { - const voltoConfigPath = path.resolve(process.env.VOLTOCONFIG); - console.log(`Using volto.config.js in: ${voltoConfigPath}`); - this.voltoConfigJS = require(voltoConfigPath); - } - } else if (fs.existsSync(path.join(projectRootPath, 'volto.config.js'))) { - this.voltoConfigJS = require( - path.join(projectRootPath, 'volto.config.js'), - ); - } else { - this.voltoConfigJS = {}; - } + this.voltoConfigJS = this.getRegistryConfig(projectRootPath); this.projectRootPath = projectRootPath; this.isVoltoProject = packageJson.name !== '@plone/volto'; @@ -123,15 +182,21 @@ class AddonConfigurationRegistry { this.coreAddons = packageJson.name === '@plone/volto' ? packageJson.coreAddons || {} - : require(`${getPackageBasePath(this.voltoPath)}/package.json`) - .coreAddons || {}; + : JSON.parse( + fs.readFileSync( + `${getPackageBasePath(this.voltoPath)}/package.json`, + 'utf-8', + ), + ).coreAddons || {}; this.resultantMergedAddons = [ ...(packageJson.addons || []), ...(this.voltoConfigJS.addons || []), ]; - this.addonNames = this.resultantMergedAddons.map((s) => s.split(':')[0]); + this.addonNames = this.resultantMergedAddons.map( + (s: string) => s.split(':')[0], + ); this.packages = {}; this.customizations = new Map(); @@ -161,22 +226,77 @@ class AddonConfigurationRegistry { this.initAddonExtenders(); } + public get(): AddonRegistryGet { + return { + addons: this.getAddonDependencies(), + theme: this.theme, + addonAliases: flatAliasesToObject(this.getResolveAliases()), + shadowAliases: flatAliasesToObject(this.getAddonCustomizationPaths()), + }; + } + + public static init(projectRootPath: string) { + const registry = new AddonRegistry(projectRootPath); + return { + registry, + addons: registry.getAddonDependencies(), + theme: registry.theme, + shadowAliases: flatAliasesToObject(registry.getAddonCustomizationPaths()), + }; + } + + isESM = () => this.packageJson.type === 'module'; + + getRegistryConfig(projectRootPath: string) { + let config: VoltoConfigJS = { + addons: [], + theme: '', + }; + const CONFIGMAP = { + REGISTRYCONFIG: this.isESM() + ? 'registry.config.cjs' + : 'registry.config.js', + VOLTOCONFIG: this.isESM() ? 'volto.config.cjs' : 'volto.config.js', + }; + + for (const key in CONFIGMAP) { + if (process.env[key]) { + const resolvedPath = path.resolve(process.env[key]); + if (fs.existsSync(resolvedPath)) { + const voltoConfigPath = resolvedPath; + console.log(`Using configuration file in: ${voltoConfigPath}`); + config = require(voltoConfigPath); + break; + } + } else if (fs.existsSync(path.join(projectRootPath, CONFIGMAP[key]))) { + config = require(path.join(projectRootPath, CONFIGMAP[key])); + break; + } + } + + return config; + } + /** * Gets the `tsconfig.json` `compilerOptions.baseUrl` and `compilerOptions.paths` * Returns a tuple `[baseUrl, pathsConfig]` * */ - getTSConfigPaths(rootPath = this.projectRootPath) { - let configFile; + getTSConfigPaths( + rootPath = this.projectRootPath, + ): [string, Record | undefined] { + let configFile: string | undefined; if (fs.existsSync(`${rootPath}/tsconfig.json`)) configFile = `${rootPath}/tsconfig.json`; else if (fs.existsSync(`${rootPath}/jsconfig.json`)) configFile = `${rootPath}/jsconfig.json`; - let pathsConfig; - let baseUrl; + let pathsConfig: Record | undefined; + let baseUrl: string = ''; if (configFile) { - const jsConfig = require(configFile).compilerOptions; + const jsConfig = JSON.parse( + fs.readFileSync(configFile, 'utf-8'), + ).compilerOptions; pathsConfig = jsConfig.paths; baseUrl = jsConfig.baseUrl; } @@ -209,28 +329,31 @@ class AddonConfigurationRegistry { * Given an add-on name, it registers it as a development package * */ - initDevelopmentPackage(name) { + initDevelopmentPackage(name: string) { const [baseUrl, pathsConfig] = this.getTSConfigPaths(); - const packagePath = `${this.projectRootPath}/${baseUrl}/${pathsConfig[name][0]}`; - const packageJsonPath = `${getPackageBasePath(packagePath)}/package.json`; - const innerAddons = require(packageJsonPath).addons || []; - const innerAddonsNormalized = innerAddons.map((s) => s.split(':')[0]); - if (this.addonNames.includes(name) && innerAddonsNormalized.length > 0) { - innerAddonsNormalized.forEach((name) => { - if (!this.addonNames.includes(name)) this.addonNames.push(name); - }); - } - const pkg = { - modulePath: packagePath, - packageJson: packageJsonPath, - version: require(packageJsonPath).version, - isPublishedPackage: false, - isRegisteredAddon: this.addonNames.includes(name), - name, - addons: require(packageJsonPath).addons || [], - }; + if (pathsConfig && pathsConfig.hasOwnProperty(name)) { + const packagePath = `${this.projectRootPath}/${baseUrl}/${pathsConfig[name][0]}`; + const packageJsonPath = `${getPackageBasePath(packagePath)}/package.json`; + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); + const innerAddons: Array = packageJson.addons || []; + const innerAddonsNormalized = innerAddons.map((s) => s.split(':')[0]); + if (this.addonNames.includes(name) && innerAddonsNormalized.length > 0) { + innerAddonsNormalized.forEach((name) => { + if (!this.addonNames.includes(name)) this.addonNames.push(name); + }); + } + const pkg = { + modulePath: packagePath, + packageJson: packageJsonPath, + version: packageJson.version, + isPublishedPackage: false, + isRegisteredAddon: this.addonNames.includes(name), + name, + addons: packageJson.addons || [], + }; - this.packages[name] = Object.assign(this.packages[name] || {}, pkg); + this.packages[name] = Object.assign(this.packages[name] || {}, pkg); + } } /** @@ -243,11 +366,11 @@ class AddonConfigurationRegistry { this.addonNames.forEach(this.initPublishedPackage.bind(this)); } - initPublishedPackage(name) { + initPublishedPackage(name: string) { // I am in the paths list, if so, register it as a development package // instead than a published one const [, pathsConfig] = this.getTSConfigPaths(); - if (pathsConfig.hasOwnProperty(name)) { + if (pathsConfig && pathsConfig.hasOwnProperty(name)) { return this.initDevelopmentPackage(name); } @@ -255,10 +378,10 @@ class AddonConfigurationRegistry { const resolved = require.resolve(name, { paths: [this.projectRootPath] }); const basePath = getPackageBasePath(resolved); const packageJson = path.join(basePath, 'package.json'); - const pkg = require(packageJson); + const pkg = JSON.parse(fs.readFileSync(packageJson, 'utf-8')); const main = pkg.main || 'src/index.js'; const modulePath = path.dirname(require.resolve(`${basePath}/${main}`)); - const innerAddons = pkg.addons || []; + const innerAddons: Array = pkg.addons || []; const innerAddonsNormalized = innerAddons.map((s) => s.split(':')[0]); if (this.addonNames.includes(name) && innerAddonsNormalized.length > 0) { innerAddonsNormalized.forEach((name) => { @@ -290,7 +413,7 @@ class AddonConfigurationRegistry { } // An add-on from the ADDONS env var can only be a published one - initAddonFromEnvVar(name) { + initAddonFromEnvVar(name: string) { const normalizedAddonName = name.split(':')[0]; this.initPublishedPackage(normalizedAddonName); } @@ -341,7 +464,10 @@ class AddonConfigurationRegistry { } getCustomThemeAddons() { - const customThemeAddonsInfo = { + const customThemeAddonsInfo: { + variables: string[]; + main: string[]; + } = { variables: [], main: [], }; @@ -372,11 +498,11 @@ class AddonConfigurationRegistry { /** * Returns a list of aliases given the defined paths in `tsconfig.json` */ - getAliasesFromTSConfig(basePath, tsConfig) { + getAliasesFromTSConfig(basePath: string, tsConfig: [string, any]) { const [baseUrl, options] = tsConfig; const fullPathsPath = baseUrl ? `${basePath}/${baseUrl}` : basePath; - let aliases = {}; + const aliases: { [x: string]: string } = {}; Object.keys(options || {}).forEach((item) => { const name = item.replace(/\/\*$/, ''); // webpack5 allows arrays here, fix later @@ -397,12 +523,10 @@ class AddonConfigurationRegistry { * defined in the `tsconfig.json` files of the add-ons. */ getResolveAliases() { - const pairs = [ - ...Object.keys(this.packages).map((o) => [ - o, - this.packages[o].modulePath, - ]), - ]; + const pairs: [string, string][] = Object.keys(this.packages).map((o) => [ + o, + this.packages[o].modulePath, + ]); let aliasesFromTSPaths = {}; Object.keys(this.packages).forEach((o) => { @@ -410,7 +534,7 @@ class AddonConfigurationRegistry { aliasesFromTSPaths = { ...aliasesFromTSPaths, ...this.getAliasesFromTSConfig( - this.packages[o].basePath, + this.packages[o].basePath || '', this.packages[o].tsConfigPaths, ), }; @@ -435,21 +559,25 @@ class AddonConfigurationRegistry { * convention, we use a folder called "volto" inside customizations folder * and separate folder for each addon, identified by its addon (package) name. */ - getCustomizationPaths(packageJson, rootPath) { - const aliases = {}; + getCustomizationPaths(packageJson: PackageJsonObject, rootPath: string) { + const aliases: Aliases = {}; let { customizationPaths } = packageJson; if (!customizationPaths) { - customizationPaths = ['src/customizations']; + customizationPaths = ['src/customizations', 'customizations']; } customizationPaths.forEach((customizationPath) => { customizationPath = customizationPath.endsWith('/') ? customizationPath.slice(0, customizationPath.length - 1) : customizationPath; const base = path.join(rootPath, customizationPath); - const reg = []; - - // All registered addon packages (in tsconfig.json/jsconfig.json and package.json:addons) - // can be customized + const reg: Array<{ + customPath: string; + sourcePath: string; + name: string; + }> = []; + + // All registered addon packages (in tsconfig.json/jsconfig.json and + // package.json:addons) can be customized by other addons Object.values(this.packages).forEach((addon) => { const { name, modulePath } = addon; if (fs.existsSync(path.join(base, name))) { @@ -491,12 +619,14 @@ class AddonConfigurationRegistry { glob( `${customPath}/**/*.*(svg|png|jpg|jpeg|gif|ico|less|js|jsx|ts|tsx)`, ).map((filename) => { - function changeFileExtension(filePath) { + function changeFileExtension(filePath: string) { // Extract the current file extension - const currentExtension = filePath.split('.').pop(); + const currentExtension = filePath.split('.').pop() || ''; // Define the mapping between file extensions - const extensionMapping = { + const extensionMapping: { + [key: string]: string; + } = { jsx: 'tsx', tsx: 'jsx', js: 'ts', @@ -523,7 +653,7 @@ class AddonConfigurationRegistry { * * @param {*} filePath */ - function simpleSwapFileExtension(filePath) { + function simpleSwapFileExtension(filePath: string) { // Extract the current file extension const currentExtension = filePath.split('.').pop(); return filePath.replace(`.${currentExtension}`, '.jsx'); @@ -569,12 +699,12 @@ class AddonConfigurationRegistry { * `addons:volto-addonA,volto-addonB` */ getAddonCustomizationPaths() { - let aliases = {}; + let aliases: Aliases = {}; this.getAddons().forEach((addon) => { aliases = { ...aliases, ...this.getCustomizationPaths( - require(addon.packageJson), + JSON.parse(fs.readFileSync(addon.packageJson, 'utf-8')), getPackageBasePath(addon.modulePath), ), }; @@ -586,9 +716,13 @@ class AddonConfigurationRegistry { * Allow packages from addons set in env vars to customize Volto and other addons. * * Same as the above one, but specific for Volto addons coming from env vars + * + * This is no longer necessary in the pnpm setup, as all valid packages have to be + * released or declared as a workspace + * */ getAddonsFromEnvVarCustomizationPaths() { - let aliases = {}; + let aliases: Aliases = {}; if (process.env.ADDONS) { process.env.ADDONS.split(';').forEach((addon) => { const normalizedAddonName = addon.split(':')[0]; @@ -598,7 +732,10 @@ class AddonConfigurationRegistry { const packageJson = path.join(basePath, 'package.json'); aliases = { ...aliases, - ...this.getCustomizationPaths(require(packageJson), basePath), + ...this.getCustomizationPaths( + JSON.parse(fs.readFileSync(packageJson, 'utf-8')), + basePath, + ), }; } }); @@ -626,11 +763,11 @@ class AddonConfigurationRegistry { "@root" [color = red fillcolor=yellow style=filled] `; - let queue = ['@root']; - let name; + const queue = ['@root']; + let name: string; while (queue.length > 0) { - name = queue.pop(); + name = queue.pop() || ''; const deps = this.dependencyGraph.directDependenciesOf(name); for (let i = 0; i < deps.length; i++) { @@ -648,6 +785,4 @@ class AddonConfigurationRegistry { } } -module.exports = AddonConfigurationRegistry; -module.exports.getAddonsLoaderChain = getAddonsLoaderChain; -module.exports.buildDependencyGraph = buildDependencyGraph; +export { AddonRegistry, getAddonsLoaderChain, buildDependencyGraph }; diff --git a/packages/registry/src/create-addons-loader.js b/packages/registry/src/addon-registry/create-addons-loader.ts similarity index 66% rename from packages/registry/src/create-addons-loader.js rename to packages/registry/src/addon-registry/create-addons-loader.ts index 7eb5f55757..f03349693f 100644 --- a/packages/registry/src/create-addons-loader.js +++ b/packages/registry/src/addon-registry/create-addons-loader.ts @@ -1,13 +1,16 @@ -const fs = require('fs'); -const tmp = require('tmp'); -const cryptoRandomString = require('crypto-random-string'); +import fs from 'fs'; +import path from 'path'; +import tmp from 'tmp'; +import cryptoRandomString from 'crypto-random-string'; +import type { Package } from './addon-registry'; -const titleCase = (w) => w.slice(0, 1).toUpperCase() + w.slice(1, w.length); +const titleCase = (w: string) => + w.slice(0, 1).toUpperCase() + w.slice(1, w.length); /* * Transforms a package name to javascript variable name */ -function nameFromPackage(name) { +function nameFromPackage(name: string) { name = name.replace(/[@~./\\:\s]/gi, '') || cryptoRandomString({ length: 10, characters: 'abcdefghijk' }); @@ -21,19 +24,26 @@ function nameFromPackage(name) { * Creates a static file with code necessary to load the addons configuration * */ -function getAddonsLoaderCode(addons = [], addonsInfo) { +function getAddonsLoaderCode( + addons: string[], + addonsInfo: Package[], + loadProjectConfig?: boolean, +) { let buf = `/* This file is autogenerated. Don't change it directly. Instead, change the "addons" setting in your package.json file. */ -const projectConfigLoader = require('@root/config'); `; - let configsToLoad = [], + if (loadProjectConfig) { + buf += `const projectConfigLoader = require('@root/config');\n`; + } + + let configsToLoad: string[] = [], counter = 0; addons.forEach((addonConfigString) => { - let extras = []; + let extras: string[] | string[][] = []; // TODO: Improve this typing const addonConfigLoadInfo = addonConfigString.split(':'); const pkgName = addonConfigLoadInfo[0]; const defaultImport = nameFromPackage(pkgName); @@ -41,7 +51,6 @@ const projectConfigLoader = require('@root/config'); extras = addonConfigLoadInfo[1].split(','); } extras = extras.map((name) => [name, `${name}${counter++}`]); - const line = `import ${defaultImport}${ extras.length ? `, { ${extras @@ -77,8 +86,9 @@ const safeWrapper = (func) => (config) => { return res; } +${loadProjectConfig ? '' : 'const projectConfigLoader = false;'} const projectConfig = (config) => { - return typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; + return projectConfigLoader && typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; } const load = (config) => { @@ -96,21 +106,27 @@ export default load; return buf; } -module.exports = (addons, addonsInfo, { tempInProject } = {}) => { +export function createAddonsLoader( + addons: string[], + addonsInfo: Package[], + { + tempInProject, + loadProjectConfig = false, + }: { tempInProject?: boolean; loadProjectConfig?: boolean } = {}, +) { // Some frameworks do not allow to load code from outside the project. // the `tempInProject` allows to place it inside - let addonsLoaderPath; + let addonsLoaderPath: string; if (tempInProject) { - const path = require('path'); addonsLoaderPath = path.join(process.cwd(), 'src', '.addons-loader.js'); } else { addonsLoaderPath = tmp.tmpNameSync({ postfix: '.js' }); } - const code = getAddonsLoaderCode(addons, addonsInfo); + const code = getAddonsLoaderCode(addons, addonsInfo, loadProjectConfig); + // @ts-expect-error No clue why it's complaining fs.writeFileSync(addonsLoaderPath, Buffer.from(code)); return addonsLoaderPath; -}; +} -module.exports.getAddonsLoaderCode = getAddonsLoaderCode; -module.exports.nameFromPackage = nameFromPackage; +export { getAddonsLoaderCode, nameFromPackage }; diff --git a/packages/registry/src/create-theme-addons-loader.js b/packages/registry/src/addon-registry/create-theme-loader.ts similarity index 50% rename from packages/registry/src/create-theme-addons-loader.js rename to packages/registry/src/addon-registry/create-theme-loader.ts index 6b46257744..d5f4dbbc24 100644 --- a/packages/registry/src/create-theme-addons-loader.js +++ b/packages/registry/src/addon-registry/create-theme-loader.ts @@ -1,13 +1,14 @@ -const fs = require('fs'); -const tmp = require('tmp'); -const cryptoRandomString = require('crypto-random-string'); +import fs from 'fs'; +import tmp from 'tmp'; +import cryptoRandomString from 'crypto-random-string'; -const titleCase = (w) => w.slice(0, 1).toUpperCase() + w.slice(1, w.length); +const titleCase = (w: string) => + w.slice(0, 1).toUpperCase() + w.slice(1, w.length); /* * Transforms a package name to javascript variable name */ -function nameFromPackage(name) { +function nameFromPackage(name: string) { name = name.replace(/[@~./\\:\s]/gi, '') || cryptoRandomString({ length: 10, characters: 'abcdefghijk' }); @@ -21,7 +22,7 @@ function nameFromPackage(name) { * Creates a static file with code necessary to load the addons configuration * */ -function getAddonsLoaderCode(name, customThemeAddons = []) { +function getThemeLoaderCode(name, customThemeAddons = []) { let buf = `/* This file is autogenerated. Don't change it directly. Add a ./theme/_${name}.scss in your add-on to load your theme customizations in the current theme. @@ -37,42 +38,27 @@ Add a ./theme/_${name}.scss in your add-on to load your theme customizations in return buf; } -module.exports = ({ main, variables }) => { - // const addonsThemeLoaderVariablesPath = path.join( - // process.cwd(), - // 'src', - // '_variables.scss', - // ); - // const addonsThemeLoaderMainPath = path.join( - // process.cwd(), - // 'src', - // '_main.scss', - // ); - - // const addonsThemeLoaderVariablesPath = path.join( - // process.cwd(), - // 'src', - // '_variables.scss', - // ); - // const addonsThemeLoaderMainPath = path.join( - // process.cwd(), - // 'src', - // '_main.scss', - // ); - +export function createThemeAddonsLoader({ + main, + variables, +}: { + main: string[]; + variables: string[]; +}) { const addonsThemeLoaderVariablesPath = tmp.tmpNameSync({ postfix: '.scss' }); const addonsThemeLoaderMainPath = tmp.tmpNameSync({ postfix: '.scss' }); fs.writeFileSync( addonsThemeLoaderVariablesPath, - new Buffer.from(getAddonsLoaderCode('variables', variables)), + //@ts-expect-error No clue why this is erroring + new Buffer.from(getThemeLoaderCode('variables', variables)), ); fs.writeFileSync( addonsThemeLoaderMainPath, - new Buffer.from(getAddonsLoaderCode('main', main)), + //@ts-expect-error No clue why this is erroring + new Buffer.from(getThemeLoaderCode('main', main)), ); return [addonsThemeLoaderVariablesPath, addonsThemeLoaderMainPath]; -}; +} -module.exports.getAddonsLoaderCode = getAddonsLoaderCode; -module.exports.nameFromPackage = nameFromPackage; +export { getThemeLoaderCode, nameFromPackage }; diff --git a/packages/registry/src/index.ts b/packages/registry/src/index.ts index 7f229a66a8..5394254281 100644 --- a/packages/registry/src/index.ts +++ b/packages/registry/src/index.ts @@ -16,16 +16,16 @@ import type { } from '@plone/types'; export type ConfigData = { - settings: SettingsConfig; - blocks: BlocksConfig; - views: ViewsConfig; - widgets: WidgetsConfig; - addonReducers: AddonReducersConfig; - addonRoutes: AddonRoutesConfig; - slots: SlotsConfig; - components: ComponentsConfig; - utilities: UtilitiesConfig; - experimental: ExperimentalConfig; + settings: SettingsConfig | Record; + blocks: BlocksConfig | Record; + views: ViewsConfig | Record; + widgets: WidgetsConfig | Record; + addonReducers?: AddonReducersConfig; + addonRoutes?: AddonRoutesConfig; + slots: SlotsConfig | Record; + components: ComponentsConfig | Record; + utilities: UtilitiesConfig | Record; + experimental?: ExperimentalConfig; }; type GetComponentResult = { @@ -44,7 +44,15 @@ class Config { constructor() { if (!Config.instance) { - this._data = {}; + this._data = { + settings: {}, + blocks: {}, + views: {}, + widgets: {}, + slots: {}, + components: {}, + utilities: {}, + }; Config.instance = this; } @@ -205,7 +213,10 @@ class Config { return; } const { slots, data } = this._data.slots[name]; - const slotComponents = []; + const slotComponents: { + component: SlotComponent['component']; + name: string; + }[] = []; // For all enabled slots for (const slotName of slots) { // For all registered components for that slot, inversed, since the last one registered wins diff --git a/packages/registry/tsconfig.json b/packages/registry/tsconfig.json index c25bedd978..1319106020 100644 --- a/packages/registry/tsconfig.json +++ b/packages/registry/tsconfig.json @@ -17,7 +17,7 @@ "jsx": "react-jsx", "paths": {} }, - "include": ["src", "src/**/*.js"], + "include": ["src/index.ts", "src/**/*.js", "src/**/*.cjs"], "exclude": [ "node_modules", "build", diff --git a/packages/registry/tsconfig.node.json b/packages/registry/tsconfig.node.json new file mode 100644 index 0000000000..a25380a557 --- /dev/null +++ b/packages/registry/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + /* Base Options: */ + "esModuleInterop": true, + "skipLibCheck": true, + "target": "es2022", + "allowJs": true, + "resolveJsonModule": true, + "moduleDetection": "force", + "isolatedModules": true, + /* Strictness */ + "strict": true, + "noUncheckedIndexedAccess": true, + /* If transpiling with TypeScript: */ + "moduleResolution": "NodeNext", + "module": "NodeNext", + "outDir": "dist/esm", + "sourceMap": true, + /* If your code doesn't run in the DOM: */ + "lib": ["es2022"], + "declaration": true + }, + "include": ["src/addon-registry"] +} diff --git a/packages/registry/vite-plugin.d.ts b/packages/registry/vite-plugin.d.ts new file mode 100644 index 0000000000..2af076c87a --- /dev/null +++ b/packages/registry/vite-plugin.d.ts @@ -0,0 +1,5 @@ +import * as vite from 'vite'; + +declare function PloneRegistryVitePlugin(): vite.Plugin; + +export { PloneRegistryVitePlugin }; diff --git a/packages/registry/vite-plugin.js b/packages/registry/vite-plugin.js new file mode 100644 index 0000000000..6ec97dbe64 --- /dev/null +++ b/packages/registry/vite-plugin.js @@ -0,0 +1,60 @@ +import path from 'path'; +import { AddonRegistry } from '@plone/registry/addon-registry'; +import { createAddonsLoader } from '@plone/registry/create-addons-loader'; +import { createThemeAddonsLoader } from '@plone/registry/create-theme-loader'; + +export const PloneRegistryVitePlugin = () => { + const projectRootPath = path.resolve('.'); + const { registry, shadowAliases } = AddonRegistry.init(projectRootPath); + + const addonsLoaderPath = createAddonsLoader( + registry.getAddonDependencies(), + registry.getAddons(), + ); + + const [addonsThemeLoaderVariablesPath, addonsThemeLoaderMainPath] = + createThemeAddonsLoader(registry.getCustomThemeAddons()); + + const addOns = Object.keys(registry.packages); + + return { + name: 'plone-registry', + enforce: 'pre', + config: () => ({ + ssr: { + optimizeDeps: { + exclude: addOns, + }, + }, + esbuild: { + supported: { + 'top-level-await': true, //browsers can handle top-level-await features + }, + }, + optimizeDeps: { + exclude: addOns, + }, + resolve: { + alias: [ + ...shadowAliases, + // Remove in case that we have addons aliases (Volto add-ons which need the `src` path hack) + // ...addonAliases, + ...(registry.theme + ? // Load the theme aliases from the theme config + [ + { + find: 'addonsThemeCustomizationsVariables', + replacement: addonsThemeLoaderVariablesPath, + }, + { + find: 'addonsThemeCustomizationsMain', + replacement: addonsThemeLoaderMainPath, + }, + ] + : []), + { find: 'load-plone-registry-addons', replacement: addonsLoaderPath }, + ], + }, + }), + }; +}; diff --git a/packages/scripts/i18n.cjs b/packages/scripts/i18n.cjs index bd4a1a1f87..439c860e67 100755 --- a/packages/scripts/i18n.cjs +++ b/packages/scripts/i18n.cjs @@ -276,10 +276,25 @@ function main({ addonMode }) { console.log('Synchronizing messages to po files...'); syncPoByPot(); if (!addonMode) { - let AddonConfigurationRegistry; + let AddonRegistry, AddonConfigurationRegistry, registry; try { // Detect where is the registry (if we are in Volto 18 or above for either core and projects) if ( + fs.existsSync( + path.join( + projectRootPath, + '/node_modules/@plone/registry/dist/cjs/addon-registry.cjs', + ), + ) + ) { + AddonRegistry = require( + path.join( + projectRootPath, + '/node_modules/@plone/registry/dist/cjs/addon-registry.cjs', + ), + ).AddonRegistry; + // Detect where is the registry (if we are in Volto 18-alpha.46 or below) + } else if ( fs.existsSync( path.join( projectRootPath, @@ -324,7 +339,11 @@ function main({ addonMode }) { process.exit(); } console.log('Generating the language JSON files...'); - const registry = new AddonConfigurationRegistry(projectRootPath); + if (AddonConfigurationRegistry) { + registry = new AddonConfigurationRegistry(projectRootPath); + } else if (AddonRegistry) { + registry = AddonRegistry.init(projectRootPath).registry; + } poToJson({ registry, addonMode }); } console.log('done!'); diff --git a/packages/scripts/news/6399.feature b/packages/scripts/news/6399.feature new file mode 100644 index 0000000000..5558c340af --- /dev/null +++ b/packages/scripts/news/6399.feature @@ -0,0 +1 @@ +Support for the new `@plone/registry` ESM format. @sneridagh diff --git a/packages/volto/.eslintrc b/packages/volto/.eslintrc index 4e24e2badd..9b98fbf685 100644 --- a/packages/volto/.eslintrc +++ b/packages/volto/.eslintrc @@ -37,7 +37,6 @@ "map": [ ["@plone/volto", "./src"], ["@plone/volto-slate", "../volto-slate/src"], - ["@plone/registry", "../registry/src"], ["@plone/types", "../types"], ["@package", "./src"], ["@root", "./src"], diff --git a/packages/volto/.storybook/main.js b/packages/volto/.storybook/main.js index c745006748..36cb9a3017 100644 --- a/packages/volto/.storybook/main.js +++ b/packages/volto/.storybook/main.js @@ -102,8 +102,8 @@ module.exports = { [], defaultRazzleOptions, ); - const AddonConfigurationRegistry = require('@plone/registry/src/addon-registry'); - const registry = new AddonConfigurationRegistry(projectRootPath); + const { AddonRegistry } = require('@plone/registry/addon-registry'); + const { registry } = AddonRegistry.init(projectRootPath); config = lessPlugin({ registry, }).modifyWebpackConfig({ diff --git a/packages/volto/__tests__/addon-registry-project.test.js b/packages/volto/__tests__/addon-registry-project.test.js index 08d4bad832..fad432bc88 100644 --- a/packages/volto/__tests__/addon-registry-project.test.js +++ b/packages/volto/__tests__/addon-registry-project.test.js @@ -1,9 +1,11 @@ -const path = require('path'); -const AddonConfigurationRegistry = require('../../registry/src/addon-registry'); -const { buildDependencyGraph, getAddonsLoaderChain } = - AddonConfigurationRegistry; +import path from 'path'; +import { + AddonRegistry, + buildDependencyGraph, + getAddonsLoaderChain, +} from '@plone/registry/addon-registry'; -describe('AddonConfigurationRegistry - Project', () => { +describe('AddonRegistry - Project', () => { jest.mock( `${path.join( __dirname, @@ -19,14 +21,14 @@ describe('AddonConfigurationRegistry - Project', () => { it('works in a mock project directory', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); + const { registry } = AddonRegistry.init(base); const voltoPath = `${base}/node_modules/@plone/volto`; - expect(reg.projectRootPath).toStrictEqual(base); - expect(reg.voltoPath).toStrictEqual(voltoPath); + expect(registry.projectRootPath).toStrictEqual(base); + expect(registry.voltoPath).toStrictEqual(voltoPath); - expect(reg.addonNames).toStrictEqual([ + expect(registry.addonNames).toStrictEqual([ 'test-addon', 'test-released-addon', 'test-released-source-addon', @@ -35,7 +37,7 @@ describe('AddonConfigurationRegistry - Project', () => { 'test-released-unmentioned', ]); - expect(reg.packages).toEqual({ + expect(registry.packages).toEqual({ 'test-addon': { isPublishedPackage: false, modulePath: `${base}/addons/test-addon/src`, @@ -102,8 +104,8 @@ describe('AddonConfigurationRegistry - Project', () => { it('provides aliases for addons', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); - expect(reg.getResolveAliases()).toStrictEqual({ + const { registry } = AddonRegistry.init(base); + expect(registry.getResolveAliases()).toStrictEqual({ 'my-volto-config-addon': `${base}/addons/my-volto-config-addon/src`, 'test-addon': `${base}/addons/test-addon/src`, 'test-released-addon': `${base}/node_modules/test-released-addon`, @@ -115,14 +117,14 @@ describe('AddonConfigurationRegistry - Project', () => { it('provides addon extenders', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); - expect(reg.getAddonExtenders().length).toBe(1); + const { registry } = AddonRegistry.init(base); + expect(registry.getAddonExtenders().length).toBe(1); }); it('provides a list of addon records ordered by initial package declaration', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); - const addons = reg.getAddons(); + const { registry } = AddonRegistry.init(base); + const addons = registry.getAddons(); expect(addons.map((a) => a.name)).toStrictEqual([ 'test-released-unmentioned', 'test-released-dummy', @@ -135,8 +137,8 @@ describe('AddonConfigurationRegistry - Project', () => { it('provides customization paths declared in a Volto project', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); - expect(reg.getProjectCustomizationPaths()).toStrictEqual({ + const { registry } = AddonRegistry.init(base); + expect(registry.getProjectCustomizationPaths()).toStrictEqual({ '@plone/volto/LanguageSwitcher': `${base}/src/customizations/LanguageSwitcher.js`, '@plone/volto/TSComponent': `${base}/src/customizations/TSComponent.jsx`, '@plone/volto/client': `${base}/src/customizations/client.js`, @@ -148,8 +150,8 @@ describe('AddonConfigurationRegistry - Project', () => { it('provides customization paths declared in addons', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); - expect(reg.getAddonCustomizationPaths()).toStrictEqual({ + const { registry } = AddonRegistry.init(base); + expect(registry.getAddonCustomizationPaths()).toStrictEqual({ '@plone/volto/LanguageSwitcher': `${base}/node_modules/test-released-source-addon/src/customizations/LanguageSwitcher.js`, '@plone/volto/TSComponent': `${base}/node_modules/test-released-source-addon/src/customizations/TSComponent.jsx`, '@plone/volto/client': `${base}/node_modules/test-released-source-addon/src/customizations/client.js`, @@ -231,9 +233,11 @@ describe('Addon via env var - Released addon', () => { it('addons can be specified on the fly using ADDONS env var - Released addon', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); + const { registry } = AddonRegistry.init(base); expect( - Object.keys(reg.packages).includes('test-released-via-addons-env-var'), + Object.keys(registry.packages).includes( + 'test-released-via-addons-env-var', + ), ).toBe(true); }); }); @@ -255,9 +259,9 @@ describe('Addon via env var - local packages folder addon', () => { it('addons can be specified on the fly using ADDONS env var - local packages folder addon', () => { const base = path.join(__dirname, 'fixtures', 'test-volto-project'); - const reg = new AddonConfigurationRegistry(base); + const { registry } = AddonRegistry.init(base); expect( - Object.keys(reg.packages).includes( + Object.keys(registry.packages).includes( 'test-local-packages-via-addons-env-var', ), ).toBe(true); diff --git a/packages/volto/__tests__/addon-registry-volto.test.js b/packages/volto/__tests__/addon-registry-volto.test.js index 5bea088c21..79fc58af0d 100644 --- a/packages/volto/__tests__/addon-registry-volto.test.js +++ b/packages/volto/__tests__/addon-registry-volto.test.js @@ -1,14 +1,14 @@ -const path = require('path'); -const AddonConfigurationRegistry = require('../../registry/src/addon-registry'); +import path from 'path'; +import { AddonRegistry } from '@plone/registry/addon-registry'; -describe('AddonConfigurationRegistry - Volto', () => { +describe('AddonRegistry - Volto', () => { it('works in Volto', () => { const base = path.join(__dirname, '..'); - const reg = new AddonConfigurationRegistry(base); - expect(reg.projectRootPath).toStrictEqual(base); + const { registry } = AddonRegistry.init(base); + expect(registry.projectRootPath).toStrictEqual(base); // TODO: rename initPackagesFolder to proper name after the refactor - // expect(reg.addonNames).toStrictEqual(['@plone/volto-slate']); - expect(reg.packages['@plone/volto-slate'].name).toStrictEqual( + // expect(registry.addonNames).toStrictEqual(['@plone/volto-slate']); + expect(registry.packages['@plone/volto-slate'].name).toStrictEqual( '@plone/volto-slate', ); }); diff --git a/packages/volto/__tests__/create-addons-loader.test.js b/packages/volto/__tests__/create-addons-loader.test.js index 570fa10a18..dfe9d174cb 100644 --- a/packages/volto/__tests__/create-addons-loader.test.js +++ b/packages/volto/__tests__/create-addons-loader.test.js @@ -1,11 +1,51 @@ -const fs = require('fs'); -const transform = require('@babel/core').transform; - -const getLoader = require('../../registry/src/create-addons-loader'); +import fs from 'fs'; +import { transform } from '@babel/core'; +import { + createAddonsLoader, + getAddonsLoaderCode, + nameFromPackage, +} from '@plone/registry/create-addons-loader'; describe('create-addons-loader code generation', () => { - test('no addon creates simple loader', () => { - const code = getLoader.getAddonsLoaderCode([]); + test('no addon creates simple loader, default = no loadProjectConfig', () => { + const code = getAddonsLoaderCode([]); + expect(code).toBe(`/* +This file is autogenerated. Don't change it directly. +Instead, change the "addons" setting in your package.json file. +*/ + + +const addonsInfo = {}; +export { addonsInfo }; + +const safeWrapper = (func) => (config) => { + const res = func(config); + if (typeof res === 'undefined') { + throw new Error("Configuration function doesn't return config"); + } + return res; +} + +const projectConfigLoader = false; +const projectConfig = (config) => { + return projectConfigLoader && typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; +} + +const load = (config) => { + const addonLoaders = []; + if(!addonLoaders.every((el) => typeof el === "function")) { + throw new TypeError( + 'Each addon has to provide a function applying its configuration to the projects configuration.', + ); + } + return projectConfig(addonLoaders.reduce((acc, apply) => safeWrapper(apply)(acc), config)); +}; +export default load; +`); + }); + + test('no addon creates simple loader, loadProjectConfig set to true', () => { + const code = getAddonsLoaderCode([], {}, true); expect(code).toBe(`/* This file is autogenerated. Don't change it directly. Instead, change the "addons" setting in your package.json file. @@ -24,8 +64,9 @@ const safeWrapper = (func) => (config) => { return res; } + const projectConfig = (config) => { - return typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; + return projectConfigLoader && typeof projectConfigLoader.default === "function" ? projectConfigLoader.default(config) : config; } const load = (config) => { @@ -42,17 +83,14 @@ export default load; }); test('one addon creates loader', () => { - const code = getLoader.getAddonsLoaderCode(['volto-addon1']); + const code = getAddonsLoaderCode(['volto-addon1']); expect(code.indexOf("import voltoAddon1 from 'volto-addon1';") > 0).toBe( true, ); }); test('two addons create loaders', () => { - const code = getLoader.getAddonsLoaderCode([ - 'volto-addon1', - 'volto-addon2', - ]); + const code = getAddonsLoaderCode(['volto-addon1', 'volto-addon2']); expect( code.indexOf(` import voltoAddon1 from 'volto-addon1'; @@ -61,7 +99,7 @@ import voltoAddon2 from 'volto-addon2';`) > 0, }); test('one addons plus one extra creates loader', () => { - const code = getLoader.getAddonsLoaderCode(['volto-addon1:loadExtra1']); + const code = getAddonsLoaderCode(['volto-addon1:loadExtra1']); expect( code.indexOf(` import voltoAddon1, { loadExtra1 as loadExtra10 } from 'volto-addon1'; @@ -70,9 +108,7 @@ import voltoAddon1, { loadExtra1 as loadExtra10 } from 'volto-addon1'; }); test('one addons plus two extras creates loader', () => { - const code = getLoader.getAddonsLoaderCode([ - 'volto-addon1:loadExtra1,loadExtra2', - ]); + const code = getAddonsLoaderCode(['volto-addon1:loadExtra1,loadExtra2']); expect( code.indexOf(` import voltoAddon1, { loadExtra1 as loadExtra10, loadExtra2 as loadExtra21 } from 'volto-addon1'; @@ -81,7 +117,7 @@ import voltoAddon1, { loadExtra1 as loadExtra10, loadExtra2 as loadExtra21 } fro }); test('two addons plus extras creates loader', () => { - const code = getLoader.getAddonsLoaderCode([ + const code = getAddonsLoaderCode([ 'volto-addon1:loadExtra1,loadExtra2', 'volto-addon2:loadExtra3,loadExtra4', ]); @@ -95,7 +131,7 @@ import voltoAddon2, { loadExtra3 as loadExtra32, loadExtra4 as loadExtra43 } fro }); describe('create-addons-loader default name generation', () => { - const getName = getLoader.nameFromPackage; + const getName = nameFromPackage; test('passing a simple word returns a word', () => { expect(getName('something')).toBe('something'); @@ -149,7 +185,7 @@ function makeAddonLoader(addons, load = true) { : require.resolve(name), ); - const loaderPath = getLoader(addons); + const loaderPath = createAddonsLoader(addons); transpile(loaderPath); if (load) { diff --git a/packages/volto/__tests__/webpack-relative-resolver.test.js b/packages/volto/__tests__/webpack-relative-resolver.test.js index 429946a216..cc91dbfb4f 100644 --- a/packages/volto/__tests__/webpack-relative-resolver.test.js +++ b/packages/volto/__tests__/webpack-relative-resolver.test.js @@ -1,10 +1,10 @@ const path = require('path'); -const AddonConfigurationRegistry = require('../../registry/src/addon-registry'); +const { AddonRegistry } = require('@plone/registry/addon-registry'); const WebpackRelativeResolver = require('../../volto/webpack-plugins/webpack-relative-resolver'); const base = path.join(__dirname, '..'); const makeRegistry = () => { - const registry = new AddonConfigurationRegistry(base); + const { registry } = AddonRegistry.init(base); registry.packages = { '@plone/volto-addon': { modulePath: '/somewhere/volto-addon/src', diff --git a/packages/volto/news/6399.internal b/packages/volto/news/6399.internal new file mode 100644 index 0000000000..363ce2c2a7 --- /dev/null +++ b/packages/volto/news/6399.internal @@ -0,0 +1 @@ +Adapt `@plone/registry` as an ESM module, and fix its imports. @sneridagh diff --git a/packages/volto/package.json b/packages/volto/package.json index ac4b17141d..2de2443dd7 100644 --- a/packages/volto/package.json +++ b/packages/volto/package.json @@ -85,6 +85,8 @@ "@plone/volto/babel": "/babel.js", "@plone/volto/(.*)$": "/src/$1", "@plone/volto-slate/(.*)$": "/../volto-slate/src/$1", + "@plone/registry/addon-registry$": "/node_modules/@plone/registry/dist/esm/addon-registry.js", + "@plone/registry/create-addons-loader$": "/node_modules/@plone/registry/dist/esm/create-addons-loader.js", "@plone/registry": "/../registry/src", "@plone/registry/(.*)$": "/../registry/src/$1", "@plone/volto": "/src/index.js", @@ -280,11 +282,11 @@ "@babel/plugin-syntax-export-namespace-from": "7.8.3", "@babel/runtime": "7.20.6", "@babel/types": "7.20.5", - "@fiverr/afterbuild-webpack-plugin": "^1.0.0", - "@jest/globals": "^29.7.0", "@dnd-kit/core": "6.0.8", "@dnd-kit/sortable": "7.0.2", "@dnd-kit/utilities": "3.2.2", + "@fiverr/afterbuild-webpack-plugin": "^1.0.0", + "@jest/globals": "^29.7.0", "@loadable/babel-plugin": "5.13.2", "@loadable/webpack-plugin": "5.15.2", "@plone/types": "workspace:*", diff --git a/packages/volto/razzle.config.js b/packages/volto/razzle.config.js index b2ec16d7f7..a37df657ac 100644 --- a/packages/volto/razzle.config.js +++ b/packages/volto/razzle.config.js @@ -8,9 +8,11 @@ const fs = require('fs'); const RootResolverPlugin = require('./webpack-plugins/webpack-root-resolver'); const RelativeResolverPlugin = require('./webpack-plugins/webpack-relative-resolver'); const { poToJson } = require('@plone/scripts/i18n.cjs'); -const createAddonsLoader = require('@plone/registry/src/create-addons-loader'); -const createThemeAddonsLoader = require('@plone/registry/src/create-theme-addons-loader'); -const AddonConfigurationRegistry = require('@plone/registry/src/addon-registry'); +const { createAddonsLoader } = require('@plone/registry/create-addons-loader'); +const { + createThemeAddonsLoader, +} = require('@plone/registry/create-theme-loader'); +const { AddonRegistry } = require('@plone/registry/addon-registry'); const CircularDependencyPlugin = require('circular-dependency-plugin'); const TerserPlugin = require('terser-webpack-plugin'); const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); @@ -23,8 +25,7 @@ const projectRootPath = path.resolve('.'); const languages = require('./src/constants/Languages.cjs'); const packageJson = require(path.join(projectRootPath, 'package.json')); - -const registry = new AddonConfigurationRegistry(projectRootPath); +const { registry } = AddonRegistry.init(projectRootPath); const defaultModify = ({ env: { target, dev }, @@ -290,6 +291,8 @@ const defaultModify = ({ const addonsLoaderPath = createAddonsLoader( registry.getAddonDependencies(), registry.getAddons(), + // The load of the project config is deprecated and will be removed in Volto 19. + { loadProjectConfig: true }, ); config.resolve.plugins = [ diff --git a/packages/volto/src/express-middleware/static.js b/packages/volto/src/express-middleware/static.js index 258af2136e..5b648b09f0 100644 --- a/packages/volto/src/express-middleware/static.js +++ b/packages/volto/src/express-middleware/static.js @@ -1,10 +1,10 @@ import express from 'express'; import path from 'path'; -import AddonConfigurationRegistry from '@plone/registry/src/addon-registry'; +import { AddonRegistry } from '@plone/registry/addon-registry'; import config from '@plone/volto/registry'; const projectRootPath = path.resolve('.'); -const registry = new AddonConfigurationRegistry(projectRootPath); +const { registry } = AddonRegistry.init(projectRootPath); const staticDirectory = () => { if (process.env.BUILD_DIR) { diff --git a/patches/jest-resolve@26.6.2.patch b/patches/jest-resolve@26.6.2.patch new file mode 100644 index 0000000000000000000000000000000000000000..20c5d96a80e2dcd5dd0e79f5007c8316473cfadb GIT binary patch literal 7680 zcmeHMO>^5e5Ea`TGVCSC9yf=^QY1nA5WkX1qqx$+Gq%&Ql4)m}RwW70qQj6b0Xgk7 z{b`;4r2d621lX3W#L2Cl4t9oIXn_TmPfsMFN6Vss;qbH+kdDZ7zL<-qWsqIB?V7!X zqO2IaX($8Nal-M~E^Equ1?Llukic)ix;kOA})?Nu^HFotHSWb`W8(%TG6O@MLG<0jhc2|AXVpkwJR zh^1Gz^ghK}SAZ+PI)d-5${hQ|l~1=vn9p9}&9f&Uc()}85m zx{sHnpRGF=C*wcssBGW_=M803tj#;_gG`iASFRN)6v6uSkDlPm}VHuf_&p`jbZ z5zWF>sv#aBZsJov%JSIF$B8%gC_MkP}6 z@I7x3L0`HAg%8N9lyf*?ys0i&3%}a{Q1Wk3xjAa+s$yM~YS100Z&*+D0<=u5+8VlY ztTeGKIaxI4qHJnTmgz=1hX)Vrp&Hh82CyjkKH??HT1`(VE7DaZdRyyYPG9GIdeXah zS4r136E4zL@b5~o?C#a5Iz8I!$&&Q+@WFyM>LI);b9R|dDpsG0We-hGq{@W*3WJhA ztICw`LZ`;{9!vknd--z%mrW+^bZJh-L72FqQ?LNZ5@l{4T=*yUTB}YqwkS%!>xD3w?Bv zq*<}5b4d@xyB4f%&QI7ctFmQN_4Rj~>`c+?;mC#@X(V9w{kOA|gQMB;i)V+6qvz9? zhqF06fgkqXHtlQHF2u5BDdl@VBB&~3|K-8qi-Y5h!BTLXGtre4Tqss_dzYLe^5=2I zM6PK1^rPblE|#aF`@Z^mYLZ9rJUe5#Ag|ePynEg@IpdsUc#kOSQzTL<$_vK#dV09z z5J6oOfzh;sCtt(;(NAlv>a=<_8WF*`(7juEw^oBR|JY^UdN~6dBxmjG@9)O%_p&0q GHT(m=dE%e| literal 0 HcmV?d00001 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ce225d6be..f081099b4b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,11 @@ overrides: '@pmmmwh/react-refresh-webpack-plugin': 0.5.11 react-refresh: 0.14.0 +patchedDependencies: + jest-resolve@26.6.2: + hash: tmr5fnfjpir3crfu6ze44v7tue + path: patches/jest-resolve@26.6.2.patch + importers: .: @@ -479,7 +484,7 @@ importers: version: 3.11.11(react@18.2.0) '@storybook/test': specifier: ^8.0.4 - version: 8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(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@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)) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -522,7 +527,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)(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@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-links': specifier: ^8.0.4 version: 8.0.8(react@18.2.0) @@ -546,7 +551,7 @@ importers: 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)(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@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/react': specifier: 14.2.1 version: 14.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -822,8 +827,11 @@ importers: specifier: 0.10.0 version: 0.10.0 glob: - specifier: 7.1.6 - version: 7.1.6 + specifier: ^10.4.5 + version: 10.4.5 + tmp: + specifier: 0.2.1 + version: 0.2.1 devDependencies: '@parcel/packager-ts': specifier: ^2.12.0 @@ -834,12 +842,24 @@ importers: '@plone/types': specifier: workspace:* version: link:../types + '@types/debug': + specifier: ^4.1.12 + version: 4.1.12 + '@types/glob': + specifier: ^8.1.0 + version: 8.1.0 + '@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 + '@types/tmp': + specifier: ^0.2.6 + version: 0.2.6 parcel: specifier: ^2.12.0 version: 2.12.0(@swc/helpers@0.5.10)(postcss@8.4.47)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.30.3)(typescript@5.6.3) @@ -858,6 +878,9 @@ importers: typescript: specifier: ^5.6.3 version: 5.6.3 + vite: + specifier: ^5.4.8 + version: 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: 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) @@ -1715,7 +1738,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)(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@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/react': specifier: 12.1.5 version: 12.1.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -3595,10 +3618,23 @@ packages: resolution: {integrity: sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==} engines: {node: '>= 10.14.2'} + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/core@26.6.3': resolution: {integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==} engines: {node: '>= 10.14.2'} + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + '@jest/environment@26.6.2': resolution: {integrity: sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==} engines: {node: '>= 10.14.2'} @@ -3635,6 +3671,15 @@ packages: resolution: {integrity: sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==} engines: {node: '>= 10.14.2'} + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3643,14 +3688,26 @@ packages: resolution: {integrity: sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==} engines: {node: '>= 10.14.2'} + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-result@26.6.2': resolution: {integrity: sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==} engines: {node: '>= 10.14.2'} + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-sequencer@26.6.3': resolution: {integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==} engines: {node: '>= 10.14.2'} + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/transform@26.6.2': resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} engines: {node: '>= 10.14.2'} @@ -6259,6 +6316,9 @@ packages: '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/glob@8.1.0': + resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -6473,6 +6533,9 @@ packages: '@types/testing-library__react@9.1.3': resolution: {integrity: sha512-iCdNPKU3IsYwRK9JieSYAiX0+aYDXOGAmrC/3/M7AqqSDKnWWVv07X+Zk1uFSL7cMTUYzv4lQRfohucEocn5/w==} + '@types/tmp@0.2.6': + resolution: {integrity: sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==} + '@types/unist@2.0.10': resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} @@ -7314,6 +7377,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + babel-loader@8.3.0: resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} @@ -7349,6 +7418,10 @@ packages: resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} engines: {node: '>= 10.14.2'} + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-plugin-lodash@3.3.4: resolution: {integrity: sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==} @@ -7410,6 +7483,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + babel-preset-razzle@4.2.17: resolution: {integrity: sha512-Pg0yFCn2uTRBKjdj2pu61JWMcokVdxWNmpeBC2W+fNJ3JFyYP379TMIMmRi84g61snAzmwzwIlKMlVsVZT1IiA==} @@ -8304,6 +8383,11 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + croner@8.1.2: resolution: {integrity: sha512-ypfPFcAXHuAZRCzo3vJL6ltENzniTjwe/qsLleH1V2/7SRDjgvRQyrLmumFTLmjFax4IuSxfGXEn79fozXcJog==} engines: {node: '>=18.0'} @@ -8647,6 +8731,14 @@ packages: dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-copy@1.4.2: resolution: {integrity: sha512-VxZwQ/1+WGQPl5nE67uLhh7OqdrmqI1OazrraO9Bbw/M8Bt6Mol/RxzDA6N6ZgRXpsG/W9PgUj8E1LHHBEq2GQ==} engines: {node: '>=4.0.0'} @@ -9007,6 +9099,10 @@ packages: electron-to-chromium@1.5.41: resolution: {integrity: sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==} + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + emittery@0.7.2: resolution: {integrity: sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==} engines: {node: '>=10'} @@ -9686,10 +9782,6 @@ packages: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -10074,9 +10166,8 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - glob@10.3.12: - resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} - engines: {node: '>=16 || 14 >=14.17'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true glob@7.1.6: @@ -10084,6 +10175,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} @@ -11134,6 +11226,10 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} @@ -11163,6 +11259,9 @@ packages: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jake@10.8.7: resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} engines: {node: '>=10'} @@ -11179,11 +11278,29 @@ packages: resolution: {integrity: sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==} engines: {node: '>= 10.14.2'} + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-cli@26.6.3: resolution: {integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==} engines: {node: '>= 10.14.2'} hasBin: true + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + jest-config@26.6.3: resolution: {integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==} engines: {node: '>= 10.14.2'} @@ -11193,6 +11310,18 @@ packages: ts-node: optional: true + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + jest-diff@26.6.2: resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} engines: {node: '>= 10.14.2'} @@ -11205,10 +11334,18 @@ packages: resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==} engines: {node: '>= 10.14.2'} + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-each@26.6.2: resolution: {integrity: sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==} engines: {node: '>= 10.14.2'} + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-environment-jsdom@26.6.2: resolution: {integrity: sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==} engines: {node: '>= 10.14.2'} @@ -11217,6 +11354,10 @@ packages: resolution: {integrity: sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==} engines: {node: '>= 10.14.2'} + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-file@1.0.0: resolution: {integrity: sha512-QqcbPCfpVCxixoF0gia825AGBGXYWVi4cQpLsXBQVxkWswnZ39XHpT490NvTMtokY6v6BM+vw8rlhtjORabplA==} @@ -11244,6 +11385,10 @@ packages: resolution: {integrity: sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==} engines: {node: '>= 10.14.2'} + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-matcher-utils@26.6.2: resolution: {integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==} engines: {node: '>= 10.14.2'} @@ -11293,19 +11438,35 @@ packages: resolution: {integrity: sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==} engines: {node: '>= 10.14.2'} + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve@26.6.2: resolution: {integrity: sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==} engines: {node: '>= 10.14.2'} + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runner@26.6.3: resolution: {integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==} engines: {node: '>= 10.14.2'} + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runtime@26.6.3: resolution: {integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==} engines: {node: '>= 10.14.2'} hasBin: true + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-serializer@26.6.2: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} @@ -11330,10 +11491,18 @@ packages: resolution: {integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==} engines: {node: '>= 10.14.2'} + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-watcher@26.6.2: resolution: {integrity: sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==} engines: {node: '>= 10.14.2'} + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@25.5.0: resolution: {integrity: sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==} engines: {node: '>= 8.3'} @@ -11355,6 +11524,16 @@ packages: engines: {node: '>= 10.14.2'} hasBin: true + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true @@ -12546,8 +12725,8 @@ packages: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} minizlib@2.1.2: @@ -13191,6 +13370,9 @@ packages: resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} engines: {node: '>= 14'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-json@6.5.0: resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} engines: {node: '>=8'} @@ -13300,9 +13482,9 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.10.2: - resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} path-to-regexp@0.1.10: resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} @@ -13902,6 +14084,9 @@ packages: resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} engines: {node: '>=12.20'} + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -14752,10 +14937,12 @@ packages: rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rollup-plugin-visualizer@5.12.0: @@ -15210,6 +15397,9 @@ packages: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -16479,6 +16669,10 @@ packages: resolution: {integrity: sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==} engines: {node: '>=10.10.0'} + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -17179,7 +17373,7 @@ snapshots: '@babel/code-frame@7.24.2': dependencies: '@babel/highlight': 7.24.2 - picocolors: 1.0.0 + picocolors: 1.1.0 '@babel/code-frame@7.25.7': dependencies: @@ -17429,7 +17623,7 @@ snapshots: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.0 + picocolors: 1.1.0 '@babel/highlight@7.25.7': dependencies: @@ -17558,16 +17752,31 @@ snapshots: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -17613,11 +17822,21 @@ snapshots: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@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/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -17633,31 +17852,61 @@ snapshots: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -17673,6 +17922,11 @@ snapshots: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.8)': + dependencies: + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -18907,6 +19161,16 @@ snapshots: jest-util: 26.6.2 slash: 3.0.0 + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + optional: true + '@jest/core@26.6.3': dependencies: '@jest/console': 26.6.2 @@ -18924,7 +19188,7 @@ snapshots: jest-haste-map: 26.6.2 jest-message-util: 26.6.2 jest-regex-util: 26.0.0 - jest-resolve: 26.6.2 + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) jest-resolve-dependencies: 26.6.3 jest-runner: 26.6.3 jest-runtime: 26.6.3 @@ -18932,7 +19196,7 @@ snapshots: jest-util: 26.6.2 jest-validate: 26.6.2 jest-watcher: 26.6.2 - micromatch: 4.0.5 + micromatch: 4.0.8 p-each-series: 2.2.0 rimraf: 3.0.2 slash: 3.0.0 @@ -18944,6 +19208,42 @@ snapshots: - ts-node - utf-8-validate + '@jest/core@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.12.7) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + optional: true + '@jest/environment@26.6.2': dependencies: '@jest/fake-timers': 26.6.2 @@ -19020,7 +19320,7 @@ snapshots: istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.7 jest-haste-map: 26.6.2 - jest-resolve: 26.6.2 + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) jest-util: 26.6.2 jest-worker: 26.6.2 slash: 3.0.0 @@ -19033,6 +19333,36 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 20.12.7 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.1.6 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + optional: true + '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 @@ -19043,6 +19373,13 @@ snapshots: graceful-fs: 4.2.11 source-map: 0.6.1 + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + optional: true + '@jest/test-result@26.6.2': dependencies: '@jest/console': 26.6.2 @@ -19050,6 +19387,14 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.2 + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + optional: true + '@jest/test-sequencer@26.6.3': dependencies: '@jest/test-result': 26.6.2 @@ -19064,9 +19409,17 @@ snapshots: - ts-node - utf-8-validate + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + optional: true + '@jest/transform@26.6.2': dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.8 '@jest/types': 26.6.2 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -19076,7 +19429,7 @@ snapshots: jest-haste-map: 26.6.2 jest-regex-util: 26.0.0 jest-util: 26.6.2 - micromatch: 4.0.5 + micromatch: 4.0.8 pirates: 4.0.6 slash: 3.0.0 source-map: 0.6.1 @@ -19086,7 +19439,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.8 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -19097,7 +19450,7 @@ snapshots: jest-haste-map: 29.7.0 jest-regex-util: 29.6.3 jest-util: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.8 pirates: 4.0.6 slash: 3.0.0 write-file-atomic: 4.0.2 @@ -19447,7 +19800,7 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.6.0 + semver: 7.6.3 '@npmcli/fs@3.1.0': dependencies: @@ -19529,7 +19882,7 @@ snapshots: '@npmcli/package-json@4.0.1': dependencies: '@npmcli/git': 4.1.0 - glob: 10.3.12 + glob: 10.4.5 hosted-git-info: 6.1.1 json-parse-even-better-errors: 3.0.1 normalize-package-data: 5.0.0 @@ -22094,11 +22447,11 @@ snapshots: dependencies: '@storybook/global': 5.0.0 - '@storybook/addon-interactions@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(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.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))': 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)(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.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/types': 8.0.8 polished: 4.3.1 ts-dedent: 2.2.0 @@ -22389,7 +22742,7 @@ snapshots: find-cache-dir: 3.3.2 find-up: 5.0.0 fs-extra: 11.2.0 - glob: 10.3.12 + glob: 10.4.5 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0(encoding@0.1.13) @@ -22720,14 +23073,14 @@ snapshots: - encoding - supports-color - '@storybook/test@8.0.8(@jest/globals@29.7.0)(@types/jest@29.5.12)(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.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))': 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)(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.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 @@ -23103,7 +23456,7 @@ snapshots: jest: 26.6.3 vitest: 2.1.3(@types/node@20.12.7)(jsdom@16.7.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)(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.24.1)(sass@1.75.0)(terser@5.30.3))': dependencies: '@adobe/css-tools': 4.3.3 '@babel/runtime': 7.20.6 @@ -23116,6 +23469,7 @@ snapshots: optionalDependencies: '@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/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)': @@ -23267,7 +23621,7 @@ snapshots: '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 8.56.10 - '@types/estree': 0.0.51 + '@types/estree': 1.0.6 '@types/eslint@8.56.10': dependencies: @@ -23307,6 +23661,11 @@ snapshots: '@types/minimatch': 5.1.2 '@types/node': 20.12.7 + '@types/glob@8.1.0': + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.12.7 + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 20.12.7 @@ -23543,6 +23902,8 @@ snapshots: '@types/testing-library__dom': 7.5.0 pretty-format: 25.5.0 + '@types/tmp@0.2.6': {} + '@types/unist@2.0.10': {} '@types/unist@3.0.2': {} @@ -24049,7 +24410,7 @@ snapshots: '@vue/shared': 3.4.23 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.2.0 + source-map-js: 1.2.1 '@vue/compiler-dom@3.4.23': dependencies: @@ -24369,7 +24730,7 @@ snapshots: archiver-utils@5.0.2: dependencies: - glob: 10.3.12 + glob: 10.4.5 graceful-fs: 4.2.11 is-stream: 2.0.1 lazystream: 1.0.1 @@ -24699,6 +25060,34 @@ snapshots: transitivePeerDependencies: - supports-color + babel-jest@26.6.3(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + '@jest/transform': 26.6.2 + '@jest/types': 26.6.2 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 26.6.2(@babel/core@7.25.8) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-jest@29.7.0(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.25.8) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + optional: true + babel-loader@8.3.0(@babel/core@7.24.4)(webpack@5.90.1(esbuild@0.20.2)): dependencies: '@babel/core': 7.24.4 @@ -24745,6 +25134,14 @@ snapshots: '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.5 + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.25.7 + '@babel/types': 7.20.5 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + optional: true + babel-plugin-lodash@3.3.4: dependencies: '@babel/helper-module-imports': 7.24.3 @@ -24840,12 +25237,41 @@ snapshots: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) + babel-preset-current-node-syntax@1.0.1(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.8) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.8) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.8) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.8) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.8) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.8) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.8) + babel-preset-jest@26.6.2(@babel/core@7.24.4): dependencies: '@babel/core': 7.24.4 babel-plugin-jest-hoist: 26.6.2 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + babel-preset-jest@26.6.2(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + babel-plugin-jest-hoist: 26.6.2 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.8) + + babel-preset-jest@29.6.3(@babel/core@7.25.8): + dependencies: + '@babel/core': 7.25.8 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.8) + optional: true + babel-preset-razzle@4.2.17: dependencies: '@babel/core': 7.24.4 @@ -25123,7 +25549,7 @@ snapshots: braces@3.0.2: dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 braces@3.0.3: dependencies: @@ -25322,9 +25748,9 @@ snapshots: dependencies: '@npmcli/fs': 3.1.0 fs-minipass: 3.0.3 - glob: 10.3.12 + glob: 10.4.5 lru-cache: 7.18.3 - minipass: 7.0.4 + minipass: 7.1.2 minipass-collect: 1.0.2 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 @@ -25955,6 +26381,22 @@ snapshots: crc-32: 1.2.2 readable-stream: 4.5.2 + create-jest@29.7.0(@types/node@20.12.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@20.12.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: @@ -26352,6 +26794,9 @@ snapshots: dedent@0.7.0: {} + dedent@1.5.3: + optional: true + deep-copy@1.4.2: {} deep-eql@4.1.3: @@ -26707,6 +27152,9 @@ snapshots: electron-to-chromium@1.5.41: {} + emittery@0.13.1: + optional: true + emittery@0.7.2: {} emoji-regex@10.3.0: {} @@ -27867,10 +28315,6 @@ snapshots: repeat-string: 1.6.1 to-regex-range: 2.1.1 - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -28119,7 +28563,7 @@ snapshots: fs-minipass@3.0.3: dependencies: - minipass: 7.0.4 + minipass: 7.1.2 fs-monkey@1.0.5: {} @@ -28317,16 +28761,17 @@ snapshots: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.0.4 - path-scurry: 1.10.2 + minipass: 7.1.2 + path-scurry: 1.11.1 - glob@10.3.12: + glob@10.4.5: dependencies: foreground-child: 3.1.1 - jackspeak: 2.3.6 + jackspeak: 3.4.3 minimatch: 9.0.4 - minipass: 7.0.4 - path-scurry: 1.10.2 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 glob@7.1.6: dependencies: @@ -29446,7 +29891,7 @@ snapshots: istanbul-lib-instrument@4.0.3: dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.8 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -29463,6 +29908,17 @@ snapshots: transitivePeerDependencies: - supports-color + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.25.8 + '@babel/parser': 7.25.8 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + optional: true + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 @@ -29511,6 +29967,12 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jake@10.8.7: dependencies: async: 3.2.5 @@ -29533,6 +29995,40 @@ snapshots: execa: 4.1.0 throat: 5.0.0 + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + optional: true + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + optional: true + jest-cli@26.6.3: dependencies: '@jest/core': 26.6.3 @@ -29555,12 +30051,32 @@ snapshots: - ts-node - utf-8-validate + jest-cli@29.7.0(@types/node@20.12.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@20.12.7) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.12.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.24.4 + '@babel/core': 7.25.8 '@jest/test-sequencer': 26.6.3 '@jest/types': 26.6.2 - babel-jest: 26.6.3(@babel/core@7.24.4) + babel-jest: 26.6.3(@babel/core@7.25.8) chalk: 4.1.2 deepmerge: 4.3.1 glob: 7.1.6 @@ -29570,10 +30086,10 @@ snapshots: jest-get-type: 26.3.0 jest-jasmine2: 26.6.3 jest-regex-util: 26.0.0 - jest-resolve: 26.6.2 + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) jest-util: 26.6.2 jest-validate: 26.6.2 - micromatch: 4.0.5 + micromatch: 4.0.8 pretty-format: 26.6.2 transitivePeerDependencies: - bufferutil @@ -29581,6 +30097,37 @@ snapshots: - supports-color - utf-8-validate + jest-config@29.7.0(@types/node@20.12.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': 20.12.7 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + optional: true + jest-diff@26.6.2: dependencies: chalk: 4.1.2 @@ -29599,6 +30146,11 @@ snapshots: dependencies: detect-newline: 3.1.0 + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + optional: true + jest-each@26.6.2: dependencies: '@jest/types': 26.6.2 @@ -29607,6 +30159,15 @@ snapshots: jest-util: 26.6.2 pretty-format: 26.6.2 + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + optional: true + jest-environment-jsdom@26.6.2: dependencies: '@jest/environment': 26.6.2 @@ -29631,6 +30192,16 @@ snapshots: jest-mock: 26.6.2 jest-util: 26.6.2 + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + jest-mock: 29.7.0 + jest-util: 29.7.0 + optional: true + jest-file@1.0.0: {} jest-get-type@26.3.0: {} @@ -29649,7 +30220,7 @@ snapshots: jest-serializer: 26.6.2 jest-util: 26.6.2 jest-worker: 26.6.2 - micromatch: 4.0.5 + micromatch: 4.0.8 sane: 4.1.0 walker: 1.0.8 optionalDependencies: @@ -29668,14 +30239,14 @@ snapshots: jest-regex-util: 29.6.3 jest-util: 29.7.0 jest-worker: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.8 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 jest-jasmine2@26.6.3: dependencies: - '@babel/traverse': 7.24.1 + '@babel/traverse': 7.25.7 '@jest/environment': 26.6.2 '@jest/source-map': 26.6.2 '@jest/test-result': 26.6.2 @@ -29705,6 +30276,12 @@ snapshots: jest-get-type: 26.3.0 pretty-format: 26.6.2 + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + optional: true + jest-matcher-utils@26.6.2: dependencies: chalk: 4.1.2 @@ -29761,9 +30338,14 @@ snapshots: '@types/node': 20.12.7 jest-util: 29.7.0 - jest-pnp-resolver@1.2.3(jest-resolve@26.6.2): + jest-pnp-resolver@1.2.3(jest-resolve@26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue)): + optionalDependencies: + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): optionalDependencies: - jest-resolve: 26.6.2 + jest-resolve: 29.7.0 + optional: true jest-regex-util@26.0.0: {} @@ -29777,17 +30359,38 @@ snapshots: transitivePeerDependencies: - supports-color - jest-resolve@26.6.2: + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + optional: true + + jest-resolve@26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue): dependencies: '@jest/types': 26.6.2 chalk: 4.1.2 graceful-fs: 4.2.11 - jest-pnp-resolver: 1.2.3(jest-resolve@26.6.2) + jest-pnp-resolver: 1.2.3(jest-resolve@26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue)) jest-util: 26.6.2 read-pkg-up: 7.0.1 resolve: 1.22.8 slash: 3.0.0 + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.8 + resolve.exports: 2.0.2 + slash: 3.0.0 + optional: true + jest-runner@26.6.3: dependencies: '@jest/console': 26.6.2 @@ -29804,7 +30407,7 @@ snapshots: jest-haste-map: 26.6.2 jest-leak-detector: 26.6.2 jest-message-util: 26.6.2 - jest-resolve: 26.6.2 + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) jest-runtime: 26.6.3 jest-util: 26.6.2 jest-worker: 26.6.2 @@ -29817,6 +30420,33 @@ snapshots: - ts-node - utf-8-validate + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + optional: true + jest-runtime@26.6.3: dependencies: '@jest/console': 26.6.2 @@ -29839,7 +30469,7 @@ snapshots: jest-message-util: 26.6.2 jest-mock: 26.6.2 jest-regex-util: 26.0.0 - jest-resolve: 26.6.2 + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) jest-snapshot: 26.6.2 jest-util: 26.6.2 jest-validate: 26.6.2 @@ -29853,6 +30483,34 @@ snapshots: - ts-node - utf-8-validate + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + chalk: 4.1.2 + cjs-module-lexer: 1.2.3 + collect-v8-coverage: 1.0.2 + glob: 7.1.6 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + optional: true + jest-serializer@26.6.2: dependencies: '@types/node': 20.12.7 @@ -29862,7 +30520,7 @@ snapshots: dependencies: '@babel/types': 7.20.5 '@jest/types': 26.6.2 - '@types/babel__traverse': 7.20.5 + '@types/babel__traverse': 7.20.6 '@types/prettier': 2.7.3 chalk: 4.1.2 expect: 26.6.2 @@ -29872,24 +30530,24 @@ snapshots: jest-haste-map: 26.6.2 jest-matcher-utils: 26.6.2 jest-message-util: 26.6.2 - jest-resolve: 26.6.2 + jest-resolve: 26.6.2(patch_hash=tmr5fnfjpir3crfu6ze44v7tue) natural-compare: 1.4.0 pretty-format: 26.6.2 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.24.4 - '@babel/generator': 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/generator': 7.25.7 + '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.8) + '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.8) '@babel/types': 7.20.5 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.8) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -29900,7 +30558,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -29931,6 +30589,16 @@ snapshots: leven: 3.1.0 pretty-format: 26.6.2 + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + optional: true + jest-watcher@26.6.2: dependencies: '@jest/test-result': 26.6.2 @@ -29941,6 +30609,18 @@ snapshots: jest-util: 26.6.2 string-length: 4.0.2 + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.7 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + optional: true + jest-worker@25.5.0: dependencies: merge-stream: 2.0.0 @@ -29977,6 +30657,19 @@ snapshots: - ts-node - utf-8-validate + jest@29.7.0(@types/node@20.12.7): + dependencies: + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@20.12.7) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + optional: true + jiti@1.21.0: {} jiti@1.21.6: {} @@ -31610,7 +32303,7 @@ snapshots: minipass-fetch@3.0.4: dependencies: - minipass: 7.0.4 + minipass: 7.1.2 minipass-sized: 1.0.3 minizlib: 2.1.2 optionalDependencies: @@ -31639,7 +32332,7 @@ snapshots: minipass@5.0.0: {} - minipass@7.0.4: {} + minipass@7.1.2: {} minizlib@2.1.2: dependencies: @@ -32032,7 +32725,7 @@ snapshots: dependencies: growly: 1.3.0 is-wsl: 2.2.0 - semver: 7.6.0 + semver: 7.6.3 shellwords: 0.1.1 uuid: 8.3.2 which: 2.0.2 @@ -32517,6 +33210,8 @@ snapshots: degenerator: 5.0.1 netmask: 2.0.2 + package-json-from-dist@1.0.1: {} + package-json@6.5.0: dependencies: got: 9.6.0 @@ -32690,10 +33385,10 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.10.2: + path-scurry@1.11.1: dependencies: lru-cache: 10.2.0 - minipass: 7.0.4 + minipass: 7.1.2 path-to-regexp@0.1.10: {} @@ -33088,9 +33783,9 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-sorting@8.0.2(postcss@8.4.38): + postcss-sorting@8.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-svgo@4.0.3: dependencies: @@ -33371,6 +34066,9 @@ snapshots: dependencies: escape-goat: 4.0.0 + pure-rand@6.1.0: + optional: true + q@1.5.1: {} qs@6.10.4: @@ -34192,7 +34890,7 @@ snapshots: read-package-json@6.0.4: dependencies: - glob: 10.3.12 + glob: 10.4.5 json-parse-even-better-errors: 3.0.1 normalize-package-data: 5.0.0 npm-normalize-package-bin: 3.0.1 @@ -35306,6 +36004,12 @@ snapshots: source-map-url: 0.4.1 urix: 0.1.0 + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + optional: true + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -35394,7 +36098,7 @@ snapshots: ssri@10.0.5: dependencies: - minipass: 7.0.4 + minipass: 7.1.2 ssri@7.1.1: dependencies: @@ -35659,8 +36363,8 @@ snapshots: stylelint-order@6.0.4(stylelint@16.3.1(typescript@5.6.3)): dependencies: - postcss: 8.4.38 - postcss-sorting: 8.0.2(postcss@8.4.38) + postcss: 8.4.47 + postcss-sorting: 8.0.2(postcss@8.4.47) stylelint: 16.3.1(typescript@5.6.3) stylelint-prettier@5.0.0(prettier@3.2.5)(stylelint@16.3.1(typescript@5.6.3)): @@ -35720,7 +36424,7 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.3.12 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -36699,6 +37403,13 @@ snapshots: convert-source-map: 1.9.0 source-map: 0.7.4 + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + optional: true + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 From 1ff127ccb7e58ddac4b053d939744a83407f4d8c Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Sun, 27 Oct 2024 15:47:09 +0100 Subject: [PATCH 40/50] Improve @plone/registry release-it config --- packages/registry/.release-it.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/registry/.release-it.json b/packages/registry/.release-it.json index f2720cb9f0..a63e1ce21e 100644 --- a/packages/registry/.release-it.json +++ b/packages/registry/.release-it.json @@ -6,7 +6,7 @@ "after:bump": [ "pipx run towncrier build --draft --yes --version ${version} > .changelog.draft", "pipx run towncrier build --yes --version ${version}", - "pnpm build --no-cache" + "pnpm build:force" ], "after:release": "rm .changelog.draft" }, From 4802225f0d538a0ed96b89ad718c574432667392 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Sun, 27 Oct 2024 15:48:32 +0100 Subject: [PATCH 41/50] Release @plone/registry 2.0.0-alpha.0 --- packages/registry/CHANGELOG.md | 25 +++++++++++++++++++++++++ packages/registry/news/6371.internal | 1 - packages/registry/news/6373.internal | 1 - packages/registry/news/6399.breaking | 6 ------ packages/registry/news/6399.feature | 1 - packages/registry/news/6407.internal | 1 - packages/registry/news/6422.bugfix | 1 - packages/registry/package.json | 2 +- 8 files changed, 26 insertions(+), 12 deletions(-) delete mode 100644 packages/registry/news/6371.internal delete mode 100644 packages/registry/news/6373.internal delete mode 100644 packages/registry/news/6399.breaking delete mode 100644 packages/registry/news/6399.feature delete mode 100644 packages/registry/news/6407.internal delete mode 100644 packages/registry/news/6422.bugfix diff --git a/packages/registry/CHANGELOG.md b/packages/registry/CHANGELOG.md index bfc4bc4705..dd27bf57e5 100644 --- a/packages/registry/CHANGELOG.md +++ b/packages/registry/CHANGELOG.md @@ -8,6 +8,31 @@ +## 2.0.0-alpha.0 (2024-10-27) + +### Breaking + +- Moved the package to ESM and refactored the add-on registry scripts to TypeScript. @sneridagh + Breaking: + - For maximum compatibility with CommonJS builds, the default exports have been moved to named exports. + - The modules affected are now built, and the import paths have changed, too. + - These changes force the modification in imports in a couple of files. + Please see the [Upgrade Guide](https://6.docs.plone.org/volto/upgrade-guide/index.html). [#6399](https://github.com/plone/volto/issues/6399) + +### Feature + +- Added an experimental Vite plugin. @sneridagh [#6399](https://github.com/plone/volto/issues/6399) + +### Bugfix + +- Return empty array when `getUtilities` does not match anything. @sneridagh [#6422](https://github.com/plone/volto/issues/6422) + +### Internal + +- Update typescript @sneridagh [#6371](https://github.com/plone/volto/issues/6371) +- Update Vite and vitest versions @sneridagh [#6373](https://github.com/plone/volto/issues/6373) +- Update typescript and vitest everywhere @sneridagh [#6407](https://github.com/plone/volto/issues/6407) + ## 1.8.0 (2024-07-30) ### Feature diff --git a/packages/registry/news/6371.internal b/packages/registry/news/6371.internal deleted file mode 100644 index 7f7dcd6199..0000000000 --- a/packages/registry/news/6371.internal +++ /dev/null @@ -1 +0,0 @@ -Update typescript @sneridagh diff --git a/packages/registry/news/6373.internal b/packages/registry/news/6373.internal deleted file mode 100644 index 2b6d200183..0000000000 --- a/packages/registry/news/6373.internal +++ /dev/null @@ -1 +0,0 @@ -Update Vite and vitest versions @sneridagh diff --git a/packages/registry/news/6399.breaking b/packages/registry/news/6399.breaking deleted file mode 100644 index d0315478f6..0000000000 --- a/packages/registry/news/6399.breaking +++ /dev/null @@ -1,6 +0,0 @@ -Moved the package to ESM and refactored the add-on registry scripts to TypeScript. @sneridagh -Breaking: -- For maximum compatibility with CommonJS builds, the default exports have been moved to named exports. -- The modules affected are now built, and the import paths have changed, too. -- These changes force the modification in imports in a couple of files. -Please see the [Upgrade Guide](https://6.docs.plone.org/volto/upgrade-guide/index.html). diff --git a/packages/registry/news/6399.feature b/packages/registry/news/6399.feature deleted file mode 100644 index 1a5f49ddbc..0000000000 --- a/packages/registry/news/6399.feature +++ /dev/null @@ -1 +0,0 @@ -Added an experimental Vite plugin. @sneridagh diff --git a/packages/registry/news/6407.internal b/packages/registry/news/6407.internal deleted file mode 100644 index f6daada94d..0000000000 --- a/packages/registry/news/6407.internal +++ /dev/null @@ -1 +0,0 @@ -Update typescript and vitest everywhere @sneridagh diff --git a/packages/registry/news/6422.bugfix b/packages/registry/news/6422.bugfix deleted file mode 100644 index 978f5bfa81..0000000000 --- a/packages/registry/news/6422.bugfix +++ /dev/null @@ -1 +0,0 @@ -Return empty array when `getUtilities` does not match anything. @sneridagh diff --git a/packages/registry/package.json b/packages/registry/package.json index 78f14702d7..27a12e4a7f 100644 --- a/packages/registry/package.json +++ b/packages/registry/package.json @@ -9,7 +9,7 @@ ], "funding": "https://github.com/sponsors/plone", "license": "MIT", - "version": "1.8.0", + "version": "2.0.0-alpha.0", "repository": { "type": "git", "url": "https://github.com/plone/volto.git" From f96fe5b83e87f5dee27dae56f0374683788c5082 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Sun, 27 Oct 2024 15:49:33 +0100 Subject: [PATCH 42/50] Release @plone/scripts 3.7.0 --- packages/scripts/CHANGELOG.md | 10 ++++++++++ packages/scripts/news/6354.documentation | 1 - packages/scripts/news/6399.feature | 1 - packages/scripts/package.json | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) delete mode 100644 packages/scripts/news/6354.documentation delete mode 100644 packages/scripts/news/6399.feature diff --git a/packages/scripts/CHANGELOG.md b/packages/scripts/CHANGELOG.md index 34cce11565..f1c4f0278b 100644 --- a/packages/scripts/CHANGELOG.md +++ b/packages/scripts/CHANGELOG.md @@ -8,6 +8,16 @@ +## 3.7.0 (2024-10-27) + +### Feature + +- Support for the new `@plone/registry` ESM format. @sneridagh [#6399](https://github.com/plone/volto/issues/6399) + +### Documentation + +- Added the configuration for VSCode not to reformat Markdown and MyST files. @aadityaforwork [#6354](https://github.com/plone/volto/issues/6354) + ## 3.6.2 (2024-06-06) ### Bugfix diff --git a/packages/scripts/news/6354.documentation b/packages/scripts/news/6354.documentation deleted file mode 100644 index b643f0ac32..0000000000 --- a/packages/scripts/news/6354.documentation +++ /dev/null @@ -1 +0,0 @@ -Added the configuration for VSCode not to reformat Markdown and MyST files. @aadityaforwork \ No newline at end of file diff --git a/packages/scripts/news/6399.feature b/packages/scripts/news/6399.feature deleted file mode 100644 index 5558c340af..0000000000 --- a/packages/scripts/news/6399.feature +++ /dev/null @@ -1 +0,0 @@ -Support for the new `@plone/registry` ESM format. @sneridagh diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 66d18276c1..412e88fcee 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -9,7 +9,7 @@ } ], "license": "MIT", - "version": "3.6.2", + "version": "3.7.0", "repository": { "type": "git", "url": "git@github.com:plone/volto.git" From 2f7b7608aae0d2a97bbae8c21d300aca66995a0b Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Sun, 27 Oct 2024 15:50:38 +0100 Subject: [PATCH 43/50] Release generate-volto 9.0.0-alpha.20 --- packages/generator-volto/CHANGELOG.md | 9 +++++++++ packages/generator-volto/news/6371.breaking | 2 -- packages/generator-volto/news/6399.breaking | 2 -- packages/generator-volto/package.json | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) delete mode 100644 packages/generator-volto/news/6371.breaking delete mode 100644 packages/generator-volto/news/6399.breaking diff --git a/packages/generator-volto/CHANGELOG.md b/packages/generator-volto/CHANGELOG.md index 9a16049080..7107897b68 100644 --- a/packages/generator-volto/CHANGELOG.md +++ b/packages/generator-volto/CHANGELOG.md @@ -8,6 +8,15 @@ +## 9.0.0-alpha.20 (2024-10-27) + +### Breaking + +- Dropped support for Node.js 18, since Volto only supports the last two LTS versions. @sneridagh + Volto might continue to work on it, but it will be no longer tested in CI. [#6371](https://github.com/plone/volto/issues/6371) +- Breaking changes in `.eslintrc.js` and `.storybook/main.js` because of #6399. @sneridagh + Please see the [Upgrade Guide](https://6.docs.plone.org/volto/upgrade-guide/index.html). [#6399](https://github.com/plone/volto/issues/6399) + ## 9.0.0-alpha.19 (2024-10-18) ### Internal diff --git a/packages/generator-volto/news/6371.breaking b/packages/generator-volto/news/6371.breaking deleted file mode 100644 index 204eeb8cd6..0000000000 --- a/packages/generator-volto/news/6371.breaking +++ /dev/null @@ -1,2 +0,0 @@ -Dropped support for Node.js 18, since Volto only supports the last two LTS versions. @sneridagh -Volto might continue to work on it, but it will be no longer tested in CI. diff --git a/packages/generator-volto/news/6399.breaking b/packages/generator-volto/news/6399.breaking deleted file mode 100644 index 2b0695d18f..0000000000 --- a/packages/generator-volto/news/6399.breaking +++ /dev/null @@ -1,2 +0,0 @@ -Breaking changes in `.eslintrc.js` and `.storybook/main.js` because of #6399. @sneridagh -Please see the [Upgrade Guide](https://6.docs.plone.org/volto/upgrade-guide/index.html). diff --git a/packages/generator-volto/package.json b/packages/generator-volto/package.json index 9e352a3300..cf1b46bc7c 100644 --- a/packages/generator-volto/package.json +++ b/packages/generator-volto/package.json @@ -10,7 +10,7 @@ } ], "license": "MIT", - "version": "9.0.0-alpha.19", + "version": "9.0.0-alpha.20", "repository": { "type": "git", "url": "git+https://github.com/plone/generator-volto.git" From 82e4f7b51e0c718e66fc1d42444268c422ef6aae Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Sun, 27 Oct 2024 15:51:42 +0100 Subject: [PATCH 44/50] Release 18.0.0-alpha.47 --- docs/source/release-notes/index.md | 43 +++++++++++++++++++ packages/volto/CHANGELOG.md | 43 +++++++++++++++++++ packages/volto/news/6308.internal | 1 - packages/volto/news/6355.bugfix | 1 - packages/volto/news/6371.breaking | 2 - packages/volto/news/6371.internal | 1 - packages/volto/news/6399.internal | 1 - packages/volto/news/6403.internal | 1 - packages/volto/news/6407.internal | 1 - packages/volto/news/6408.internal | 1 - packages/volto/news/6414.feature | 3 -- packages/volto/news/6418.internal | 1 - packages/volto/news/6419.bugfix | 1 - packages/volto/news/6421.bugfix | 1 - packages/volto/news/6421.feature.1 | 3 -- packages/volto/news/6421.feature.2 | 1 - packages/volto/news/6422.feature | 1 - packages/volto/news/6424.internal | 1 - packages/volto/news/6425.feature | 1 - packages/volto/news/6426.documentation | 1 - packages/volto/news/6433.documentation | 1 - packages/volto/news/6436.bugfix | 1 - packages/volto/news/6438.documentation | 1 - packages/volto/package.json | 2 +- .../volto/types/actions/aliases/aliases.d.ts | 9 +++- .../manage/Contents/__mocks__/index.d.ts | 1 - .../Relations/RelationsMatrix.d.ts | 2 +- .../manage/Controlpanels/index.d.ts | 1 - .../manage/Form/__mocks__/index.d.ts | 1 - .../types/components/manage/Form/index.d.ts | 1 - .../Multilingual/ManageTranslations.d.ts | 2 +- .../manage/Sidebar/ObjectBrowser.d.ts | 2 +- .../manage/Widgets/InternalUrlWidget.d.ts | 2 +- .../components/manage/Widgets/UrlWidget.d.ts | 2 +- .../manage/Widgets/__mocks__/index.d.ts | 1 - .../components/manage/Widgets/index.d.ts | 5 +-- packages/volto/types/config/slots.d.ts | 2 +- .../volto/types/constants/ActionTypes.d.ts | 1 + .../volto/types/helpers/Helmet/Helmet.d.ts | 2 +- 39 files changed, 105 insertions(+), 43 deletions(-) delete mode 100644 packages/volto/news/6308.internal delete mode 100644 packages/volto/news/6355.bugfix delete mode 100644 packages/volto/news/6371.breaking delete mode 100644 packages/volto/news/6371.internal delete mode 100644 packages/volto/news/6399.internal delete mode 100644 packages/volto/news/6403.internal delete mode 100644 packages/volto/news/6407.internal delete mode 100644 packages/volto/news/6408.internal delete mode 100644 packages/volto/news/6414.feature delete mode 100644 packages/volto/news/6418.internal delete mode 100644 packages/volto/news/6419.bugfix delete mode 100644 packages/volto/news/6421.bugfix delete mode 100644 packages/volto/news/6421.feature.1 delete mode 100644 packages/volto/news/6421.feature.2 delete mode 100644 packages/volto/news/6422.feature delete mode 100644 packages/volto/news/6424.internal delete mode 100644 packages/volto/news/6425.feature delete mode 100644 packages/volto/news/6426.documentation delete mode 100644 packages/volto/news/6433.documentation delete mode 100644 packages/volto/news/6436.bugfix delete mode 100644 packages/volto/news/6438.documentation diff --git a/docs/source/release-notes/index.md b/docs/source/release-notes/index.md index 9ac139c7b9..228069b61f 100644 --- a/docs/source/release-notes/index.md +++ b/docs/source/release-notes/index.md @@ -17,6 +17,49 @@ myst: +## 18.0.0-alpha.47 (2024-10-27) + +### Breaking + +- Dropped support for Node.js 18, since Volto only supports the last two LTS versions. @sneridagh + Volto might continue to work on it, but it will be no longer tested in CI. [#6371](https://github.com/plone/volto/issues/6371) + +### Feature + +- URL Management control panel: add a filter for redirects created after a given date. + **Note:** This requires `Products.CMFPlone` 6.0.14 and `plone.restapi` 9.8.0 or later. + @davisagli [#6414](https://github.com/plone/volto/issues/6414) +- URL Management control panel: Move the form for adding a new redirect into a modal. @davisagli [#6421](https://github.com/plone/volto/issues/6421) +- URL Management control panel: Add feature to bulk upload redirects in a CSV file. + **Note:** This requires `plone.restapi` 9.8.0 or later. + @davisagli [#6421](https://github.com/plone/volto/issues/6421) +- Introducing "client transforms for Redux reducers". @sneridagh [#6422](https://github.com/plone/volto/issues/6422) +- URL Management control panel: Add a way to edit existing aliases. @davisagli [#6425](https://github.com/plone/volto/issues/6425) + +### Bugfix + +- Fix site setup access check by using `@actions` endpoint to validate permissions. @Faakhir30 [#6355](https://github.com/plone/volto/issues/6355) +- Fix redirect after login if the `Login` component is used on a route other than `/login` or `/logout`. @dobri1408 [#6419](https://github.com/plone/volto/issues/6419) +- URL Management control panel: Improve layout for long paths. @davisagli [#6421](https://github.com/plone/volto/issues/6421) +- URL Management control panel: add missing translations. @davisagli [#6436](https://github.com/plone/volto/issues/6436) + +### Internal + +- Used `resource title` instead of `resource type` in page title on edit. @Faakhir30 [#6308](https://github.com/plone/volto/issues/6308) +- Added support for Node.js 22, since it will become LTS on 2024-10-29. @sneridagh [#6371](https://github.com/plone/volto/issues/6371) +- Adapt `@plone/registry` as an ESM module, and fix its imports. @sneridagh [#6399](https://github.com/plone/volto/issues/6399) +- Fix `clean` make command @sneridagh [#6403](https://github.com/plone/volto/issues/6403) +- Update typescript and vitest everywhere @sneridagh [#6407](https://github.com/plone/volto/issues/6407) +- Update `caniuse` Oct24 @sneridagh [#6408](https://github.com/plone/volto/issues/6408) +- Remove last tests still in Node.js 18 @sneridagh [#6418](https://github.com/plone/volto/issues/6418) +- Remove mention of `SEAMLESS` mode in the server bootstrap. @sneridagh [#6424](https://github.com/plone/volto/issues/6424) + +### Documentation + +- Added deprecation notices to the upgrade guide for Volto 18. @sneridagh [#6426](https://github.com/plone/volto/issues/6426) +- Replace `yarn` with `pnpm` wherever necessary. @sneridagh [#6433](https://github.com/plone/volto/issues/6433) +- Rename page title from Frontend to Volto UI. @stevepiercy [#6438](https://github.com/plone/volto/issues/6438) + ## 18.0.0-alpha.46 (2024-10-10) ### Breaking diff --git a/packages/volto/CHANGELOG.md b/packages/volto/CHANGELOG.md index 9ac139c7b9..228069b61f 100644 --- a/packages/volto/CHANGELOG.md +++ b/packages/volto/CHANGELOG.md @@ -17,6 +17,49 @@ myst: +## 18.0.0-alpha.47 (2024-10-27) + +### Breaking + +- Dropped support for Node.js 18, since Volto only supports the last two LTS versions. @sneridagh + Volto might continue to work on it, but it will be no longer tested in CI. [#6371](https://github.com/plone/volto/issues/6371) + +### Feature + +- URL Management control panel: add a filter for redirects created after a given date. + **Note:** This requires `Products.CMFPlone` 6.0.14 and `plone.restapi` 9.8.0 or later. + @davisagli [#6414](https://github.com/plone/volto/issues/6414) +- URL Management control panel: Move the form for adding a new redirect into a modal. @davisagli [#6421](https://github.com/plone/volto/issues/6421) +- URL Management control panel: Add feature to bulk upload redirects in a CSV file. + **Note:** This requires `plone.restapi` 9.8.0 or later. + @davisagli [#6421](https://github.com/plone/volto/issues/6421) +- Introducing "client transforms for Redux reducers". @sneridagh [#6422](https://github.com/plone/volto/issues/6422) +- URL Management control panel: Add a way to edit existing aliases. @davisagli [#6425](https://github.com/plone/volto/issues/6425) + +### Bugfix + +- Fix site setup access check by using `@actions` endpoint to validate permissions. @Faakhir30 [#6355](https://github.com/plone/volto/issues/6355) +- Fix redirect after login if the `Login` component is used on a route other than `/login` or `/logout`. @dobri1408 [#6419](https://github.com/plone/volto/issues/6419) +- URL Management control panel: Improve layout for long paths. @davisagli [#6421](https://github.com/plone/volto/issues/6421) +- URL Management control panel: add missing translations. @davisagli [#6436](https://github.com/plone/volto/issues/6436) + +### Internal + +- Used `resource title` instead of `resource type` in page title on edit. @Faakhir30 [#6308](https://github.com/plone/volto/issues/6308) +- Added support for Node.js 22, since it will become LTS on 2024-10-29. @sneridagh [#6371](https://github.com/plone/volto/issues/6371) +- Adapt `@plone/registry` as an ESM module, and fix its imports. @sneridagh [#6399](https://github.com/plone/volto/issues/6399) +- Fix `clean` make command @sneridagh [#6403](https://github.com/plone/volto/issues/6403) +- Update typescript and vitest everywhere @sneridagh [#6407](https://github.com/plone/volto/issues/6407) +- Update `caniuse` Oct24 @sneridagh [#6408](https://github.com/plone/volto/issues/6408) +- Remove last tests still in Node.js 18 @sneridagh [#6418](https://github.com/plone/volto/issues/6418) +- Remove mention of `SEAMLESS` mode in the server bootstrap. @sneridagh [#6424](https://github.com/plone/volto/issues/6424) + +### Documentation + +- Added deprecation notices to the upgrade guide for Volto 18. @sneridagh [#6426](https://github.com/plone/volto/issues/6426) +- Replace `yarn` with `pnpm` wherever necessary. @sneridagh [#6433](https://github.com/plone/volto/issues/6433) +- Rename page title from Frontend to Volto UI. @stevepiercy [#6438](https://github.com/plone/volto/issues/6438) + ## 18.0.0-alpha.46 (2024-10-10) ### Breaking diff --git a/packages/volto/news/6308.internal b/packages/volto/news/6308.internal deleted file mode 100644 index c2b9271b6b..0000000000 --- a/packages/volto/news/6308.internal +++ /dev/null @@ -1 +0,0 @@ -Used `resource title` instead of `resource type` in page title on edit. @Faakhir30 diff --git a/packages/volto/news/6355.bugfix b/packages/volto/news/6355.bugfix deleted file mode 100644 index 1d6daa2674..0000000000 --- a/packages/volto/news/6355.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix site setup access check by using `@actions` endpoint to validate permissions. @Faakhir30 diff --git a/packages/volto/news/6371.breaking b/packages/volto/news/6371.breaking deleted file mode 100644 index 204eeb8cd6..0000000000 --- a/packages/volto/news/6371.breaking +++ /dev/null @@ -1,2 +0,0 @@ -Dropped support for Node.js 18, since Volto only supports the last two LTS versions. @sneridagh -Volto might continue to work on it, but it will be no longer tested in CI. diff --git a/packages/volto/news/6371.internal b/packages/volto/news/6371.internal deleted file mode 100644 index 38a19474ac..0000000000 --- a/packages/volto/news/6371.internal +++ /dev/null @@ -1 +0,0 @@ -Added support for Node.js 22, since it will become LTS on 2024-10-29. @sneridagh diff --git a/packages/volto/news/6399.internal b/packages/volto/news/6399.internal deleted file mode 100644 index 363ce2c2a7..0000000000 --- a/packages/volto/news/6399.internal +++ /dev/null @@ -1 +0,0 @@ -Adapt `@plone/registry` as an ESM module, and fix its imports. @sneridagh diff --git a/packages/volto/news/6403.internal b/packages/volto/news/6403.internal deleted file mode 100644 index 68fb4d2cab..0000000000 --- a/packages/volto/news/6403.internal +++ /dev/null @@ -1 +0,0 @@ -Fix `clean` make command @sneridagh diff --git a/packages/volto/news/6407.internal b/packages/volto/news/6407.internal deleted file mode 100644 index f6daada94d..0000000000 --- a/packages/volto/news/6407.internal +++ /dev/null @@ -1 +0,0 @@ -Update typescript and vitest everywhere @sneridagh diff --git a/packages/volto/news/6408.internal b/packages/volto/news/6408.internal deleted file mode 100644 index 49ce0fb0f8..0000000000 --- a/packages/volto/news/6408.internal +++ /dev/null @@ -1 +0,0 @@ -Update `caniuse` Oct24 @sneridagh diff --git a/packages/volto/news/6414.feature b/packages/volto/news/6414.feature deleted file mode 100644 index 8ee0a49e68..0000000000 --- a/packages/volto/news/6414.feature +++ /dev/null @@ -1,3 +0,0 @@ -URL Management control panel: add a filter for redirects created after a given date. -**Note:** This requires `Products.CMFPlone` 6.0.14 and `plone.restapi` 9.8.0 or later. -@davisagli diff --git a/packages/volto/news/6418.internal b/packages/volto/news/6418.internal deleted file mode 100644 index fcc36e357f..0000000000 --- a/packages/volto/news/6418.internal +++ /dev/null @@ -1 +0,0 @@ -Remove last tests still in Node.js 18 @sneridagh diff --git a/packages/volto/news/6419.bugfix b/packages/volto/news/6419.bugfix deleted file mode 100644 index e7e843cb57..0000000000 --- a/packages/volto/news/6419.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix redirect after login if the `Login` component is used on a route other than `/login` or `/logout`. @dobri1408 diff --git a/packages/volto/news/6421.bugfix b/packages/volto/news/6421.bugfix deleted file mode 100644 index 3ff3139729..0000000000 --- a/packages/volto/news/6421.bugfix +++ /dev/null @@ -1 +0,0 @@ -URL Management control panel: Improve layout for long paths. @davisagli diff --git a/packages/volto/news/6421.feature.1 b/packages/volto/news/6421.feature.1 deleted file mode 100644 index b20307ca39..0000000000 --- a/packages/volto/news/6421.feature.1 +++ /dev/null @@ -1,3 +0,0 @@ -URL Management control panel: Add feature to bulk upload redirects in a CSV file. -**Note:** This requires `plone.restapi` 9.8.0 or later. -@davisagli diff --git a/packages/volto/news/6421.feature.2 b/packages/volto/news/6421.feature.2 deleted file mode 100644 index 1156bb1ff7..0000000000 --- a/packages/volto/news/6421.feature.2 +++ /dev/null @@ -1 +0,0 @@ -URL Management control panel: Move the form for adding a new redirect into a modal. @davisagli \ No newline at end of file diff --git a/packages/volto/news/6422.feature b/packages/volto/news/6422.feature deleted file mode 100644 index 7eb17ffd98..0000000000 --- a/packages/volto/news/6422.feature +++ /dev/null @@ -1 +0,0 @@ -Introducing "client transforms for Redux reducers". @sneridagh diff --git a/packages/volto/news/6424.internal b/packages/volto/news/6424.internal deleted file mode 100644 index eee9d51424..0000000000 --- a/packages/volto/news/6424.internal +++ /dev/null @@ -1 +0,0 @@ -Remove mention of `SEAMLESS` mode in the server bootstrap. @sneridagh diff --git a/packages/volto/news/6425.feature b/packages/volto/news/6425.feature deleted file mode 100644 index 7a12576c21..0000000000 --- a/packages/volto/news/6425.feature +++ /dev/null @@ -1 +0,0 @@ -URL Management control panel: Add a way to edit existing aliases. @davisagli diff --git a/packages/volto/news/6426.documentation b/packages/volto/news/6426.documentation deleted file mode 100644 index dc5079729a..0000000000 --- a/packages/volto/news/6426.documentation +++ /dev/null @@ -1 +0,0 @@ -Added deprecation notices to the upgrade guide for Volto 18. @sneridagh diff --git a/packages/volto/news/6433.documentation b/packages/volto/news/6433.documentation deleted file mode 100644 index 82111de185..0000000000 --- a/packages/volto/news/6433.documentation +++ /dev/null @@ -1 +0,0 @@ -Replace `yarn` with `pnpm` wherever necessary. @sneridagh diff --git a/packages/volto/news/6436.bugfix b/packages/volto/news/6436.bugfix deleted file mode 100644 index a0e0bf3309..0000000000 --- a/packages/volto/news/6436.bugfix +++ /dev/null @@ -1 +0,0 @@ -URL Management control panel: add missing translations. @davisagli diff --git a/packages/volto/news/6438.documentation b/packages/volto/news/6438.documentation deleted file mode 100644 index f894f6db1b..0000000000 --- a/packages/volto/news/6438.documentation +++ /dev/null @@ -1 +0,0 @@ -Rename page title from Frontend to Volto UI. @stevepiercy diff --git a/packages/volto/package.json b/packages/volto/package.json index 2de2443dd7..809e554ea0 100644 --- a/packages/volto/package.json +++ b/packages/volto/package.json @@ -9,7 +9,7 @@ } ], "license": "MIT", - "version": "18.0.0-alpha.46", + "version": "18.0.0-alpha.47", "repository": { "type": "git", "url": "git@github.com:plone/volto.git" diff --git a/packages/volto/types/actions/aliases/aliases.d.ts b/packages/volto/types/actions/aliases/aliases.d.ts index 0a08987630..94cda2c98c 100644 --- a/packages/volto/types/actions/aliases/aliases.d.ts +++ b/packages/volto/types/actions/aliases/aliases.d.ts @@ -5,7 +5,7 @@ * @param {Object} options Options data. * @returns {Object} Get aliases action. */ -export function getAliases(url: string, options: any): any; +export function getAliases(url: string, options?: any): any; /** * Add alias function. * @function addAliases @@ -22,3 +22,10 @@ export function addAliases(url: string, data: any): any; * @returns {Object} Remove alias action. */ export function removeAliases(url: string, data: any): any; +/** + * Upload aliases function. + * @function uploadAliases + * @param {Object} file CSV file. + * @returns {Object} Upload aliases action. + */ +export function uploadAliases(file: any): any; diff --git a/packages/volto/types/components/manage/Contents/__mocks__/index.d.ts b/packages/volto/types/components/manage/Contents/__mocks__/index.d.ts index 4a4f62aee7..8a200d866b 100644 --- a/packages/volto/types/components/manage/Contents/__mocks__/index.d.ts +++ b/packages/volto/types/components/manage/Contents/__mocks__/index.d.ts @@ -1,3 +1,2 @@ -/// export declare const Contents: jest.Mock; export declare const ContentsRenameModal: jest.Mock; diff --git a/packages/volto/types/components/manage/Controlpanels/Relations/RelationsMatrix.d.ts b/packages/volto/types/components/manage/Controlpanels/Relations/RelationsMatrix.d.ts index b44094f82f..d442a59e1e 100644 --- a/packages/volto/types/components/manage/Controlpanels/Relations/RelationsMatrix.d.ts +++ b/packages/volto/types/components/manage/Controlpanels/Relations/RelationsMatrix.d.ts @@ -36,7 +36,7 @@ declare const _default: { data: {}; block: string; }; - contextType?: React.Context; + contextType?: React.Context | undefined; }; export default _default; import React from 'react'; diff --git a/packages/volto/types/components/manage/Controlpanels/index.d.ts b/packages/volto/types/components/manage/Controlpanels/index.d.ts index 8feb23523b..b796c15c8a 100644 --- a/packages/volto/types/components/manage/Controlpanels/index.d.ts +++ b/packages/volto/types/components/manage/Controlpanels/index.d.ts @@ -1,4 +1,3 @@ -/// export declare const Controlpanels: any; export declare const Controlpanel: import("@loadable/component").LoadableComponent>, "ref"> & import("react").RefAttributes>>>; export declare const RulesControlpanel: import("@loadable/component").LoadableClassComponent; diff --git a/packages/volto/types/components/manage/Form/__mocks__/index.d.ts b/packages/volto/types/components/manage/Form/__mocks__/index.d.ts index 086c8c23b7..36db79f1a1 100644 --- a/packages/volto/types/components/manage/Form/__mocks__/index.d.ts +++ b/packages/volto/types/components/manage/Form/__mocks__/index.d.ts @@ -1,4 +1,3 @@ -/// export declare const Field: jest.Mock; export declare const InlineForm: jest.Mock; export declare const ModalForm: jest.Mock; diff --git a/packages/volto/types/components/manage/Form/index.d.ts b/packages/volto/types/components/manage/Form/index.d.ts index 80e8e76488..b23c84c307 100644 --- a/packages/volto/types/components/manage/Form/index.d.ts +++ b/packages/volto/types/components/manage/Form/index.d.ts @@ -1,4 +1,3 @@ -/// export declare const Field: import("@loadable/component").LoadableComponent>; export declare const InlineForm: import("@loadable/component").LoadableComponent, "ref"> & import("react").RefAttributes>; export declare const ModalForm: import("@loadable/component").LoadableComponent>; diff --git a/packages/volto/types/components/manage/Multilingual/ManageTranslations.d.ts b/packages/volto/types/components/manage/Multilingual/ManageTranslations.d.ts index b44094f82f..d442a59e1e 100644 --- a/packages/volto/types/components/manage/Multilingual/ManageTranslations.d.ts +++ b/packages/volto/types/components/manage/Multilingual/ManageTranslations.d.ts @@ -36,7 +36,7 @@ declare const _default: { data: {}; block: string; }; - contextType?: React.Context; + contextType?: React.Context | undefined; }; export default _default; import React from 'react'; diff --git a/packages/volto/types/components/manage/Sidebar/ObjectBrowser.d.ts b/packages/volto/types/components/manage/Sidebar/ObjectBrowser.d.ts index 6ed8b67c57..b68432edd0 100644 --- a/packages/volto/types/components/manage/Sidebar/ObjectBrowser.d.ts +++ b/packages/volto/types/components/manage/Sidebar/ObjectBrowser.d.ts @@ -69,6 +69,6 @@ declare function withObjectBrowser(WrappedComponent: any): { data: {}; block: string; }; - contextType?: React.Context; + contextType?: React.Context | undefined; }; import React from 'react'; diff --git a/packages/volto/types/components/manage/Widgets/InternalUrlWidget.d.ts b/packages/volto/types/components/manage/Widgets/InternalUrlWidget.d.ts index 0531e1ed0f..3a0e6f3a16 100644 --- a/packages/volto/types/components/manage/Widgets/InternalUrlWidget.d.ts +++ b/packages/volto/types/components/manage/Widgets/InternalUrlWidget.d.ts @@ -74,7 +74,7 @@ declare const _default: { data: {}; block: string; }; - contextType?: React.Context; + contextType?: React.Context | undefined; }; export default _default; import React from 'react'; diff --git a/packages/volto/types/components/manage/Widgets/UrlWidget.d.ts b/packages/volto/types/components/manage/Widgets/UrlWidget.d.ts index 51ff47f9b5..43a7207080 100644 --- a/packages/volto/types/components/manage/Widgets/UrlWidget.d.ts +++ b/packages/volto/types/components/manage/Widgets/UrlWidget.d.ts @@ -74,7 +74,7 @@ declare const _default: { data: {}; block: string; }; - contextType?: React.Context; + contextType?: React.Context | undefined; }; export default _default; import React from 'react'; diff --git a/packages/volto/types/components/manage/Widgets/__mocks__/index.d.ts b/packages/volto/types/components/manage/Widgets/__mocks__/index.d.ts index 86a10de8b4..b81f2365db 100644 --- a/packages/volto/types/components/manage/Widgets/__mocks__/index.d.ts +++ b/packages/volto/types/components/manage/Widgets/__mocks__/index.d.ts @@ -1,4 +1,3 @@ -/// export declare const AlignWidget: jest.Mock; export declare const ButtonsWidget: jest.Mock; export declare const ArrayWidget: jest.Mock; diff --git a/packages/volto/types/components/manage/Widgets/index.d.ts b/packages/volto/types/components/manage/Widgets/index.d.ts index e6b763ead7..35bdf8311c 100644 --- a/packages/volto/types/components/manage/Widgets/index.d.ts +++ b/packages/volto/types/components/manage/Widgets/index.d.ts @@ -1,4 +1,3 @@ -/// export declare const AlignWidget: import("@loadable/component").LoadableComponent; export declare const ButtonsWidget: import("@loadable/component").LoadableComponent; export declare const ArrayWidget: import("@loadable/component").LoadableClassComponent; @@ -53,7 +52,7 @@ export declare const UrlWidget: import("@loadable/component").LoadableClassCompo data: {}; block: string; }; - contextType?: import("react").Context; + contextType?: import("react").Context | undefined; }>; export declare const InternalUrlWidget: import("@loadable/component").LoadableClassComponent<{ new (): { @@ -93,7 +92,7 @@ export declare const InternalUrlWidget: import("@loadable/component").LoadableCl data: {}; block: string; }; - contextType?: import("react").Context; + contextType?: import("react").Context | undefined; }>; export declare const EmailWidget: import("@loadable/component").LoadableComponent; export declare const NumberWidget: import("@loadable/component").LoadableComponent>; diff --git a/packages/volto/types/config/slots.d.ts b/packages/volto/types/config/slots.d.ts index 059b38b8d0..1a31461914 100644 --- a/packages/volto/types/config/slots.d.ts +++ b/packages/volto/types/config/slots.d.ts @@ -7,7 +7,7 @@ declare namespace slots { content: { subjects?: any[]; }; - }): JSX.Element; + }): JSX.Element | null; propTypes: { content: any; }; diff --git a/packages/volto/types/constants/ActionTypes.d.ts b/packages/volto/types/constants/ActionTypes.d.ts index 4f14d38380..2d1a3beb45 100644 --- a/packages/volto/types/constants/ActionTypes.d.ts +++ b/packages/volto/types/constants/ActionTypes.d.ts @@ -134,6 +134,7 @@ export const MOVE_CONTENT_RULE: "MOVE_CONTENT_RULE"; export const GET_ALIASES: "GET_ALIASES"; export const ADD_ALIASES: "ADD_ALIASES"; export const REMOVE_ALIASES: "REMOVE_ALIASES"; +export const UPLOAD_ALIASES: "UPLOAD_ALIASES"; export const GET_USERSCHEMA: "GET_USERSCHEMA"; export const GET_UPGRADE: "GET_UPGRADE"; export const POST_UPGRADE: "POST_UPGRADE"; diff --git a/packages/volto/types/helpers/Helmet/Helmet.d.ts b/packages/volto/types/helpers/Helmet/Helmet.d.ts index 85bd8d4d2f..e5be73218d 100644 --- a/packages/volto/types/helpers/Helmet/Helmet.d.ts +++ b/packages/volto/types/helpers/Helmet/Helmet.d.ts @@ -133,6 +133,6 @@ declare const HelmetExport: { peek: any; rewind: () => any; canUseDOM: any; - contextType?: React.Context; + contextType?: React.Context | undefined; }; import React from 'react'; From e05970d2b36d1b8c95f0696db66bc2a601c8a074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Mon, 28 Oct 2024 12:59:25 +0100 Subject: [PATCH 45/50] Fix CSS lint in Volto Slate (#6444) --- packages/volto-slate/news/6444.bugfix | 1 + packages/volto-slate/src/editor/less/editor.less | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 packages/volto-slate/news/6444.bugfix diff --git a/packages/volto-slate/news/6444.bugfix b/packages/volto-slate/news/6444.bugfix new file mode 100644 index 0000000000..82e8145547 --- /dev/null +++ b/packages/volto-slate/news/6444.bugfix @@ -0,0 +1 @@ +Fix slight CSS lint violation in volto-slate @sneridagh diff --git a/packages/volto-slate/src/editor/less/editor.less b/packages/volto-slate/src/editor/less/editor.less index a1a51d8b23..e6006e3c19 100644 --- a/packages/volto-slate/src/editor/less/editor.less +++ b/packages/volto-slate/src/editor/less/editor.less @@ -28,7 +28,7 @@ .link-form-container { margin-left: 2px; - display: flex; + display: flex; align-items: center; } } From 907f5a48b093609e6cd8b8b4dafee9feb41f0c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20de=20Alba?= Date: Mon, 28 Oct 2024 13:06:54 +0100 Subject: [PATCH 46/50] Added upgrade guide fix for HMR (#6446) Co-authored-by: Steve Piercy --- docs/source/upgrade-guide/index.md | 21 +++++++++++++++++++++ packages/volto/news/6446.documentation | 1 + 2 files changed, 22 insertions(+) create mode 100644 packages/volto/news/6446.documentation diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index b9b67fcf4d..7148dbb0ed 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -579,6 +579,27 @@ Also in the Storybook configuration {file}`.storybook/main.js`. ```{versionadded} @plone/registry 3.0.0-alpha.0 ``` +### Add missing overrides to projects in `package.json` + +This will fix some issues with Hot Module Reload in projects. +It's required in Volto `18.0.0-alpha.47` and later, otherwise the site breaks in development mode. +Add this object to the `pnpm` key in your project {file}`package.json`. + +```json + "pnpm": { + "overrides": { + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15", + "react-refresh": "^0.14.2" + } + }, +``` + +```{versionadded} Volto 18.0.0-alpha.47 +``` + +```{versionadded} @plone/registry 3.0.0-alpha.0 +``` + ### Deprecation notices for Volto 18 #### `@plone/generator-volto` diff --git a/packages/volto/news/6446.documentation b/packages/volto/news/6446.documentation new file mode 100644 index 0000000000..e03a0087d3 --- /dev/null +++ b/packages/volto/news/6446.documentation @@ -0,0 +1 @@ +Added upgrade guide fix for HMR. @sneridagh From 8fee114ebdf4fa3a3b6582c5ec1ae5cca261f631 Mon Sep 17 00:00:00 2001 From: Teodor Voicu <104510089+tedw87@users.noreply.github.com> Date: Mon, 28 Oct 2024 22:32:11 -0700 Subject: [PATCH 47/50] Fix backend error when there is no query supplied (#6423) --- packages/volto/news/3839.bugfix | 1 + .../src/components/manage/Blocks/Listing/getAsyncData.js | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 packages/volto/news/3839.bugfix diff --git a/packages/volto/news/3839.bugfix b/packages/volto/news/3839.bugfix new file mode 100644 index 0000000000..bdafdb23dc --- /dev/null +++ b/packages/volto/news/3839.bugfix @@ -0,0 +1 @@ +Fix error "Exception: No query supplied" in the listing block, when there is no criteria selected. @tedw87 \ No newline at end of file diff --git a/packages/volto/src/components/manage/Blocks/Listing/getAsyncData.js b/packages/volto/src/components/manage/Blocks/Listing/getAsyncData.js index bc125bb1c7..e7c4996cc5 100644 --- a/packages/volto/src/components/manage/Blocks/Listing/getAsyncData.js +++ b/packages/volto/src/components/manage/Blocks/Listing/getAsyncData.js @@ -24,6 +24,14 @@ export default function getListingBlockAsyncData(props) { const subrequestID = content?.UID ? `${content?.UID}-${id}` : id; const currentPage = getCurrentPage(location, id); + if (!data.querystring) { + return [ + async () => { + return null; + }, + ]; + } + return [ dispatch( getQueryStringResults( From 416615fa2831275eb8c672c06aa628ab4748bdbd Mon Sep 17 00:00:00 2001 From: Tisha Soumya Date: Tue, 29 Oct 2024 15:50:00 +0530 Subject: [PATCH 48/50] A11y: Wrap ToC Block within nav tag (#6084) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: ichim-david Co-authored-by: David Glick Co-authored-by: Steve Piercy Co-authored-by: Víctor Fernández de Alba --- docs/source/upgrade-guide/index.md | 5 ++++ .../volto/locales/ca/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/de/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/en/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/es/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/eu/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/fi/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/fr/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/hi/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/it/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/ja/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/nl/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/pt/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/pt_BR/LC_MESSAGES/volto.po | 3 +-- .../volto/locales/ro/LC_MESSAGES/volto.po | 3 +-- packages/volto/locales/volto.pot | 3 +-- .../volto/locales/zh_CN/LC_MESSAGES/volto.po | 3 +-- packages/volto/news/6082.breaking | 1 + .../src/components/manage/Blocks/ToC/View.jsx | 25 +++++++++++++------ .../ToC/variations/DefaultTocRenderer.jsx | 17 ++----------- .../Blocks/ToC/variations/HorizontalMenu.jsx | 16 ++---------- 21 files changed, 44 insertions(+), 68 deletions(-) create mode 100644 packages/volto/news/6082.breaking diff --git a/docs/source/upgrade-guide/index.md b/docs/source/upgrade-guide/index.md index 7148dbb0ed..b527a00374 100644 --- a/docs/source/upgrade-guide/index.md +++ b/docs/source/upgrade-guide/index.md @@ -487,6 +487,11 @@ The recommended way of generating a project boilerplate is [Cookieplone](https:/ Please update your code to use the `pnpm` based setup. ``` +### Table of Contents block markup change + +The `View` component for the Table of Contents block was updated to use a `nav` element instead of a `div`. +If you've applied custom styles or shadowed this component, you might need to make adjustments. + ### Update needed to project boilerplate generated with `@plone/generator-volto` ```{versionadded} Volto 18.0.0-alpha.42 diff --git a/packages/volto/locales/ca/LC_MESSAGES/volto.po b/packages/volto/locales/ca/LC_MESSAGES/volto.po index 9ad9f86d79..e9e7fe90a2 100644 --- a/packages/volto/locales/ca/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ca/LC_MESSAGES/volto.po @@ -3622,8 +3622,7 @@ msgid "Table" msgstr "Taula" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Taula de continguts" diff --git a/packages/volto/locales/de/LC_MESSAGES/volto.po b/packages/volto/locales/de/LC_MESSAGES/volto.po index e8627e28be..07723ded35 100644 --- a/packages/volto/locales/de/LC_MESSAGES/volto.po +++ b/packages/volto/locales/de/LC_MESSAGES/volto.po @@ -3621,8 +3621,7 @@ msgid "Table" msgstr "Tabelle" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Inhaltsverzeichnis" diff --git a/packages/volto/locales/en/LC_MESSAGES/volto.po b/packages/volto/locales/en/LC_MESSAGES/volto.po index 1dba741cab..2ad5450f89 100644 --- a/packages/volto/locales/en/LC_MESSAGES/volto.po +++ b/packages/volto/locales/en/LC_MESSAGES/volto.po @@ -3616,8 +3616,7 @@ msgid "Table" msgstr "" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "" diff --git a/packages/volto/locales/es/LC_MESSAGES/volto.po b/packages/volto/locales/es/LC_MESSAGES/volto.po index 23630b90a1..669fa842da 100644 --- a/packages/volto/locales/es/LC_MESSAGES/volto.po +++ b/packages/volto/locales/es/LC_MESSAGES/volto.po @@ -3623,8 +3623,7 @@ msgid "Table" msgstr "Tabla" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Tabla de contenidos" diff --git a/packages/volto/locales/eu/LC_MESSAGES/volto.po b/packages/volto/locales/eu/LC_MESSAGES/volto.po index 095444c38d..504f03b20d 100644 --- a/packages/volto/locales/eu/LC_MESSAGES/volto.po +++ b/packages/volto/locales/eu/LC_MESSAGES/volto.po @@ -3623,8 +3623,7 @@ msgid "Table" msgstr "Taula" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Edukien taula" diff --git a/packages/volto/locales/fi/LC_MESSAGES/volto.po b/packages/volto/locales/fi/LC_MESSAGES/volto.po index 2be0080512..99ad9cfb65 100644 --- a/packages/volto/locales/fi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fi/LC_MESSAGES/volto.po @@ -3621,8 +3621,7 @@ msgid "Table" msgstr "Taulukkoa" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Sisällys" diff --git a/packages/volto/locales/fr/LC_MESSAGES/volto.po b/packages/volto/locales/fr/LC_MESSAGES/volto.po index be16dc03d7..fb52823be1 100644 --- a/packages/volto/locales/fr/LC_MESSAGES/volto.po +++ b/packages/volto/locales/fr/LC_MESSAGES/volto.po @@ -3623,8 +3623,7 @@ msgid "Table" msgstr "Table" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Table des matières" diff --git a/packages/volto/locales/hi/LC_MESSAGES/volto.po b/packages/volto/locales/hi/LC_MESSAGES/volto.po index 11afb55efa..0028b6e413 100644 --- a/packages/volto/locales/hi/LC_MESSAGES/volto.po +++ b/packages/volto/locales/hi/LC_MESSAGES/volto.po @@ -3616,8 +3616,7 @@ msgid "Table" msgstr "तालिका" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "सारांश की तालिका" diff --git a/packages/volto/locales/it/LC_MESSAGES/volto.po b/packages/volto/locales/it/LC_MESSAGES/volto.po index 13eb9c2280..d8f9c6b6ec 100644 --- a/packages/volto/locales/it/LC_MESSAGES/volto.po +++ b/packages/volto/locales/it/LC_MESSAGES/volto.po @@ -3616,8 +3616,7 @@ msgid "Table" msgstr "Tabella" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Indice dei contenuti" diff --git a/packages/volto/locales/ja/LC_MESSAGES/volto.po b/packages/volto/locales/ja/LC_MESSAGES/volto.po index 8f69541e34..c6ba730668 100644 --- a/packages/volto/locales/ja/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ja/LC_MESSAGES/volto.po @@ -3621,8 +3621,7 @@ msgid "Table" msgstr "テーブル" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "目次" diff --git a/packages/volto/locales/nl/LC_MESSAGES/volto.po b/packages/volto/locales/nl/LC_MESSAGES/volto.po index 4357dae948..ab60d22d27 100644 --- a/packages/volto/locales/nl/LC_MESSAGES/volto.po +++ b/packages/volto/locales/nl/LC_MESSAGES/volto.po @@ -3620,8 +3620,7 @@ msgid "Table" msgstr "" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "" diff --git a/packages/volto/locales/pt/LC_MESSAGES/volto.po b/packages/volto/locales/pt/LC_MESSAGES/volto.po index d30596d054..075a03f3d3 100644 --- a/packages/volto/locales/pt/LC_MESSAGES/volto.po +++ b/packages/volto/locales/pt/LC_MESSAGES/volto.po @@ -3621,8 +3621,7 @@ msgid "Table" msgstr "Tabela" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "" diff --git a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po index af520c765e..e7fee30166 100644 --- a/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po +++ b/packages/volto/locales/pt_BR/LC_MESSAGES/volto.po @@ -3622,8 +3622,7 @@ msgid "Table" msgstr "Tabela" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Tabela de conteúdos" diff --git a/packages/volto/locales/ro/LC_MESSAGES/volto.po b/packages/volto/locales/ro/LC_MESSAGES/volto.po index 6ef3d38984..3219e49600 100644 --- a/packages/volto/locales/ro/LC_MESSAGES/volto.po +++ b/packages/volto/locales/ro/LC_MESSAGES/volto.po @@ -3616,8 +3616,7 @@ msgid "Table" msgstr "Tabel" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "Cuprins" diff --git a/packages/volto/locales/volto.pot b/packages/volto/locales/volto.pot index 0490c9b7a6..3d048e5ef7 100644 --- a/packages/volto/locales/volto.pot +++ b/packages/volto/locales/volto.pot @@ -3618,8 +3618,7 @@ msgid "Table" msgstr "" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "" diff --git a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po index 6d98786196..e1948dea26 100644 --- a/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po +++ b/packages/volto/locales/zh_CN/LC_MESSAGES/volto.po @@ -3622,8 +3622,7 @@ msgid "Table" msgstr "表格" #. Default: "Table of Contents" -#: components/manage/Blocks/ToC/variations/DefaultTocRenderer -#: components/manage/Blocks/ToC/variations/HorizontalMenu +#: components/manage/Blocks/ToC/View msgid "Table of Contents" msgstr "表格内容" diff --git a/packages/volto/news/6082.breaking b/packages/volto/news/6082.breaking new file mode 100644 index 0000000000..11bd0cc5a5 --- /dev/null +++ b/packages/volto/news/6082.breaking @@ -0,0 +1 @@ +Wrap Table of Contents block in a `nav` tag, instead of a `div` tag, for better representation improving the block accessibility. @Tishasoumya-02 @ichim-david diff --git a/packages/volto/src/components/manage/Blocks/ToC/View.jsx b/packages/volto/src/components/manage/Blocks/ToC/View.jsx index 6594cb9a6b..80596cd499 100644 --- a/packages/volto/src/components/manage/Blocks/ToC/View.jsx +++ b/packages/volto/src/components/manage/Blocks/ToC/View.jsx @@ -2,10 +2,9 @@ * View toc block. * @module components/manage/Blocks/ToC/View */ - import React from 'react'; import PropTypes from 'prop-types'; -import { injectIntl } from 'react-intl'; +import { FormattedMessage } from 'react-intl'; import cx from 'classnames'; import { Message } from 'semantic-ui-react'; import config from '@plone/volto/registry'; @@ -86,6 +85,8 @@ export const getBlocksTocEntries = (properties, tocData) => { */ const View = (props) => { const { data } = props; + + const title = data.title ? data.title : ''; const { variation } = props; const metadata = props.metadata || props.properties; const blocksFieldname = getBlocksFieldname(metadata); @@ -165,9 +166,19 @@ const View = (props) => { const Renderer = variation?.view; return ( -
- {props.mode === 'edit' && !data.title && !tocEntries.length && ( - Table of content +
+ ); }; @@ -188,4 +199,4 @@ View.propTypes = { properties: PropTypes.objectOf(PropTypes.any).isRequired, }; -export default injectIntl(withBlockExtensions(View)); +export default withBlockExtensions(View); diff --git a/packages/volto/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx b/packages/volto/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx index 9881a1dc38..ba15af9f23 100644 --- a/packages/volto/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx +++ b/packages/volto/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx @@ -3,11 +3,9 @@ * @module components/manage/Blocks/ToC/View */ -import React from 'react'; import PropTypes from 'prop-types'; import { map } from 'lodash'; import { List } from 'semantic-ui-react'; -import { FormattedMessage, injectIntl } from 'react-intl'; import Slugger from 'github-slugger'; import { UniversalLink } from '@plone/volto/components'; import { normalizeString } from '@plone/volto/helpers'; @@ -45,18 +43,7 @@ const RenderListItems = ({ items, data }) => { const View = ({ data, tocEntries }) => { return ( <> - {data.title && !data.hide_title ? ( -

- {data.title || ( - - )} -

- ) : ( - '' - )} + {data.title && !data.hide_title ?

{data.title}

: ''} { return ( <> - {data.title && !data.hide_title ? ( -

- {data.title || ( - - )} -

- ) : ( - '' - )} + {data.title && !data.hide_title ?

{data.title}

: ''} Date: Tue, 29 Oct 2024 11:23:22 +0100 Subject: [PATCH 49/50] BlockStyleWrapper aware of block themes (#6445) Co-authored-by: Steve Piercy --- packages/types/news/6445.feature | 1 + packages/types/src/blocks/index.d.ts | 12 + packages/types/src/config/Blocks.d.ts | 3 + packages/volto/news/6445.feature | 1 + .../manage/Blocks/Block/EditBlockWrapper.jsx | 2 +- .../manage/Blocks/Block/StyleWrapper.jsx | 2 +- packages/volto/src/helpers/Blocks/Blocks.js | 106 +++++--- .../volto/src/helpers/Blocks/Blocks.test.js | 231 ++++++++++++++++-- 8 files changed, 296 insertions(+), 62 deletions(-) create mode 100644 packages/types/news/6445.feature create mode 100644 packages/volto/news/6445.feature diff --git a/packages/types/news/6445.feature b/packages/types/news/6445.feature new file mode 100644 index 0000000000..818f3ad7b7 --- /dev/null +++ b/packages/types/news/6445.feature @@ -0,0 +1 @@ +`StyleDefinitions` in types. @sneridagh diff --git a/packages/types/src/blocks/index.d.ts b/packages/types/src/blocks/index.d.ts index 902e205453..149af1143e 100644 --- a/packages/types/src/blocks/index.d.ts +++ b/packages/types/src/blocks/index.d.ts @@ -120,3 +120,15 @@ export interface BlockEditProps { errors: Record>; blocksErrors: Record>>; } + +export type StyleDefinition = + | { + name: string; + label: string; + style: Record<`--${string}`, string>; + } + | { + name: string; + label: string; + style: undefined; + }; diff --git a/packages/types/src/config/Blocks.d.ts b/packages/types/src/config/Blocks.d.ts index 2b2a6b4f4c..70bf61c5cf 100644 --- a/packages/types/src/config/Blocks.d.ts +++ b/packages/types/src/config/Blocks.d.ts @@ -2,6 +2,7 @@ import type { Content } from '../content'; import type { BlockViewProps, BlockEditProps } from '../blocks'; import type { IntlShape } from 'react-intl'; import { User } from '../services'; +import { StyleDefinition } from '../blocks'; export interface BlocksConfig { blocksConfig: BlocksConfigData; @@ -9,6 +10,8 @@ export interface BlocksConfig { requiredBlocks: string[]; initialBlocks: Record | Record; initialBlocksFocus: Record; + themes: StyleDefinition[]; + widths: StyleDefinition[]; } export interface BlocksConfigData { diff --git a/packages/volto/news/6445.feature b/packages/volto/news/6445.feature new file mode 100644 index 0000000000..213e80ce46 --- /dev/null +++ b/packages/volto/news/6445.feature @@ -0,0 +1 @@ +Enhance the `buildStyleObjectFromData` helper. @sneridagh diff --git a/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx b/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx index 4e047bcd18..fbfa549d51 100644 --- a/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx +++ b/packages/volto/src/components/manage/Blocks/Block/EditBlockWrapper.jsx @@ -69,7 +69,7 @@ const EditBlockWrapper = (props) => { data, classNames, }); - const style = buildStyleObjectFromData(data.styles); + const style = buildStyleObjectFromData(data); // We need to merge the StyleWrapper styles with the draggable props from b-D&D const styleMergedWithDragProps = { diff --git a/packages/volto/src/components/manage/Blocks/Block/StyleWrapper.jsx b/packages/volto/src/components/manage/Blocks/Block/StyleWrapper.jsx index 45c06d6fb2..3f94877a7d 100644 --- a/packages/volto/src/components/manage/Blocks/Block/StyleWrapper.jsx +++ b/packages/volto/src/components/manage/Blocks/Block/StyleWrapper.jsx @@ -19,7 +19,7 @@ const StyleWrapper = (props) => { classNames, }); - style = buildStyleObjectFromData(data.styles); + style = buildStyleObjectFromData(data); const rewrittenChildren = React.Children.map(children, (child) => { if (React.isValidElement(child)) { diff --git a/packages/volto/src/helpers/Blocks/Blocks.js b/packages/volto/src/helpers/Blocks/Blocks.js index 6b24de9080..e863bfc231 100644 --- a/packages/volto/src/helpers/Blocks/Blocks.js +++ b/packages/volto/src/helpers/Blocks/Blocks.js @@ -629,11 +629,11 @@ export const styleDataToStyleObject = (key, value, prefix = '') => { * Generate styles object from data * * @function buildStyleObjectFromData - * @param {Object} obj A style wrapper object data + * @param {Object} data A block data object * @param {string} prefix The prefix (could be dragged from a recursive call, initially empty) * @return {Object} The style object ready to be passed as prop */ -export const buildStyleObjectFromData = (obj = {}, prefix = '') => { +export const buildStyleObjectFromData = (data = {}, prefix = '') => { // style wrapper object has the form: // const styles = { // color: 'red', @@ -641,39 +641,79 @@ export const buildStyleObjectFromData = (obj = {}, prefix = '') => { // } // Returns: {'--background-color: '#AABBCC'} - return Object.fromEntries( - Object.entries(obj) - .filter(([k, v]) => k.startsWith('--') || isObject(v)) - .reduce( - (acc, [k, v]) => [ - ...acc, - // Kept for easy debugging - // ...(() => { - // if (isObject(v)) { - // return Object.entries( - // buildStyleObjectFromData( - // v, - // `${k.endsWith(':noprefix') ? '' : `${prefix}${k}--`}`, - // ), - // ); - // } - // return [styleDataToStyleObject(k, v, prefix)]; - // })(), - ...(isObject(v) - ? Object.entries( - buildStyleObjectFromData( - v, - `${k.endsWith(':noprefix') ? '' : `${prefix}${k}--`}`, // We don't add a prefix if the key ends with the marker suffix - ), - ) - : [styleDataToStyleObject(k, v, prefix)]), - ], - [], - ) - .filter((v) => !!v), - ); + function recursiveBuildStyleObjectFromData(obj, prefix) { + return Object.fromEntries( + Object.entries(obj) + .filter(([k, v]) => k.startsWith('--') || isObject(v)) + .reduce( + (acc, [k, v]) => [ + ...acc, + // Kept for easy debugging + // ...(() => { + // if (isObject(v)) { + // return Object.entries( + // buildStyleObjectFromData( + // v, + // `${k.endsWith(':noprefix') ? '' : `${prefix}${k}--`}`, + // ), + // ); + // } + // return [styleDataToStyleObject(k, v, prefix)]; + // })(), + ...(isObject(v) + ? Object.entries( + recursiveBuildStyleObjectFromData( + v, + `${k.endsWith(':noprefix') ? '' : `${prefix}${k}--`}`, // We don't add a prefix if the key ends with the marker suffix + ), + ) + : [styleDataToStyleObject(k, v, prefix)]), + ], + [], + ) + .filter((v) => !!v), + ); + } + + // If the block has a `@type`, it's a full data block object + // Then apply the style enhancers + if (data['@type']) { + const styleObj = data.styles || {}; + const stylesFromCSSproperties = recursiveBuildStyleObjectFromData( + styleObj, + prefix, + ); + + let stylesFromObjectStyleEnhancers = {}; + const enhancers = config.getUtilities({ + type: 'styleWrapperStyleObjectEnhancer', + }); + + enhancers.forEach(({ method }) => { + stylesFromObjectStyleEnhancers = { + ...stylesFromObjectStyleEnhancers, + ...method(data), + }; + }); + + return { ...stylesFromCSSproperties, ...stylesFromObjectStyleEnhancers }; + } else { + return recursiveBuildStyleObjectFromData(data, prefix); + } }; +/** + * Find a matching style by name given a style definition + * + * @function findStyleByName + * @param {Object} styleDefinitions An object with the style definitions + * @param {string} name The name of the style to find + * @return {Object} The style object of the matching name + */ +export function findStyleByName(styleDefinitions, name) { + return styleDefinitions.find((color) => color.name === name)?.style; +} + /** * Return previous/next blocks given the content object and the current block id * diff --git a/packages/volto/src/helpers/Blocks/Blocks.test.js b/packages/volto/src/helpers/Blocks/Blocks.test.js index 900171717f..659b3c9b50 100644 --- a/packages/volto/src/helpers/Blocks/Blocks.test.js +++ b/packages/volto/src/helpers/Blocks/Blocks.test.js @@ -24,6 +24,7 @@ import { findBlocks, findContainer, isBlockContainer, + findStyleByName, } from './Blocks'; import config from '@plone/volto/registry'; @@ -1103,38 +1104,68 @@ describe('Blocks', () => { }); describe('buildStyleObjectFromData', () => { + beforeEach(() => { + function blockThemesEnhancer(data) { + const blockConfig = config.blocks.blocksConfig[data['@type']]; + const blockStyleDefinitions = + // We look up for the blockThemes in the block's data, then in the global config + // We keep data.colors for BBB, but data.themes should be used + blockConfig.themes || + blockConfig.colors || + config.blocks.themes || + []; + return data.theme + ? findStyleByName(blockStyleDefinitions, data.theme) + : {}; + } + config.registerUtility({ + name: 'blockThemesEnhancer', + type: 'styleWrapperStyleObjectEnhancer', + method: blockThemesEnhancer, + }); + }); + it('Understands style converter for style values, no styles found', () => { - const styles = { - color: 'red', - backgroundColor: '#FFF', + const data = { + '@type': 'text', + styles: { + color: 'red', + backgroundColor: '#FFF', + }, }; - expect(buildStyleObjectFromData(styles)).toEqual({}); + expect(buildStyleObjectFromData(data)).toEqual({}); }); it('Understands style converter for style values', () => { - const styles = { - color: 'red', - '--background-color': '#FFF', + const data = { + '@type': 'text', + styles: { + color: 'red', + '--background-color': '#FFF', + }, }; - expect(buildStyleObjectFromData(styles)).toEqual({ + expect(buildStyleObjectFromData(data)).toEqual({ '--background-color': '#FFF', }); }); it('Supports multiple nested levels', () => { - const styles = { - '--color': 'red', - backgroundColor: '#AABBCC', - nested: { - l1: 'white', - '--foo': 'white', - level2: { - '--foo': '#fff', - bar: '#000', + const data = { + '@type': 'text', + styles: { + '--color': 'red', + backgroundColor: '#AABBCC', + nested: { + l1: 'white', + '--foo': 'white', + level2: { + '--foo': '#fff', + bar: '#000', + }, }, }, }; - expect(buildStyleObjectFromData(styles)).toEqual({ + expect(buildStyleObjectFromData(data)).toEqual({ '--color': 'red', '--nested--foo': 'white', '--nested--level2--foo': '#fff', @@ -1142,22 +1173,168 @@ describe('Blocks', () => { }); it('Supports multiple nested levels and optional inclusion of the name of the level', () => { - const styles = { + const data = { + '@type': 'text', + styles: { + '--color': 'red', + backgroundColor: '#AABBCC', + 'nested:noprefix': { + l1: 'white', + '--foo': 'white', + level2: { + '--foo': '#fff', + bar: '#000', + }, + }, + }, + }; + expect(buildStyleObjectFromData(data)).toEqual({ '--color': 'red', - backgroundColor: '#AABBCC', - 'nested:noprefix': { - l1: 'white', - '--foo': 'white', - level2: { - '--foo': '#fff', - bar: '#000', + '--foo': 'white', + '--level2--foo': '#fff', + }); + }); + + it('Supports named theme block - with global config', () => { + config.blocks.themes = [ + { + style: { + '--primary-color': '#fff', + '--primary-foreground-color': '#ecebeb', + }, + name: 'default', + label: 'Default', + }, + { + style: { + '--primary-color': '#000', + '--primary-foreground-color': '#fff', + }, + name: 'primary', + label: 'Primary', + }, + ]; + const data = { + '@type': 'text', + theme: 'primary', + }; + expect(buildStyleObjectFromData(data)).toEqual({ + '--primary-color': '#000', + '--primary-foreground-color': '#fff', + }); + }); + + it('Supports named theme block - with local block themes config', () => { + config.blocks.themes = [ + { + style: { + '--primary-color': '#fff', + '--primary-foreground-color': '#ecebeb', + }, + name: 'default', + label: 'Default', + }, + { + style: { + '--primary-color': '#000', + '--primary-foreground-color': '#fff', + }, + name: 'primary', + label: 'Primary', + }, + ]; + const themes = [ + { + style: { + '--primary-color': '#fff', + '--primary-foreground-color': '#ecebeb', + }, + name: 'default', + label: 'Default', + }, + { + style: { + '--secondary-color': '#bbb', + '--secondary-foreground-color': '#ddd', }, + name: 'secondary', + label: 'Secondary', }, + ]; + config.blocks.blocksConfig.text.themes = themes; + const data = { + '@type': 'text', + theme: 'secondary', }; - expect(buildStyleObjectFromData(styles)).toEqual({ + + expect(buildStyleObjectFromData(data)).toEqual({ + '--secondary-color': '#bbb', + '--secondary-foreground-color': '#ddd', + }); + }); + + it('All together now - named theme block - with local block themes config', () => { + config.blocks.blocksThemes = [ + { + style: { + '--primary-color': '#fff', + '--primary-foreground-color': '#ecebeb', + }, + name: 'default', + label: 'Default', + }, + { + style: { + '--primary-color': '#000', + '--primary-foreground-color': '#fff', + }, + name: 'primary', + label: 'Primary', + }, + ]; + const themes = [ + { + style: { + '--primary-color': '#fff', + '--primary-foreground-color': '#ecebeb', + }, + name: 'default', + label: 'Default', + }, + { + style: { + '--secondary-color': '#bbb', + '--secondary-foreground-color': '#ddd', + }, + name: 'secondary', + label: 'Secondary', + }, + ]; + + const data = { + '@type': 'text', + styles: { + '--color': 'red', + backgroundColor: '#AABBCC', + 'nested:noprefix': { + l1: 'white', + '--foo': 'white', + level2: { + '--foo': '#fff', + bar: '#000', + }, + }, + }, + theme: 'secondary', + themes, + }; + + expect(buildStyleObjectFromData(data)).toEqual({ '--color': 'red', '--foo': 'white', '--level2--foo': '#fff', + '--secondary-color': '#bbb', + '--secondary-foreground-color': '#ddd', }); }); }); From e5b8a404f49cd861b4773b6bae47dd0aca5c0898 Mon Sep 17 00:00:00 2001 From: Jefferson Bledsoe Date: Tue, 29 Oct 2024 11:18:13 +0000 Subject: [PATCH 50/50] Fix page changes not being announced by assistive technology when navigating using the client-side router (#5288) Co-authored-by: ichim-david --- .../volto/cypress/tests/core/basic/locking.js | 4 +- .../cypress/tests/core/basic/metadata.js | 4 +- .../volto/cypress/tests/workingCopy/create.js | 19 ++++-- packages/volto/news/5288.bugfix | 1 + .../volto/src/components/theme/App/App.jsx | 2 + .../src/components/theme/App/App.test.jsx | 7 +- .../theme/App/__snapshots__/App.test.jsx.snap | 18 ++++++ .../theme/RouteAnnouncer/RouteAnnouncer.jsx | 64 +++++++++++++++++++ 8 files changed, 107 insertions(+), 12 deletions(-) create mode 100644 packages/volto/news/5288.bugfix create mode 100644 packages/volto/src/components/theme/RouteAnnouncer/RouteAnnouncer.jsx diff --git a/packages/volto/cypress/tests/core/basic/locking.js b/packages/volto/cypress/tests/core/basic/locking.js index d414667777..63e47823eb 100644 --- a/packages/volto/cypress/tests/core/basic/locking.js +++ b/packages/volto/cypress/tests/core/basic/locking.js @@ -41,8 +41,8 @@ describe('Document locking', () => { cy.visit('/document'); cy.wait('@content'); - cy.findByRole('alert') - .get('.toast-inner-content') + cy.get('.Toastify') + .findByRole('alert') .contains('This item was locked by Editor 1 on'); }); diff --git a/packages/volto/cypress/tests/core/basic/metadata.js b/packages/volto/cypress/tests/core/basic/metadata.js index 70c30e31a9..6d5b414aad 100644 --- a/packages/volto/cypress/tests/core/basic/metadata.js +++ b/packages/volto/cypress/tests/core/basic/metadata.js @@ -34,8 +34,8 @@ describe('Add Content Tests', () => { cy.get('.ui.basic.icon.button.image').contains('Image').click(); cy.get('#toolbar-save').click(); - cy.findByRole('alert') - .get('.toast-inner-content') + cy.get('.Toastify') + .findByRole('alert') .contains('Required input is missing'); cy.get('.sidebar-container .tabs-wrapper .active.item').contains('Page'); }); diff --git a/packages/volto/cypress/tests/workingCopy/create.js b/packages/volto/cypress/tests/workingCopy/create.js index 9d72f4c2c5..55b737e07f 100644 --- a/packages/volto/cypress/tests/workingCopy/create.js +++ b/packages/volto/cypress/tests/workingCopy/create.js @@ -19,8 +19,11 @@ describe('Working Copy Tests - Create', () => { it('Basic create operation', function () { cy.get('#toolbar-more').click(); cy.findByLabelText('Create working copy').click(); - cy.findByRole('alert').contains('This is a working copy of'); - cy.findByRole('alert') + cy.get('.Toastify') + .findByRole('alert') + .contains('This is a working copy of'); + cy.get('.Toastify') + .findByRole('alert') .get('.toast-inner-content a') .should('have.attr', 'href') .and('include', '/document'); @@ -37,11 +40,17 @@ describe('Working Copy Tests - Create', () => { it('Navigation through baseline-working copy', function () { cy.get('#toolbar-more').click(); cy.findByLabelText('Create working copy').click(); - cy.findByRole('alert').get('.toast-inner-content a').click(); + cy.get('.Toastify') + .findByRole('alert') + .get('.toast-inner-content a') + .click(); cy.url().should('eq', Cypress.config().baseUrl + '/document'); - cy.findByRole('alert').contains('This has an ongoing working copy in'); - cy.findByRole('alert') + cy.get('.Toastify') + .findByRole('alert') + .contains('This has an ongoing working copy in'); + cy.get('.Toastify') + .findByRole('alert') .get('.toast-inner-content a') .should('have.attr', 'href') .and('include', '/working_copy_of_document'); diff --git a/packages/volto/news/5288.bugfix b/packages/volto/news/5288.bugfix new file mode 100644 index 0000000000..e53a45483d --- /dev/null +++ b/packages/volto/news/5288.bugfix @@ -0,0 +1 @@ +Fixed page changes not being announced to screen reader users. @JeffersonBledsoe \ No newline at end of file diff --git a/packages/volto/src/components/theme/App/App.jsx b/packages/volto/src/components/theme/App/App.jsx index 3ddef1b9df..a7a65415f0 100644 --- a/packages/volto/src/components/theme/App/App.jsx +++ b/packages/volto/src/components/theme/App/App.jsx @@ -51,6 +51,7 @@ import clearSVG from '@plone/volto/icons/clear.svg'; import MultilingualRedirector from '@plone/volto/components/theme/MultilingualRedirector/MultilingualRedirector'; import WorkingCopyToastsFactory from '@plone/volto/components/manage/WorkingCopyToastsFactory/WorkingCopyToastsFactory'; import LockingToastsFactory from '@plone/volto/components/manage/LockingToastsFactory/LockingToastsFactory'; +import RouteAnnouncer from '@plone/volto/components/theme/RouteAnnouncer/RouteAnnouncer'; /** * @export @@ -191,6 +192,7 @@ export class App extends Component { +