From 3539123af541bab986a60b1129fe8933010c33de Mon Sep 17 00:00:00 2001 From: Marc Itzenthaler Date: Sat, 16 Mar 2024 14:50:41 +0100 Subject: [PATCH 01/22] chore: rebase to fork state --- .github/workflows/build.yml | 3 + .github/workflows/dockerImage.yml | 3 + .github/workflows/storybook.yml | 45 + .gitignore | 1 + .storybook/main.ts | 73 + .storybook/preview.tsx | 54 + cypress.config.js | 11 + cypress/e2e/login.cy.ts | 7 +- cypress/e2e/messages.cy.ts | 14 +- cypress/e2e/profile.cy.ts | 2 - cypress/e2e/release-notes.cy.ts | 3 - cypress/e2e/sessions.cy.ts | 13 +- cypress/fixtures/service.agencies.json | 4 +- cypress/fixtures/service.topicGroups.json | 21 + cypress/fixtures/service.topics.json | 38 + cypress/plugins/index.js | 6 + .../support/commands/helper/appointments.ts | 2 +- cypress/support/commands/helper/fastLogin.ts | 10 + cypress/support/component-index.html | 13 + cypress/support/component.ts | 5 + cypress/support/index.d.ts | 4 +- package-lock.json | 8904 +++++++++++++++-- package.json | 74 +- public/favicon.ico | Bin 1150 -> 22382 bytes public/logo192.png | Bin 13086 -> 2129 bytes public/logo512.png | Bin 43184 -> 5904 bytes public/manifest.json | 6 +- public/releases/20220427001.md | 35 + public/releases/20220505001.md | 20 + public/releases/20221124001.md | 15 + public/releases/20221212001.md | 3 + public/releases/20230117001.md | 3 + public/releases/releases.json | 17 +- src/api/apiAgencySelection.ts | 2 +- src/api/apiGetConsultant.ts | 9 +- src/api/apiGetIsUsernameAvailable.ts | 13 + src/api/apiGetTopicGroups.ts | 13 + .../E2EEncryptionSupportHelp.tsx | 2 +- src/components/app/Loading.tsx | 4 +- src/components/app/app.tsx | 10 +- .../generateQrCode/GenerateQrCode.tsx | 21 +- src/components/input/input.tsx | 270 + src/components/inputField/InputField.tsx | 1 + .../loadingIndicator/LoadingIndicator.tsx | 2 +- src/components/localeSwitch/LocaleSwitch.tsx | 60 +- .../localeSwitch/localeSwitch.styles.scss | 7 - src/components/overlay/overlay.styles.scss | 29 +- .../registration/welcomeScreen.styles.scss | 2 +- .../SessionListItemComponent.tsx | 6 +- .../stageLayout/StageLayout.styles.scss | 4 + src/components/stageLayout/StageLayout.tsx | 93 +- .../tagSelect/tagSelect.styles.scss | 2 +- .../api/apiGetConsultingTypeGroups.tsx | 13 + src/extensions/components/app/app.tsx | 51 + .../ConsultingTypes.styles.scss | 63 + .../consultingTypes/ConsultingTypes.tsx | 246 + ...ConsultingTypesAgencySelection.styles.scss | 41 + .../ConsultingTypesAgencySelection.tsx | 169 + .../ConsultingTypesGroupChild.styles.scss | 55 + .../ConsultingTypesGroupChild.tsx | 63 + .../ConsultingTypesGroupChildDetails.tsx | 100 + .../ConsultingTypesOverlay.styles.scss | 12 + .../ConsultingTypesOverlay.tsx | 38 + ...nsultingTypesGroupChildDetails.styles.scss | 40 + .../legalInformationLinks/DataProtection.tsx | 160 + .../legalInformationLinks/Imprint.tsx | 64 + .../bmi-foerder-logo.svg | 1 + .../gluecksspirale-logo.svg | 1 + .../legalPage.styles.scss | 50 + .../legalInformationLinks/mbe-logo.svg | 1 + .../components/registration/Registration.tsx | 342 + .../registration/accountData/AccountData.tsx | 240 + .../accountData/accountData.stories.ts | 10 + .../agencySelection/AgencyLanguages.tsx | 42 + .../agencySelection/AgencySelection.tsx | 89 + .../AgencySelectionResults.tsx | 418 + .../agencySelection/agencySelection.cy.tsx | 35 + .../agencySelection.stories.ts | 12 + .../registration/infoDrawer/InfoDrawer.tsx | 195 + .../registration/metaInfo/MetaInfo.tsx | 144 + .../preselectionBox/PreselectionBox.tsx | 161 + .../preselectionDrawer/loader.svg | 35 + .../registration/preselectionDrawer/logo.svg | 1 + .../preselectionDrawer/preselectionDrawer.tsx | 218 + .../preselectionError/PreselectionError.tsx | 31 + .../registrationDataValidation.ts | 31 + .../registration/stepBar/StepBar.stories.ts | 15 + .../registration/stepBar/StepBar.tsx | 66 + .../registration/stepBar/stepBar.cy.tsx | 18 + .../topicSelection/TopicSelection.tsx | 439 + .../topicSelection/topicSelection.cy.tsx | 24 + .../topicSelection/topicSelection.stories.ts | 17 + .../welcomeScreen/WelcomeScreen.tsx | 155 + .../welcomeScreen/welcomeScreen.stories.ts | 10 + .../zipcodeInput/ZipcodeInput.tsx | 63 + .../zipcodeInput/zipCodeInput.cy.tsx | 52 + .../zipcodeInput/zipcodeInput.stories.ts | 10 + .../components/stage/StageLayout.styles.scss | 10 + src/extensions/components/stage/loader.svg | 35 + src/extensions/components/stage/logo.svg | 1 + .../components/stage/stage.styles.scss | 172 + src/extensions/components/stage/stage.tsx | 102 + src/extensions/globalState/index.ts | 1 + .../ConsultingTypeGroupInterface.ts | 12 + src/extensions/initApp.tsx | 36 + src/extensions/initError.tsx | 9 + src/extensions/pages/app.html | 59 + src/extensions/pages/under-construction.html | 344 + src/extensions/resources/i18n/de/agency.json | 3 + .../resources/i18n/de/consultingTypes.json | 410 + .../resources/i18n/de/languages.json | 4 + src/extensions/resources/i18n/en/agency.json | 3 + .../resources/i18n/en/consultingTypes.json | 438 + .../resources/i18n/en/languages.json | 4 + .../resources/i18n/overwrites/de/common.json | 398 + .../i18n/overwrites/de@informal/common.json | 166 + .../resources/i18n/overwrites/en/common.json | 87 + src/extensions/resources/scripts/config.ts | 105 + .../resources/styles/generateQrCode.scss | 3 + .../resources/styles/releaseNote.styles.scss | 3 + .../resources/styles/sessionMenu.scss | 5 + src/extensions/resources/styles/settings.scss | 151 + .../resources/styles/twoFactorAuth.scss | 4 + .../resources/utils/useDocumentTitle.tsx | 13 + src/extensions/theme.jsx | 181 + src/globalState/index.ts | 1 + src/globalState/interfaces/TopicGroups.ts | 5 + src/globalState/interfaces/index.ts | 1 + .../provider/RegistrationProvider.tsx | 352 + .../RocketChatSubscriptionsProvider.tsx | 2 +- .../provider/SessionsDataProvider.tsx | 4 +- .../img/illustrations/consultant-found.svg | 15 + .../img/illustrations/hello-banner.svg | 31 + .../img/illustrations/no-results.svg | 24 + src/resources/scripts/endpoints.ts | 2 + .../styles/mui-variables-mapping.scss | 38 + src/utils/validateInputValue.ts | 6 +- tsconfig.json | 2 +- 138 files changed, 16464 insertions(+), 778 deletions(-) create mode 100644 .github/workflows/storybook.yml create mode 100644 .storybook/main.ts create mode 100644 .storybook/preview.tsx create mode 100644 cypress/fixtures/service.topicGroups.json create mode 100644 cypress/fixtures/service.topics.json create mode 100644 cypress/plugins/index.js create mode 100644 cypress/support/component-index.html create mode 100644 cypress/support/component.ts create mode 100644 public/releases/20220427001.md create mode 100644 public/releases/20220505001.md create mode 100644 public/releases/20221124001.md create mode 100644 public/releases/20221212001.md create mode 100644 public/releases/20230117001.md create mode 100644 src/api/apiGetIsUsernameAvailable.ts create mode 100644 src/api/apiGetTopicGroups.ts create mode 100644 src/components/input/input.tsx create mode 100644 src/extensions/api/apiGetConsultingTypeGroups.tsx create mode 100644 src/extensions/components/app/app.tsx create mode 100644 src/extensions/components/consultingTypes/ConsultingTypes.styles.scss create mode 100644 src/extensions/components/consultingTypes/ConsultingTypes.tsx create mode 100644 src/extensions/components/consultingTypes/ConsultingTypesAgencySelection.styles.scss create mode 100644 src/extensions/components/consultingTypes/ConsultingTypesAgencySelection.tsx create mode 100644 src/extensions/components/consultingTypes/ConsultingTypesGroupChild.styles.scss create mode 100644 src/extensions/components/consultingTypes/ConsultingTypesGroupChild.tsx create mode 100644 src/extensions/components/consultingTypes/ConsultingTypesGroupChildDetails.tsx create mode 100644 src/extensions/components/consultingTypes/ConsultingTypesOverlay.styles.scss create mode 100644 src/extensions/components/consultingTypes/ConsultingTypesOverlay.tsx create mode 100644 src/extensions/components/consultingTypes/consultingTypesGroupChildDetails.styles.scss create mode 100644 src/extensions/components/legalInformationLinks/DataProtection.tsx create mode 100644 src/extensions/components/legalInformationLinks/Imprint.tsx create mode 100644 src/extensions/components/legalInformationLinks/bmi-foerder-logo.svg create mode 100644 src/extensions/components/legalInformationLinks/gluecksspirale-logo.svg create mode 100644 src/extensions/components/legalInformationLinks/legalPage.styles.scss create mode 100644 src/extensions/components/legalInformationLinks/mbe-logo.svg create mode 100644 src/extensions/components/registration/Registration.tsx create mode 100644 src/extensions/components/registration/accountData/AccountData.tsx create mode 100644 src/extensions/components/registration/accountData/accountData.stories.ts create mode 100644 src/extensions/components/registration/agencySelection/AgencyLanguages.tsx create mode 100644 src/extensions/components/registration/agencySelection/AgencySelection.tsx create mode 100644 src/extensions/components/registration/agencySelection/AgencySelectionResults.tsx create mode 100644 src/extensions/components/registration/agencySelection/agencySelection.cy.tsx create mode 100644 src/extensions/components/registration/agencySelection/agencySelection.stories.ts create mode 100644 src/extensions/components/registration/infoDrawer/InfoDrawer.tsx create mode 100644 src/extensions/components/registration/metaInfo/MetaInfo.tsx create mode 100644 src/extensions/components/registration/preselectionBox/PreselectionBox.tsx create mode 100644 src/extensions/components/registration/preselectionDrawer/loader.svg create mode 100644 src/extensions/components/registration/preselectionDrawer/logo.svg create mode 100644 src/extensions/components/registration/preselectionDrawer/preselectionDrawer.tsx create mode 100644 src/extensions/components/registration/preselectionError/PreselectionError.tsx create mode 100644 src/extensions/components/registration/registrationDataValidation.ts create mode 100644 src/extensions/components/registration/stepBar/StepBar.stories.ts create mode 100644 src/extensions/components/registration/stepBar/StepBar.tsx create mode 100644 src/extensions/components/registration/stepBar/stepBar.cy.tsx create mode 100644 src/extensions/components/registration/topicSelection/TopicSelection.tsx create mode 100644 src/extensions/components/registration/topicSelection/topicSelection.cy.tsx create mode 100644 src/extensions/components/registration/topicSelection/topicSelection.stories.ts create mode 100644 src/extensions/components/registration/welcomeScreen/WelcomeScreen.tsx create mode 100644 src/extensions/components/registration/welcomeScreen/welcomeScreen.stories.ts create mode 100644 src/extensions/components/registration/zipcodeInput/ZipcodeInput.tsx create mode 100644 src/extensions/components/registration/zipcodeInput/zipCodeInput.cy.tsx create mode 100644 src/extensions/components/registration/zipcodeInput/zipcodeInput.stories.ts create mode 100644 src/extensions/components/stage/StageLayout.styles.scss create mode 100644 src/extensions/components/stage/loader.svg create mode 100644 src/extensions/components/stage/logo.svg create mode 100644 src/extensions/components/stage/stage.styles.scss create mode 100644 src/extensions/components/stage/stage.tsx create mode 100644 src/extensions/globalState/index.ts create mode 100644 src/extensions/globalState/interfaces/ConsultingTypeGroupInterface.ts create mode 100644 src/extensions/initApp.tsx create mode 100644 src/extensions/initError.tsx create mode 100644 src/extensions/pages/app.html create mode 100644 src/extensions/pages/under-construction.html create mode 100644 src/extensions/resources/i18n/de/agency.json create mode 100644 src/extensions/resources/i18n/de/consultingTypes.json create mode 100644 src/extensions/resources/i18n/de/languages.json create mode 100644 src/extensions/resources/i18n/en/agency.json create mode 100644 src/extensions/resources/i18n/en/consultingTypes.json create mode 100644 src/extensions/resources/i18n/en/languages.json create mode 100644 src/extensions/resources/i18n/overwrites/de/common.json create mode 100644 src/extensions/resources/i18n/overwrites/de@informal/common.json create mode 100644 src/extensions/resources/i18n/overwrites/en/common.json create mode 100644 src/extensions/resources/scripts/config.ts create mode 100644 src/extensions/resources/styles/generateQrCode.scss create mode 100644 src/extensions/resources/styles/releaseNote.styles.scss create mode 100644 src/extensions/resources/styles/sessionMenu.scss create mode 100644 src/extensions/resources/styles/settings.scss create mode 100644 src/extensions/resources/styles/twoFactorAuth.scss create mode 100644 src/extensions/resources/utils/useDocumentTitle.tsx create mode 100644 src/extensions/theme.jsx create mode 100644 src/globalState/interfaces/TopicGroups.ts create mode 100644 src/globalState/provider/RegistrationProvider.tsx create mode 100644 src/resources/img/illustrations/consultant-found.svg create mode 100644 src/resources/img/illustrations/hello-banner.svg create mode 100644 src/resources/img/illustrations/no-results.svg create mode 100644 src/resources/styles/mui-variables-mapping.scss diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 258425f72..47c292691 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,6 +56,9 @@ jobs: echo "127.0.0.1 localhost" | sudo tee -a /etc/hosts echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf npm run test:build + - name: Run component tests + run: | + npm run test:components - name: Bump version if: env.BRANCH == 'release' run: | diff --git a/.github/workflows/dockerImage.yml b/.github/workflows/dockerImage.yml index 04c8a38ec..744c65595 100644 --- a/.github/workflows/dockerImage.yml +++ b/.github/workflows/dockerImage.yml @@ -58,6 +58,9 @@ jobs: echo "127.0.0.1 localhost" | sudo tee -a /etc/hosts echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf npm run test:build + - name: Run component tests + run: | + npm run test:components - uses: actions/upload-artifact@v2 with: name: buildfiles diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml new file mode 100644 index 000000000..4e1b31279 --- /dev/null +++ b/.github/workflows/storybook.yml @@ -0,0 +1,45 @@ +name: Deploy storybook to Pages + +on: + push: + branches: ['develop'] + + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: 'pages' + cancel-in-progress: false + +jobs: + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + cache: 'npm' + - run: npm ci + - name: set env + run: | + echo REACT_APP_API_URL=https://dev.diakonie.dev.virtual-identity.com >> $GITHUB_ENV + - name: Run build + run: npm run build-storybook + - name: Setup Pages + uses: actions/configure-pages@v3 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: './storybook-static' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/.gitignore b/.gitignore index dadd40864..da1e5896e 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ .env.test.local .env.production.local .idea +storybook-static .storage # cypress diff --git a/.storybook/main.ts b/.storybook/main.ts new file mode 100644 index 000000000..1edad01ea --- /dev/null +++ b/.storybook/main.ts @@ -0,0 +1,73 @@ +import type { StorybookConfig } from '@storybook/react-webpack5'; +import * as webpackConfigFactory from '../config/webpack.config'; +import { Configuration } from 'webpack'; + +const config: StorybookConfig = { + stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'], + addons: [ + '@storybook/addon-links', + '@storybook/addon-essentials', + '@storybook/addon-interactions', + 'storybook-react-i18next' + ], + framework: { + name: '@storybook/react-webpack5', + options: {} + }, + webpackFinal: async (config, { configType }) => { + // @ts-ignore + const webpackConfig = webpackConfigFactory.default( + configType.toLowerCase() + ); + + return { + ...config, + resolve: { + ...config.resolve, + modules: [ + ...webpackConfig.resolve.modules, + ...config.resolve.modules + ], + extensions: [ + ...webpackConfig.resolve.extensions, + ...config.resolve.extensions + ], + alias: { + ...webpackConfig.resolve.alias, + ...config.resolve.alias + }, + plugins: [...webpackConfig.resolve.plugins] + }, + plugins: [...webpackConfig.plugins, ...config.plugins], + module: { + ...config.module, + rules: [ + // Exclude svg from storybook file-loader + ...config.module.rules.map((r: any) => { + if (r.test && /svg/.test(r.test)) { + // Silence the Storybook loaders for SVG files + return { ...r, exclude: /\.svg$/i }; + } + return r; + }), + // Filter the last catch all because storybook needs to handle mjs files + ...webpackConfig.module.rules.map((r) => { + if (!r.oneOf) { + return r; + } + return { + ...r, + oneOf: r.oneOf.filter( + (o) => o.type !== 'asset/resource' + ) + }; + }) + ] + } + } as Configuration; + }, + docs: { + autodocs: 'tag' + } +}; +export default config; diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx new file mode 100644 index 000000000..93c308e00 --- /dev/null +++ b/.storybook/preview.tsx @@ -0,0 +1,54 @@ +import '../src/resources/styles/styles.scss'; +import '../src/resources/styles/mui-variables-mapping.scss'; +import i18n from 'i18next'; +import { ThemeProvider } from '@mui/material'; +import type { Preview } from '@storybook/react'; +import * as React from 'react'; +import theme from '../src/extensions/theme'; +//import i18n from './i18next'; +import { config } from '../src/resources/scripts/config'; +import { LegalLinksProvider } from '../src/globalState/provider/LegalLinksProvider'; +import { init, FALLBACK_LNG } from '../src/i18n'; +import { BrowserRouter as Router } from 'react-router-dom'; +init(config.i18n); + +export const withMuiTheme = (Story) => ( + + + + + + + +); + +export const decorators = [withMuiTheme]; + +const locales = {}; +(config.i18n.supportedLngs || []).forEach((supportLng) => { + const lng = supportLng.split('_informal')[0]; + locales[supportLng] = i18n.getResource(FALLBACK_LNG, 'languages', lng); + if (supportLng.indexOf('_informal') >= 0) { + locales[supportLng] += ' (informal)'; + } +}); + +const preview: Preview = { + parameters: { + i18n, + actions: { argTypesRegex: '^on[A-Z].*' }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/ + } + } + }, + globals: { + locale: FALLBACK_LNG, + locales + }, + decorators: [withMuiTheme] +}; + +export default preview; diff --git a/cypress.config.js b/cypress.config.js index 48d7a8a38..b79d96a20 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -1,5 +1,6 @@ const _ = require('lodash'); const { defineConfig } = require('cypress'); +const webpackConfig = require('./config/webpack.config')('development'); // @ts-ignore const wp = require('@cypress/webpack-preprocessor'); @@ -33,6 +34,7 @@ module.exports = defineConfig( _.mergeWith( { e2e: { + testIsolation: true, baseUrl: 'http://localhost:9001', supportFile: 'cypress/support/e2e.{js,jsx,ts,tsx}', setupNodeEvents(on, config) { @@ -40,6 +42,13 @@ module.exports = defineConfig( }, specPattern: ['cypress/e2e/**/*.cy.ts'] }, + component: { + devServer: { + framework: 'react', + bundler: 'webpack', + webpackConfig + } + }, env: { CYPRESS_WS_URL: process.env.CYPRESS_WS_URL || process.env.REACT_APP_API_URL @@ -47,6 +56,8 @@ module.exports = defineConfig( retries: { runMode: 2 }, + experimentalMemoryManagement: true, + numTestsKeptInMemory: 20, video: false, chromeWebSecurity: false, viewportWidth: 1200, diff --git a/cypress/e2e/login.cy.ts b/cypress/e2e/login.cy.ts index be54d30d4..217645791 100644 --- a/cypress/e2e/login.cy.ts +++ b/cypress/e2e/login.cy.ts @@ -23,13 +23,18 @@ describe('Login', () => { cy.get('#appRoot').should('exist'); }); - it('displays the login at the root', () => { + it.skip('displays the login at the root', () => { cy.visit('/'); cy.contains('Login'); cy.contains('Impressum'); cy.contains('Datenschutzerklärung'); }); + it('displays the consultingtype page at the root', () => { + cy.visit('/'); + cy.contains('Willkommen bei der Online-Beratung'); + }); + it('displays the login for resorts', () => { cy.visit('/suchtberatung'); cy.contains('Login'); diff --git a/cypress/e2e/messages.cy.ts b/cypress/e2e/messages.cy.ts index eb4f03480..9f96714a5 100644 --- a/cypress/e2e/messages.cy.ts +++ b/cypress/e2e/messages.cy.ts @@ -42,7 +42,6 @@ describe('Messages', () => { }); cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('[data-cy=session-list-item]').click(); cy.wait('@messages'); @@ -61,7 +60,7 @@ describe('Messages', () => { }); }); - describe('informal', () => { + describe.skip('informal', () => { it('should show inline error when quota is reached', () => { cy.willReturn('userData', { formalLanguage: false @@ -75,7 +74,6 @@ describe('Messages', () => { }); cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('[data-cy=session-list-item]').click(); cy.wait('@messages'); @@ -100,7 +98,6 @@ describe('Messages', () => { describe('Initially loading the app', () => { it('should not animate the envelope and no dot visible', () => { cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('.navigation__item__count--active').should( 'not.exist' @@ -115,7 +112,6 @@ describe('Messages', () => { describe('New message from Live Service', () => { it.skip('should animate the envelope and initial dot', () => { cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('.cy-socket-connected-stomp'); cy.waitForSubscriptions(['/user/events']); @@ -138,7 +134,6 @@ describe('Messages', () => { describe('New message from Live Service', () => { it.skip('should animate the envelope and initial dot', () => { cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('.cy-socket-connected-stomp'); cy.waitForSubscriptions(['/user/events']); @@ -161,7 +156,6 @@ describe('Messages', () => { // ToDo: Test currenlty skipped because its not working like the test tries it.skip('should animate envelope and initial dot and remove dot after message was read', () => { cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('.cy-socket-connected-stomp'); cy.get('.sessionsListItem').first().click({ @@ -206,7 +200,6 @@ describe('Messages', () => { it.skip('should animate the envelope and initial dot', () => { cy.askerSession(); cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('.cy-socket-connected-stomp'); cy.get('.navigation__item__count--active').should( @@ -244,7 +237,6 @@ describe('Messages', () => { cy.askerSession({ session: { messagesRead: false } }, 0); cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('.navigation__item__count--active').should('exist'); cy.get('.navigation__item__count--initial').should('exist'); @@ -260,7 +252,6 @@ describe('Messages', () => { ); cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('.cy-socket-connected-stomp'); cy.waitForSubscriptions(['/user/events']); @@ -287,7 +278,6 @@ describe('Messages', () => { ); cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('.cy-socket-connected-stomp'); cy.waitForSubscriptions(['/user/events']); @@ -311,7 +301,6 @@ describe('Messages', () => { cy.askerSession({ session: { messagesRead: false } }); cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('.cy-socket-connected-stomp'); cy.waitForSubscriptions(['/user/events']); @@ -349,7 +338,6 @@ describe('Messages', () => { cy.askerSession({ session: { messagesRead: false } }); cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('.cy-socket-connected-stomp'); cy.waitForSubscriptions(['/user/events']); diff --git a/cypress/e2e/profile.cy.ts b/cypress/e2e/profile.cy.ts index 6f5c03aa1..7d85093d8 100644 --- a/cypress/e2e/profile.cy.ts +++ b/cypress/e2e/profile.cy.ts @@ -178,8 +178,6 @@ describe('profile', () => { }); it('deactivate and activate email notification consultant', () => { - cy.wait('@consultingTypeServiceBaseBasic'); - cy.contains('Profil').should('exist').click(); cy.contains('Einstellungen').should('exist').click(); cy.contains('E-Mail-Benachrichtigungen'); diff --git a/cypress/e2e/release-notes.cy.ts b/cypress/e2e/release-notes.cy.ts index 5fa0d186d..0377a15c9 100644 --- a/cypress/e2e/release-notes.cy.ts +++ b/cypress/e2e/release-notes.cy.ts @@ -46,7 +46,6 @@ describe('release-note', () => { cy.fastLogin({ userId: USER_CONSULTANT }); - cy.wait('@consultingTypeServiceBaseBasic'); cy.wait('@releases'); cy.wait('@releases_markup'); @@ -88,7 +87,6 @@ describe('release-note', () => { cy.fastLogin({ userId: USER_CONSULTANT }); - cy.wait('@consultingTypeServiceBaseBasic'); cy.wait('@releases'); cy.wait('@releases_markup'); @@ -109,7 +107,6 @@ describe('release-note', () => { cy.fastLogin({ userId: USER_CONSULTANT }); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('.releaseNote').should('not.exist'); }); diff --git a/cypress/e2e/sessions.cy.ts b/cypress/e2e/sessions.cy.ts index 53a90ff86..749ebe9fc 100644 --- a/cypress/e2e/sessions.cy.ts +++ b/cypress/e2e/sessions.cy.ts @@ -33,7 +33,6 @@ describe('Sessions', () => { cy.fastLogin({ userId: USER_CONSULTANT }); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('a[href="/sessions/consultant/sessionView"]').click(); cy.get('.sessionsListItem').should('exist'); @@ -61,7 +60,6 @@ describe('Sessions', () => { cy.fastLogin({ userId: USER_CONSULTANT }); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('a[href="/sessions/consultant/sessionView"]').click(); cy.get('.sessionsListItem').should('have.length', 6); @@ -73,7 +71,6 @@ describe('Sessions', () => { cy.fastLogin({ userId: USER_CONSULTANT }); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('a[href="/sessions/consultant/sessionView"]').click(); cy.wait('@consultantSessions'); @@ -102,7 +99,6 @@ describe('Sessions', () => { cy.fastLogin({ userId: USER_CONSULTANT }); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('a[href="/sessions/consultant/sessionView"]').click(); cy.get('.sessionsListItem').should('exist'); @@ -137,10 +133,11 @@ describe('Sessions', () => { userId: USER_CONSULTANT }); cy.wait('@rcSettingsPublic'); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('a[href="/sessions/consultant/sessionView"]').click(); - cy.wait('@consultantSessions'); + cy.wait('@consultantSessions') + .its('response.statusCode') + .should('eq', 200); cy.get('.sessionsListItem.skeleton').should('not.exist'); cy.get('.sessionsListItem').should('exist'); @@ -159,14 +156,12 @@ describe('Sessions', () => { it('should list my sessions', () => { generateMultipleAskerSessions(3); cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('.sessionsListItem').should('have.length', 4); }); it('should show a header with headline', () => { cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('[data-cy=session-list-header]').should('exist'); cy.get('[data-cy=session-list-headline]').contains( 'Meine Beratungen' @@ -180,7 +175,6 @@ describe('Sessions', () => { MAX_ITEMS_TO_SHOW_WELCOME_ILLUSTRATION - 1 ); cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('[data-cy=session-list-welcome-illustration]').should( 'exist' @@ -192,7 +186,6 @@ describe('Sessions', () => { MAX_ITEMS_TO_SHOW_WELCOME_ILLUSTRATION ); cy.fastLogin(); - cy.wait('@consultingTypeServiceBaseBasic'); cy.get('[data-cy=session-list-welcome-illustration]').should( 'not.exist' diff --git a/cypress/fixtures/service.agencies.json b/cypress/fixtures/service.agencies.json index a5229da9e..fa14f1ff9 100644 --- a/cypress/fixtures/service.agencies.json +++ b/cypress/fixtures/service.agencies.json @@ -7,6 +7,8 @@ "description": "description", "teamAgency": true, "offline": false, - "consultingType": 1 + "consultingType": 1, + "url": "url", + "tenantId": "tenantId" } ] diff --git a/cypress/fixtures/service.topicGroups.json b/cypress/fixtures/service.topicGroups.json new file mode 100644 index 000000000..daa1bfd06 --- /dev/null +++ b/cypress/fixtures/service.topicGroups.json @@ -0,0 +1,21 @@ +{ + "data": { + "items": [ + { + "id": 1, + "name": "Alter", + "topicIds": [1] + }, + { + "id": 3, + "name": "Existenzsicherung", + "topicIds": [4] + }, + { + "id": 2, + "name": "Besondere Lebenssituationen und Krisen", + "topicIds": [3, 2] + } + ] + } +} diff --git a/cypress/fixtures/service.topics.json b/cypress/fixtures/service.topics.json new file mode 100644 index 000000000..f0af099fb --- /dev/null +++ b/cypress/fixtures/service.topics.json @@ -0,0 +1,38 @@ +[ + { + "id": 1, + "name": "Beratung für straffällig gewordene Menschen und ihre Angehörigen", + "description": "Sie waren in Haft und haben Fragen zu Ansprüchen auf Sozialleistungen? Sie brauchen Unterstützung bei der Wohnungs- und Arbeitssuche? Sie haben persönliche Probleme? Rund um die Haft gibt es Situationen, die man nicht alleine stemmen kann. Wir helfen Ihnen vertraulich und kostenfrei.", + "internalIdentifier": "string", + "status": "string", + "createDate": "string", + "updateDate": "string" + }, + { + "id": 2, + "name": "Beratung bei Wohnungsnotfällen", + "description": "Sie haben keine Wohnung oder Angst Ihr Zuhause zu verlieren? Sie leben in unzumutbaren Wohnverhältnissen? Sie sind in einer Notlage? Wir helfen Ihnen vertraulich und kostenfrei hier in der Online-Beratung.", + "internalIdentifier": "string", + "status": "string", + "createDate": "string", + "updateDate": "string" + }, + { + "id": 3, + "name": "Beratung für Menschen in Prostitution und Menschenhandel", + "description": "Sie sind Sexarbeiter:in und erleben häufig Stigmatisierung, Diskriminierung und Abwertung? Sie wollen nicht mehr als Sexarbeiter:in arbeiten? Wir unterstützen sie darin, Ihre Rechte durchzusetzen, organisieren notwendige Hilfen und helfen beim Ausstieg.", + "internalIdentifier": "string", + "status": "string", + "createDate": "string", + "updateDate": "string" + }, + { + "id": 4, + "name": "Suchtberatung und -prävention", + "description": "Sie haben ein Suchtproblem oder machen sich Sorgen um betroffene Freunde und Verwandte? Sie haben Fragen zu Sucht und Abhängigkeit - Alkohol, Drogen, Medikamente, Glücksspiel, Computer-/Medienkonsum? Wir beraten Sie vertraulich und kostenfrei hier in der Online-Beratung.", + "internalIdentifier": "string", + "status": "string", + "createDate": "string", + "updateDate": "string" + } +] diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js new file mode 100644 index 000000000..45fda0153 --- /dev/null +++ b/cypress/plugins/index.js @@ -0,0 +1,6 @@ +const injectDevServer = require('@cypress/react/plugins/react-scripts'); + +module.exports = (on, config) => { + injectDevServer(on, config); + return config; +}; diff --git a/cypress/support/commands/helper/appointments.ts b/cypress/support/commands/helper/appointments.ts index 04b8f0c4d..ebfbdc220 100644 --- a/cypress/support/commands/helper/appointments.ts +++ b/cypress/support/commands/helper/appointments.ts @@ -28,7 +28,7 @@ export const updateAppointment = ( return appointment; }; -Cypress.Commands.add( +Cypress.Commands.add( 'appointments', (props?: { [key: string]: any }, index?: number) => new Cypress.Promise((resolve) => { diff --git a/cypress/support/commands/helper/fastLogin.ts b/cypress/support/commands/helper/fastLogin.ts index 6dc722bf4..74efcba2a 100644 --- a/cypress/support/commands/helper/fastLogin.ts +++ b/cypress/support/commands/helper/fastLogin.ts @@ -17,6 +17,12 @@ const fastLoginCommand = (getWillReturn, setWillReturn) => cy.setCookie('cy_userId', userData.userId); }); + // ToDo: Required? + window.sessionStorage.removeItem('public_key'); + window.sessionStorage.removeItem('private_key'); + cy.clearCookie('lang'); + cy.willReturn('userData', { preferredLanguage: null }, true); + cy.window().then((window) => { cy.fixture('api.v1.login').then((res) => { if (res.data.authToken) { @@ -46,6 +52,10 @@ const fastLoginCommand = (getWillReturn, setWillReturn) => cy.visit('/app'); cy.wait('@usersData'); + cy.wait('@settings'); + cy.wait('@consultingTypeServiceBaseBasic'); + cy.wait('@patchUsersData'); + cy.wait('@fetchMyKeys'); if (userId === USER_ASKER) { cy.wait('@askerSessions'); } else { diff --git a/cypress/support/component-index.html b/cypress/support/component-index.html new file mode 100644 index 000000000..b49ed368f --- /dev/null +++ b/cypress/support/component-index.html @@ -0,0 +1,13 @@ + + + + + + + Components App +
+ + +
+ + diff --git a/cypress/support/component.ts b/cypress/support/component.ts new file mode 100644 index 000000000..88879ee76 --- /dev/null +++ b/cypress/support/component.ts @@ -0,0 +1,5 @@ +import './commands'; + +import { mount } from 'cypress/react'; + +Cypress.Commands.add('mount', mount); diff --git a/cypress/support/index.d.ts b/cypress/support/index.d.ts index 0030bb35b..d44e2c7df 100644 --- a/cypress/support/index.d.ts +++ b/cypress/support/index.d.ts @@ -1,5 +1,5 @@ /// - +import { mount } from 'cypress/react'; import { LoginArgs } from './commands/mockApi'; import { AppointmentsDataInterface } from '../../src/globalState/interfaces'; import * as Bluebird from 'cypress/types/bluebird'; @@ -45,6 +45,8 @@ declare global { emitVideoCallRequest(): Chainable; waitForSubscriptions(events: string[]): Chainable; + + mount: typeof mount; } } } diff --git a/package-lock.json b/package-lock.json index 59c3a0e09..1b9944629 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,24 +11,25 @@ "@calcom/embed-snippet": "^1.0.1", "@draft-js-plugins/buttons": "^4.3.2", "@draft-js-plugins/editor": "^4.1.3", - "@draft-js-plugins/emoji": "^4.6.3", + "@draft-js-plugins/emoji": "^4.6.5", "@draft-js-plugins/linkify": "^4.2.1", "@draft-js-plugins/static-toolbar": "^4.1.3", - "@emotion/react": "^11.10.6", - "@emotion/styled": "^11.10.6", - "@jitsi/react-sdk": "^1.0.2", + "@emotion/react": "^11.11.0", + "@emotion/styled": "^11.11.0", + "@jitsi/react-sdk": "^1.3.0", "@juggle/resize-observer": "^3.4.0", - "@mui/material": "^5.12.1", + "@mui/icons-material": "^5.11.16", + "@mui/material": "^5.13.7", "@onlineberatung/onlineberatung-frontend-extensions": "file:src/extensions", - "@stomp/stompjs": "^6.1.2", + "@stomp/stompjs": "^7.0.0", "bfj": "^8.0.0", "browserslist": "^4.22.2", "bytebuffer": "^5.0.1", "classnames": "^2.5.1", - "clsx": "^1.1.1", + "clsx": "^1.2.1", "core-js": "^3.35.1", "crypto-js": "^4.2.0", - "dayjs": "^1.10.7", + "dayjs": "^1.11.8", "draft-js": "0.11.7", "draft-js-export-html": "1.4.1", "element-closest": "^3.0.2", @@ -36,7 +37,7 @@ "element-scroll-polyfill": "^1.0.1", "fastestsmallesttextencoderdecoder": "^1.0.22", "flat": "^5.0.2", - "focus-trap-react": "^9.0.2", + "focus-trap-react": "^10.1.4", "fs-extra": "^11.2.0", "get-contrast": "^3.0.0", "hi-base32": "0.5.1", @@ -54,10 +55,10 @@ "jotai": "^2.7.0", "js-autocomplete": "^1.0.4", "lodash": "^4.17.21", - "markdown-draft-js": "2.2.1", + "markdown-draft-js": "^2.4.0", "mini-css-extract-plugin": "^2.7.7", "prompts": "^2.4.2", - "qrcode": "^1.5.0", + "qrcode": "^1.5.3", "react": "^17.0.2", "react-app-polyfill": "^3.0.0", "react-csv": "^2.2.2", @@ -65,13 +66,14 @@ "react-dev-utils": "^12.0.1", "react-device-detect": "^2.2.3", "react-dom": "^17.0.2", - "react-dropzone": "^14.2.1", + "react-dropzone": "^14.2.3", + "react-helmet": "^6.1.0", "react-i18next": "^14.0.5", "react-refresh": "^0.14.0", "react-responsive": "^9.0.2", - "react-router-dom": "5.2.0", + "react-router-dom": "^5.3.4", "react-select": "4.3.1", - "react-switch": "^6.0.0", + "react-switch": "^7.0.0", "react-use-measure": "^2.1.1", "resolve": "^1.22.8", "resolve-url-loader": "^5.0.0", @@ -81,10 +83,10 @@ "source-map-loader": "^5.0.0", "stacktrace-js": "^2.0.2", "url-loader": "4.1.1", - "use-constant": "^1.1.0", - "use-debounce": "^7.0.0", - "uuid": "^8.3.2", - "web-vitals": "^2.1.3", + "use-constant": "^1.1.1", + "use-debounce": "^9.0.4", + "uuid": "^9.0.0", + "web-vitals": "^3.3.2", "whatwg-fetch": "^3.6.20" }, "bin": { @@ -95,19 +97,30 @@ "@babel/eslint-parser": "^7.23.3", "@commitlint/cli": "^18.5.0", "@commitlint/config-conventional": "^18.5.0", + "@cypress/react": "^7.0.3", + "@cypress/webpack-dev-server": "^3.5.1", "@cypress/webpack-preprocessor": "^6.0.1", "@dtsgenerator/replace-namespace": "^1.6.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", - "@svgr/webpack": "^6.2.0", - "@types/bytebuffer": "^5.0.43", - "@types/draft-js": "0.11.3", + "@storybook/addon-essentials": "^7.0.18", + "@storybook/addon-interactions": "^7.0.18", + "@storybook/addon-links": "^7.0.18", + "@storybook/blocks": "^7.0.18", + "@storybook/preset-scss": "^1.0.3", + "@storybook/react": "^7.0.26", + "@storybook/react-webpack5": "^7.0.18", + "@storybook/testing-library": "^0.1.0", + "@svgr/webpack": "^8.0.1", + "@types/bytebuffer": "^5.0.44", + "@types/draft-js": "0.11.11", "@types/flat": "^5.0.5", - "@types/node": "^18.16.1", - "@types/react": "^17.0.11", - "@types/react-dom": "^17.0.8", + "@types/node": "^20.2.5", + "@types/prettier": "^2.7.3", + "@types/react": "^17.0.60", + "@types/react-dom": "^17.0.20", "@types/react-router-dom": "^5.3.3", - "@types/sanitize-html": "^2.6.2", - "@types/uuid": "^8.3.2", + "@types/sanitize-html": "^2.9.0", + "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "^6.19.1", "@typescript-eslint/parser": "^6.19.1", "babel-loader": "^9.1.3", @@ -146,7 +159,7 @@ "npm-run-all": "^4.1.5", "postcss": "^8.4.33", "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", + "postcss-loader": "^7.3.2", "postcss-normalize": "^10.0.1", "postcss-preset-env": "^7.2.3", "postcss-safe-parser": "^6.0.0", @@ -156,6 +169,8 @@ "sass-loader": "^14.0.0", "serve": "^14.2.1", "standard-version": "^9.5.0", + "storybook": "^7.0.18", + "storybook-react-i18next": "^2.0.6", "style-loader": "^3.3.4", "stylelint": "^15.11.0", "stylelint-config-standard": "^34.0.0", @@ -211,6 +226,18 @@ "ajv": ">=8" } }, + "node_modules/@aw-web-design/x-default-browser": { + "version": "1.4.126", + "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz", + "integrity": "sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==", + "dev": true, + "dependencies": { + "default-browser-id": "3.0.0" + }, + "bin": { + "x-default-browser": "bin/x-default-browser.js" + } + }, "node_modules/@babel/code-frame": { "version": "7.23.5", "license": "MIT", @@ -502,9 +529,10 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2025,6 +2053,23 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/preset-flow": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.0.tgz", + "integrity": "sha512-cum/nSi82cDaSJ21I4PgLTVlj0OXovFk6GRguJYe/IKg6y6JHLTbJhybtX4k35WT9wdeJfEVjycTixMhBHd0Dg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-transform-flow-strip-types": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "dev": true, @@ -2075,6 +2120,112 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/register": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz", + "integrity": "sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.6", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/register/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/register/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@babel/regjsgen": { "version": "0.8.0", "dev": true, @@ -2136,6 +2287,12 @@ "node": ">=6.9.0" } }, + "node_modules/@base2/pretty-print-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", + "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", + "dev": true + }, "node_modules/@calcom/embed-core": { "version": "1.3.2", "license": "SEE LICENSE IN LICENSE" @@ -2924,6 +3081,23 @@ "postcss-selector-parser": "^6.0.10" } }, + "node_modules/@cypress/react": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@cypress/react/-/react-7.0.3.tgz", + "integrity": "sha512-YseqnMugTbdPV9YCYEMXVqIf+P7x+pfjXOdjv4dnDFqNCZeHaZfOZVFZ4XfEHVxMv0aDszxlaLiIp3QDPhr12w==", + "dev": true, + "peerDependencies": { + "@types/react": "^16.9.16 || ^17.0.0", + "cypress": "*", + "react": "^=16.x || ^=17.x", + "react-dom": "^=16.x || ^=17.x" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@cypress/request": { "version": "3.0.1", "dev": true, @@ -2952,6 +3126,130 @@ "node": ">= 6" } }, + "node_modules/@cypress/request/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@cypress/webpack-dev-server": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@cypress/webpack-dev-server/-/webpack-dev-server-3.7.4.tgz", + "integrity": "sha512-/j6Hgq7eDKuoqa6hsnf4y01PFXMQJEjvj8cXSQB597Ufpm3kApwsRlHj4cN1kyaRckujbfPaXX/5gMHDbOTM1g==", + "dev": true, + "dependencies": { + "find-up": "6.3.0", + "fs-extra": "9.1.0", + "html-webpack-plugin-4": "npm:html-webpack-plugin@^4", + "html-webpack-plugin-5": "npm:html-webpack-plugin@^5", + "local-pkg": "0.4.1", + "semver": "^7.5.3", + "speed-measure-webpack-plugin": "1.4.2", + "tslib": "^2.3.1", + "webpack-dev-server": "^4.7.4", + "webpack-merge": "^5.4.0" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@cypress/webpack-dev-server/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@cypress/webpack-preprocessor": { "version": "6.0.1", "dev": true, @@ -2985,6 +3283,15 @@ "ms": "^2.1.1" } }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@draft-js-plugins/buttons": { "version": "4.3.3", "license": "MIT", @@ -3219,54 +3526,406 @@ "version": "0.3.1", "license": "MIT" }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=12" } }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "devOptional": true, - "license": "Apache-2.0", + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "devOptional": true, - "license": "MIT", + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "devOptional": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -3347,6 +4006,12 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fal-works/esbuild-plugin-global-externals": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz", + "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==", + "dev": true + }, "node_modules/@floating-ui/core": { "version": "1.5.3", "license": "MIT", @@ -3532,57 +4197,287 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, - "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/@jest/types": { - "version": "29.6.3", + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=10" + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" @@ -3686,6 +4581,23 @@ "dev": true, "license": "MIT" }, + "node_modules/@mdx-js/react": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz", + "integrity": "sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==", + "dev": true, + "dependencies": { + "@types/mdx": "^2.0.0", + "@types/react": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": ">=16" + } + }, "node_modules/@messageformat/core": { "version": "3.3.0", "dev": true, @@ -3770,6 +4682,31 @@ "url": "https://opencollective.com/mui-org" } }, + "node_modules/@mui/icons-material": { + "version": "5.15.13", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.13.tgz", + "integrity": "sha512-I7CioMQKBPaKyGgcE9i8+1dgzAmox5a/0wZ0E9sIxm7PzG5KJZRRJkdK4oDT4HfYRGv61KjcHEeqH48pht1dvQ==", + "dependencies": { + "@babel/runtime": "^7.23.9" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@mui/material": { "version": "5.15.6", "license": "MIT", @@ -3958,6 +4895,17 @@ } } }, + "node_modules/@ndelangen/get-tarball": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz", + "integrity": "sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==", + "dev": true, + "dependencies": { + "gunzip-maybe": "^1.4.2", + "pump": "^3.0.0", + "tar-fs": "^2.1.1" + } + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "dev": true, @@ -4108,123 +5056,3252 @@ } } }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", + "node_modules/@radix-ui/number": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz", + "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", + "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "@types/babel__core": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { "optional": true } } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", + "node_modules/@radix-ui/react-collection": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", + "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", "dev": true, - "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", "dev": true, - "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", + "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz", + "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz", + "integrity": "sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz", + "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz", + "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", + "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.2.tgz", + "integrity": "sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.1", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.4", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.3", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.2", + "@radix-ui/react-portal": "1.0.3", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.0.3.tgz", + "integrity": "sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.0.3.tgz", + "integrity": "sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.0.4.tgz", + "integrity": "sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-toggle": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toolbar": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.0.4.tgz", + "integrity": "sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-separator": "1.0.3", + "@radix-ui/react-toggle-group": "1.0.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", + "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", + "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", + "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", + "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", + "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.7.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@stomp/stompjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@stomp/stompjs/-/stompjs-7.0.0.tgz", + "integrity": "sha512-fGdq4wPDnSV/KyOsjq4P+zLc8MFWC3lMmP5FBgLWKPJTYcuCbAIrnRGjB7q2jHZdYCOD5vxLuFoKIYLy5/u8Pw==" + }, + "node_modules/@storybook/addon-actions": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.17.tgz", + "integrity": "sha512-TBphs4v6LRfyTpFo/WINF0TkMaE3rrNog7wW5mbz6n0j8o53kDN4o9ZEcygSL5zQX43CAaghQTeDCss7ueG7ZQ==", + "dev": true, + "dependencies": { + "@storybook/core-events": "7.6.17", + "@storybook/global": "^5.0.0", + "@types/uuid": "^9.0.1", + "dequal": "^2.0.2", + "polished": "^4.2.2", + "uuid": "^9.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-backgrounds": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.17.tgz", + "integrity": "sha512-7dize7x8+37PH77kmt69b0xSaeDqOcZ4fpzW6+hk53hIaCVU26eGs4+j+743Xva31eOgZWNLupUhOpUDc6SqZw==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-controls": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.17.tgz", + "integrity": "sha512-zR0aLaUF7FtV/nMRyfniFbCls/e0DAAoXACuOAUAwNAv0lbIS8AyZZiHSmKucCvziUQ6WceeCC7+du3C+9y0rQ==", + "dev": true, + "dependencies": { + "@storybook/blocks": "7.6.17", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-docs": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.17.tgz", + "integrity": "sha512-FKa4Mdy7nhgvEVZJHpMkHriDzpVHbohn87zv9NCL+Ctjs1iAmzGwxEm0culszyDS1HN2ToVoY0h8CSi2RSSZqA==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.3.1", + "@mdx-js/react": "^2.1.5", + "@storybook/blocks": "7.6.17", + "@storybook/client-logger": "7.6.17", + "@storybook/components": "7.6.17", + "@storybook/csf-plugin": "7.6.17", + "@storybook/csf-tools": "7.6.17", + "@storybook/global": "^5.0.0", + "@storybook/mdx2-csf": "^1.0.0", + "@storybook/node-logger": "7.6.17", + "@storybook/postinstall": "7.6.17", + "@storybook/preview-api": "7.6.17", + "@storybook/react-dom-shim": "7.6.17", + "@storybook/theming": "7.6.17", + "@storybook/types": "7.6.17", + "fs-extra": "^11.1.0", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-essentials": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.17.tgz", + "integrity": "sha512-qlSpamxuYfT2taF953nC9QijGF2pSbg1ewMNpdwLTj16PTZvR/d8NCDMTJujI1bDwM2m18u8Yc43ibh5LEmxCw==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "7.6.17", + "@storybook/addon-backgrounds": "7.6.17", + "@storybook/addon-controls": "7.6.17", + "@storybook/addon-docs": "7.6.17", + "@storybook/addon-highlight": "7.6.17", + "@storybook/addon-measure": "7.6.17", + "@storybook/addon-outline": "7.6.17", + "@storybook/addon-toolbars": "7.6.17", + "@storybook/addon-viewport": "7.6.17", + "@storybook/core-common": "7.6.17", + "@storybook/manager-api": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@storybook/preview-api": "7.6.17", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-highlight": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.17.tgz", + "integrity": "sha512-R1yBPUUqGn+60aJakn8q+5Zt34E/gU3n3VmgPdryP0LJUdZ5q1/RZShoVDV+yYQ40htMH6oaCv3OyyPzFAGJ6A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-interactions": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.6.17.tgz", + "integrity": "sha512-6zlX+RDQ1PlA6fp7C+hun8t7h2RXfCGs5dGrhEenp2lqnR/rYuUJRC0tmKpkZBb8kZVcbSChzkB/JYkBjBCzpQ==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0", + "@storybook/types": "7.6.17", + "jest-mock": "^27.0.6", + "polished": "^4.2.2", + "ts-dedent": "^2.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-links": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.17.tgz", + "integrity": "sha512-iFUwKObRn0EKI0zMETsil2p9a/81rCuSMEWECsi+khkCAs1FUnD2cT6Ag5ydcNcBXsdtdfDJdtXQrkw+TSoStQ==", + "dev": true, + "dependencies": { + "@storybook/csf": "^0.1.2", + "@storybook/global": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-measure": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.17.tgz", + "integrity": "sha512-O5vnHZNkduvZ95jf1UssbOl6ivIxzl5tv+4EpScPYId7w700bxWsJH+QX7ip6KlrCf2o3iUhmPe8bm05ghG2KA==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-outline": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.17.tgz", + "integrity": "sha512-9o9JXDsYjNaDgz/cY5+jv694+aik/1aiRGGvsCv68e1p/ob0glkGKav4lnJe2VJqD+gCmaARoD8GOJlhoQl8JQ==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-toolbars": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.17.tgz", + "integrity": "sha512-UMrchbUHiyWrh6WuGnpy34Jqzkx/63B+MSgb3CW7YsQaXz64kE0Rol0TNSznnB+mYXplcqH+ndI4r4kFsmgwDg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-viewport": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.17.tgz", + "integrity": "sha512-sA0QCcf4QAMixWvn8uvRYPfkKCSl6JajJaAspoPqXSxHEpK7uwOlpg3kqFU5XJJPXD0X957M+ONgNvBzYqSpEw==", + "dev": true, + "dependencies": { + "memoizerific": "^1.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/blocks": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.17.tgz", + "integrity": "sha512-PsNVoe0bX1mMn4Kk3nbKZ0ItDZZ0YJnYAFJ6toAbsyBAbgzg1sce88sQinzvbn58/RT9MPKeWMPB45ZS7ggiNg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.17", + "@storybook/client-logger": "7.6.17", + "@storybook/components": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/csf": "^0.1.2", + "@storybook/docs-tools": "7.6.17", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.6.17", + "@storybook/preview-api": "7.6.17", + "@storybook/theming": "7.6.17", + "@storybook/types": "7.6.17", + "@types/lodash": "^4.14.167", + "color-convert": "^2.0.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.1.8", + "memoizerific": "^1.11.3", + "polished": "^4.2.2", + "react-colorful": "^5.1.2", + "telejson": "^7.2.0", + "tocbot": "^4.20.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/blocks/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/blocks/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@storybook/builder-manager": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.17.tgz", + "integrity": "sha512-Sj8hcDYiPCCMfeLzus37czl0zdrAxAz4IyYam2jBjVymrIrcDAFyL1OCZvnq33ft179QYQWhUs9qwzVmlR/ZWg==", + "dev": true, + "dependencies": { + "@fal-works/esbuild-plugin-global-externals": "^2.1.2", + "@storybook/core-common": "7.6.17", + "@storybook/manager": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@types/ejs": "^3.1.1", + "@types/find-cache-dir": "^3.2.1", + "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", + "browser-assert": "^1.2.1", + "ejs": "^3.1.8", + "esbuild": "^0.18.0", + "esbuild-plugin-alias": "^0.2.1", + "express": "^4.17.3", + "find-cache-dir": "^3.0.0", + "fs-extra": "^11.1.0", + "process": "^0.11.10", + "util": "^0.12.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/builder-manager/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/@storybook/builder-manager/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-manager/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-manager/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/builder-manager/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/builder-manager/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-manager/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-manager/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@storybook/builder-webpack5": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.17.tgz", + "integrity": "sha512-GMaBd8/RzivuAmWrYSt9Rga3j8WLcu5LCMYiPVs+XKXsKAC8lTkV0WRWh8Nk6wTmfzsRQ2acwFjSG5oE4ClZKA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.2", + "@storybook/channels": "7.6.17", + "@storybook/client-logger": "7.6.17", + "@storybook/core-common": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/core-webpack": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@storybook/preview": "7.6.17", + "@storybook/preview-api": "7.6.17", + "@swc/core": "^1.3.82", + "@types/node": "^18.0.0", + "@types/semver": "^7.3.4", + "babel-loader": "^9.0.0", + "browser-assert": "^1.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "cjs-module-lexer": "^1.2.3", + "constants-browserify": "^1.0.0", + "css-loader": "^6.7.1", + "es-module-lexer": "^1.4.1", + "express": "^4.17.3", + "fork-ts-checker-webpack-plugin": "^8.0.0", + "fs-extra": "^11.1.0", + "html-webpack-plugin": "^5.5.0", + "magic-string": "^0.30.5", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "semver": "^7.3.7", + "style-loader": "^3.3.1", + "swc-loader": "^0.2.3", + "terser-webpack-plugin": "^5.3.1", + "ts-dedent": "^2.0.0", + "url": "^0.11.0", + "util": "^0.12.4", + "util-deprecate": "^1.0.2", + "webpack": "5", + "webpack-dev-middleware": "^6.1.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { + "version": "18.19.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.24.tgz", + "integrity": "sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@storybook/builder-webpack5/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz", + "integrity": "sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">=12.13.0", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "typescript": ">3.6.0", + "webpack": "^5.11.0" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/channels": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz", + "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.17.tgz", + "integrity": "sha512-1sCo+nCqyR+nKfTcEidVu8XzNoECC7Y1l+uW38/r7s2f/TdDorXaIGAVrpjbSaXSoQpx5DxYJVaKCcQuOgqwcA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.2", + "@babel/preset-env": "^7.23.2", + "@babel/types": "^7.23.0", + "@ndelangen/get-tarball": "^3.0.7", + "@storybook/codemod": "7.6.17", + "@storybook/core-common": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/core-server": "7.6.17", + "@storybook/csf-tools": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@storybook/telemetry": "7.6.17", + "@storybook/types": "7.6.17", + "@types/semver": "^7.3.4", + "@yarnpkg/fslib": "2.10.3", + "@yarnpkg/libzip": "2.3.0", + "chalk": "^4.1.0", + "commander": "^6.2.1", + "cross-spawn": "^7.0.3", + "detect-indent": "^6.1.0", + "envinfo": "^7.7.3", + "execa": "^5.0.0", + "express": "^4.17.3", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "get-npm-tarball-url": "^2.0.3", + "get-port": "^5.1.1", + "giget": "^1.0.0", + "globby": "^11.0.2", + "jscodeshift": "^0.15.1", + "leven": "^3.1.0", + "ora": "^5.4.1", + "prettier": "^2.8.0", + "prompts": "^2.4.0", + "puppeteer-core": "^2.1.1", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "strip-json-comments": "^3.0.1", + "tempy": "^1.0.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "bin": { + "getstorybook": "bin/index.js", + "sb": "bin/index.js" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@storybook/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/cli/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/cli/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/cli/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@storybook/cli/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/cli/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/cli/node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/cli/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/cli/node_modules/tempy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", + "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", + "dev": true, + "dependencies": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/cli/node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/cli/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/client-logger": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz", + "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.17.tgz", + "integrity": "sha512-JuTmf2u3C4fCnjO7o3dqRgrq3ozNYfWlrRP8xuIdvT7niMap7a396hJtSKqS10FxCgKFcMAOsRgrCalH1dWxUg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.2", + "@babel/preset-env": "^7.23.2", + "@babel/types": "^7.23.0", + "@storybook/csf": "^0.1.2", + "@storybook/csf-tools": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@storybook/types": "7.6.17", + "@types/cross-spawn": "^6.0.2", + "cross-spawn": "^7.0.3", + "globby": "^11.0.2", + "jscodeshift": "^0.15.1", + "lodash": "^4.17.21", + "prettier": "^2.8.0", + "recast": "^0.23.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@storybook/components": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.17.tgz", + "integrity": "sha512-lbh7GynMidA+CZcJnstVku6Nhs+YkqjYaZ+mKPugvlVhGVWv0DaaeQFVuZ8cJtUGJ/5FFU4Y+n+gylYUHkGBMA==", + "dev": true, + "dependencies": { + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.6.17", + "@storybook/csf": "^0.1.2", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.6.17", + "@storybook/types": "7.6.17", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/core-client": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.17.tgz", + "integrity": "sha512-LuDbADK+DPNAOOCXOlvY09hdGVueXlDetsdOJ/DgYnSa9QSWv9Uv+F8QcEgR3QckZJbPlztKJIVLgP2n/Xkijw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.17", + "@storybook/preview-api": "7.6.17" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-common": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.17.tgz", + "integrity": "sha512-me2TP3Q9/qzqCLoDHUSsUF+VS1MHxfHbTVF6vAz0D/COTxzsxLpu9TxTbzJoBCxse6XRb6wWI1RgF1mIcjic7g==", + "dev": true, + "dependencies": { + "@storybook/core-events": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@storybook/types": "7.6.17", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^18.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.5.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-common/node_modules/@types/node": { + "version": "18.19.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.24.tgz", + "integrity": "sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@storybook/core-common/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/core-common/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/core-common/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/core-common/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@storybook/core-common/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/@storybook/core-common/node_modules/find-cache-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-common/node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-common/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/core-common/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-common/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-common/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/core-common/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/core-common/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-common/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/core-common/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@storybook/core-common/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-events": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz", + "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.17.tgz", + "integrity": "sha512-KWGhTTaL1Q14FolcoKKZgytlPJUbH6sbJ1Ptj/84EYWFewcnEgVs0Zlnh1VStRZg+Rd1WC1V4yVd/bbDzxrvQA==", + "dev": true, + "dependencies": { + "@aw-web-design/x-default-browser": "1.4.126", + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-manager": "7.6.17", + "@storybook/channels": "7.6.17", + "@storybook/core-common": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/csf": "^0.1.2", + "@storybook/csf-tools": "7.6.17", + "@storybook/docs-mdx": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/manager": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@storybook/preview-api": "7.6.17", + "@storybook/telemetry": "7.6.17", + "@storybook/types": "7.6.17", + "@types/detect-port": "^1.3.0", + "@types/node": "^18.0.0", + "@types/pretty-hrtime": "^1.0.0", + "@types/semver": "^7.3.4", + "better-opn": "^3.0.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "compression": "^1.7.4", + "detect-port": "^1.3.0", + "express": "^4.17.3", + "fs-extra": "^11.1.0", + "globby": "^11.0.2", + "ip": "^2.0.1", + "lodash": "^4.17.21", + "open": "^8.4.0", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1", + "ts-dedent": "^2.0.0", + "util": "^0.12.4", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "ws": "^8.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/@types/node": { + "version": "18.19.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.24.tgz", + "integrity": "sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@storybook/core-server/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/core-server/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/core-server/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/core-server/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@storybook/core-server/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/core-server/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/core-server/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-webpack": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.17.tgz", + "integrity": "sha512-PyGrFhRM8sTONGwwLWLqBQ1HO+LBnVZ+5TOQO7ejQfdV2FWyNOzjBXm2e5jL/C6XlqiEhmL5pyHEyDBaQJQ3KA==", + "dev": true, + "dependencies": { + "@storybook/core-common": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@storybook/types": "7.6.17", + "@types/node": "^18.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@types/node": { + "version": "18.19.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.24.tgz", + "integrity": "sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@storybook/csf": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.2.tgz", + "integrity": "sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==", + "dev": true, + "dependencies": { + "type-fest": "^2.19.0" + } + }, + "node_modules/@storybook/csf-plugin": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.17.tgz", + "integrity": "sha512-xTHv9BUh3bkDVCvcbmdfVF0/e96BdrEgqPJ3G3RmKbSzWLOkQ2U9yiPfHzT0KJWPhVwj12fjfZp0zunu+pcS6Q==", + "dev": true, + "dependencies": { + "@storybook/csf-tools": "7.6.17", + "unplugin": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf-tools": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.17.tgz", + "integrity": "sha512-dAQtam0EBPeTJYcQPLxXgz4L9JFqD+HWbLFG9CmNIhMMjticrB0mpk1EFIS6vPXk/VsVWpBgMLD7dZlD6YMKcQ==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "@storybook/csf": "^0.1.2", + "@storybook/types": "7.6.17", + "fs-extra": "^11.1.0", + "recast": "^0.23.1", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/docs-mdx": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz", + "integrity": "sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==", + "dev": true + }, + "node_modules/@storybook/docs-tools": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.17.tgz", + "integrity": "sha512-bYrLoj06adqklyLkEwD32C0Ww6t+9ZVvrJHiVT42bIhTRpFiFPAetl1a9KPHtFLnfduh4n2IxIr1jv32ThPDTA==", + "dev": true, + "dependencies": { + "@storybook/core-common": "7.6.17", + "@storybook/preview-api": "7.6.17", + "@storybook/types": "7.6.17", + "@types/doctrine": "^0.0.3", + "assert": "^2.1.0", + "doctrine": "^3.0.0", + "lodash": "^4.17.21" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/global": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", + "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", + "dev": true + }, + "node_modules/@storybook/instrumenter": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.6.17.tgz", + "integrity": "sha512-zTLIPTt1fvlWgkIVUyQpF327iVE+EiPdpM0Or0aARaNfIikPRBTcjU+6cK96E+Ust2E1qKajEjIuv4i4lLQPng==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.17", + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/global": "^5.0.0", + "@storybook/preview-api": "7.6.17", + "@vitest/utils": "^0.34.6", + "util": "^0.12.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/manager": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.17.tgz", + "integrity": "sha512-A1LDDIqMpwRzq/dqkbbiza0QI04o4ZHCl2a3UMDZUV/+QLc2nsr2DAaLk4CVL4/cIc5zGqmIcaOTvprx2YKVBw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/manager-api": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.17.tgz", + "integrity": "sha512-IJIV1Yc6yw1dhCY4tReHCfBnUKDqEBnMyHp3mbXpsaHxnxJZrXO45WjRAZIKlQKhl/Ge1CrnznmHRCmYgqmrWg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.17", + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/csf": "^0.1.2", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.6.17", + "@storybook/theming": "7.6.17", + "@storybook/types": "7.6.17", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/mdx2-csf": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz", + "integrity": "sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==", + "dev": true + }, + "node_modules/@storybook/node-logger": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.17.tgz", + "integrity": "sha512-w59MQuXhhUNrUVmVkXhMwIg2nvFWjdDczLTwYLorhfsE36CWeUOY5QCZWQy0Qf/h+jz8Uo7Evy64qn18v9C4wA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/postinstall": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.17.tgz", + "integrity": "sha512-WaWqB8o9vUc9aaVls+povQSVirf1Xd1LZcVhUKfAocAF3mzYUsnJsVqvnbjRj/F96UFVihOyDt9Zjl/9OvrCvQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/preset-react-webpack": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.6.17.tgz", + "integrity": "sha512-gn/LvIbll9loOkzwbFlxzOZGmJ6t1vF2/gfi+p/N/AifDYe8+LVM1QV4KRVKt6UEJwsQd79lKf7vPH92AQaKKQ==", + "dev": true, + "dependencies": { + "@babel/preset-flow": "^7.22.15", + "@babel/preset-react": "^7.22.15", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", + "@storybook/core-webpack": "7.6.17", + "@storybook/docs-tools": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@storybook/react": "7.6.17", + "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0", + "@types/node": "^18.0.0", + "@types/semver": "^7.3.4", + "babel-plugin-add-react-displayname": "^0.0.5", + "fs-extra": "^11.1.0", + "magic-string": "^0.30.5", + "react-docgen": "^7.0.0", + "react-refresh": "^0.14.0", + "semver": "^7.3.7", + "webpack": "5" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@babel/core": "^7.22.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": { + "version": "18.19.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.24.tgz", + "integrity": "sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@storybook/preset-react-webpack/node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/preset-scss": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@storybook/preset-scss/-/preset-scss-1.0.3.tgz", + "integrity": "sha512-o9Iz6wxPeNENrQa2mKlsDKynBfqU2uWaRP80HeWp4TkGgf7/x3DVF2O7yi9N0x/PI1qzzTTpxlQ90D62XmpiTw==", + "dev": true, + "peerDependencies": { + "css-loader": "*", + "sass-loader": "*", + "style-loader": "*" + } + }, + "node_modules/@storybook/preview": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.17.tgz", + "integrity": "sha512-LvkMYK/y6alGjwRVNDIKL1lFlbyZ0H0c8iAbcQkiMoaFiujMQyVswMDKlWcj42Upfr/B1igydiruomc+eUt0mw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/preview-api": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz", + "integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.17", + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/csf": "^0.1.2", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.6.17", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/react": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.6.17.tgz", + "integrity": "sha512-lVqzQSU03rRJWYW+gK2gq6mSo3/qtnVICY8B8oP7gc36jVu4ksDIu45bTfukM618ODkUZy0vZe6T4engK3azjA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.17", + "@storybook/core-client": "7.6.17", + "@storybook/docs-tools": "7.6.17", + "@storybook/global": "^5.0.0", + "@storybook/preview-api": "7.6.17", + "@storybook/react-dom-shim": "7.6.17", + "@storybook/types": "7.6.17", + "@types/escodegen": "^0.0.6", + "@types/estree": "^0.0.51", + "@types/node": "^18.0.0", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "escodegen": "^2.1.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.21", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^15.0.0", + "ts-dedent": "^2.0.0", + "type-fest": "~2.19", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin": { + "version": "1.0.6--canary.9.0c3f3b7.0", + "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz", + "integrity": "sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "endent": "^2.0.1", + "find-cache-dir": "^3.3.1", + "flat-cache": "^3.0.4", + "micromatch": "^4.0.2", + "react-docgen-typescript": "^2.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "typescript": ">= 4.x", + "webpack": ">= 4" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@storybook/react-dom-shim": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.17.tgz", + "integrity": "sha512-32Sa/G+WnvaPiQ1Wvjjw5UM9rr2c4GDohwCcWVv3/LJuiFPqNS6zglAtmnsrlIBnUwRBMLMh/ekCTdqMiUmfDw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", + "node_modules/@storybook/react-webpack5": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-7.6.17.tgz", + "integrity": "sha512-qGc2JxaSmvPXV7ndxA/8qPtPLK7lAwejL/QdrzLXhxEmVdZLMew640FBYgOV/zWnehV3BnivThln/8PsQyst/g==", "dev": true, - "license": "MIT", "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "@storybook/builder-webpack5": "7.6.17", + "@storybook/preset-react-webpack": "7.6.17", + "@storybook/react": "7.6.17", + "@types/node": "^18.0.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "@babel/core": "^7.22.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", + "node_modules/@storybook/react-webpack5/node_modules/@types/node": { + "version": "18.19.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.24.tgz", + "integrity": "sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==", "dev": true, - "license": "MIT" + "dependencies": { + "undici-types": "~5.26.4" + } }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.7.1", + "node_modules/@storybook/react/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@storybook/react/node_modules/@types/node": { + "version": "18.19.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.24.tgz", + "integrity": "sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==", "dev": true, - "license": "MIT" + "dependencies": { + "undici-types": "~5.26.4" + } }, - "node_modules/@sideway/address": { - "version": "4.1.4", + "node_modules/@storybook/react/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/react/node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/react/node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@hapi/hoek": "^9.0.0" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/@sideway/formula": { - "version": "3.0.1", + "node_modules/@storybook/react/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "BSD-3-Clause" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", + "node_modules/@storybook/react/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause" + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", + "node_modules/@storybook/react/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/router": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.17.tgz", + "integrity": "sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.17", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/telemetry": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.17.tgz", + "integrity": "sha512-WOcOAmmengYnGInH98Px44F47DSpLyk20BM+Z/IIQDzfttGOLlxNqBBG1XTEhNRn+AYuk4aZ2JEed2lCjVIxcA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.17", + "@storybook/core-common": "7.6.17", + "@storybook/csf-tools": "7.6.17", + "chalk": "^4.1.0", + "detect-package-manager": "^2.0.1", + "fetch-retry": "^5.0.2", + "fs-extra": "^11.1.0", + "read-pkg-up": "^7.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/telemetry/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/telemetry/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/telemetry/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/telemetry/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@storybook/telemetry/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/telemetry/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/telemetry/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/telemetry/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/telemetry/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/telemetry/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/telemetry/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/telemetry/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/telemetry/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/telemetry/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/testing-library": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.1.0.tgz", + "integrity": "sha512-g947f4LJZw3IluBhysMKLJXByAFiSxnGuooENqU+ZPt/GTrz1I9GDBlhmoTJahuFkVbwHvziAl/8riY2Re921g==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0", + "@storybook/instrumenter": "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0", + "@testing-library/dom": "^8.3.0", + "@testing-library/user-event": "^13.2.1", + "ts-dedent": "^2.2.0" + } + }, + "node_modules/@storybook/theming": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.17.tgz", + "integrity": "sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA==", + "dev": true, + "dependencies": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.6.17", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } }, - "node_modules/@sindresorhus/merge-streams": { - "version": "1.0.0", + "node_modules/@storybook/types": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz", + "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "@storybook/channels": "7.6.17", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@stomp/stompjs": { - "version": "6.1.2", - "license": "Apache-2.0" - }, "node_modules/@surma/rollup-plugin-off-main-thread": { "version": "2.2.3", "dev": true, @@ -4237,11 +8314,12 @@ } }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -4253,8 +8331,9 @@ }, "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" }, @@ -4268,8 +8347,9 @@ }, "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" }, @@ -4282,11 +8362,12 @@ } }, "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -4297,11 +8378,12 @@ } }, "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -4312,11 +8394,12 @@ } }, "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -4327,11 +8410,12 @@ } }, "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -4342,9 +8426,10 @@ } }, "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -4357,21 +8442,22 @@ } }, "node_modules/@svgr/babel-preset": { - "version": "6.5.1", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", "dev": true, - "license": "MIT", "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -4381,148 +8467,463 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/core": { - "version": "6.5.1", + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", + "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.1.3", + "deepmerge": "^4.3.1", + "svgo": "^3.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/webpack": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", + "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@babel/plugin-transform-react-constant-elements": "^7.21.3", + "@babel/preset-env": "^7.20.2", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.21.0", + "@svgr/core": "8.1.0", + "@svgr/plugin-jsx": "8.1.0", + "@svgr/plugin-svgo": "8.1.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@swc/core": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.8.tgz", + "integrity": "sha512-uY2RSJcFPgNOEg12RQZL197LZX+MunGiKxsbxmh22VfVxrOYGRvh4mPANFlrD1yb38CgmW1wI6YgIi8LkIwmWg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.2", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.4.8", + "@swc/core-darwin-x64": "1.4.8", + "@swc/core-linux-arm-gnueabihf": "1.4.8", + "@swc/core-linux-arm64-gnu": "1.4.8", + "@swc/core-linux-arm64-musl": "1.4.8", + "@swc/core-linux-x64-gnu": "1.4.8", + "@swc/core-linux-x64-musl": "1.4.8", + "@swc/core-win32-arm64-msvc": "1.4.8", + "@swc/core-win32-ia32-msvc": "1.4.8", + "@swc/core-win32-x64-msvc": "1.4.8" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.8.tgz", + "integrity": "sha512-hhQCffRTgzpTIbngSnC30vV6IJVTI9FFBF954WEsshsecVoCGFiMwazBbrkLG+RwXENTrMhgeREEFh6R3KRgKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.8.tgz", + "integrity": "sha512-P3ZBw8Jr8rKhY/J8d+6WqWriqngGTgHwtFeJ8MIakQJTbdYbFgXSZxcvDiERg3psbGeFXaUaPI0GO6BXv9k/OQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.8.tgz", + "integrity": "sha512-PP9JIJt19bUWhAGcQW6qMwTjZOcMyzkvZa0/LWSlDm0ORYVLmDXUoeQbGD3e0Zju9UiZxyulnpjEN0ZihJgPTA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.8.tgz", + "integrity": "sha512-HvEWnwKHkoVUr5iftWirTApFJ13hGzhAY2CMw4lz9lur2m+zhPviRRED0FCI6T95Knpv7+8eUOr98Z7ctrG6DQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.8.tgz", + "integrity": "sha512-kY8+qa7k/dEeBq9p0Hrta18QnJPpsiJvDQSLNaTIFpdM3aEM9zbkshWz8gaX5VVGUEALowCBUWqmzO4VaqM+2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.8.tgz", + "integrity": "sha512-0WWyIw432wpO/zeGblwq4f2YWam4pn8Z/Ig4KzHMgthR/KmiLU3f0Z7eo45eVmq5vcU7Os1zi/Zb65OOt09q/w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.8.tgz", + "integrity": "sha512-p4yxvVS05rBNCrBaSTa20KK88vOwtg8ifTW7ec/yoab0bD5EwzzB8KbDmLLxE6uziFa0sdjF0dfRDwSZPex37Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.8.tgz", + "integrity": "sha512-jKuXihxAaqUnbFfvPxtmxjdJfs87F1GdBf33il+VUmSyWCP4BE6vW+/ReDAe8sRNsKyrZ3UH1vI5q1n64csBUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.8.tgz", + "integrity": "sha512-O0wT4AGHrX8aBeH6c2ADMHgagAJc5Kf6W48U5moyYDAkkVnKvtSc4kGhjWhe1Yl0sI0cpYh2In2FxvYsb44eWw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.8.tgz", + "integrity": "sha512-C2AYc3A2o+ECciqsJWRgIpp83Vk5EaRzHe7ed/xOWzVd0MsWR+fweEsyOjlmzHfpUxJSi46Ak3/BIZJlhZbXbg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true + }, + "node_modules/@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "dev": true + }, + "node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@svgr/core/node_modules/cosmiconfig": { - "version": "7.1.0", + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "node_modules/@svgr/core/node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node": ">=8" } }, - "node_modules/@svgr/plugin-jsx": { - "version": "6.5.1", + "node_modules/@testing-library/dom/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@svgr/plugin-svgo": { - "version": "6.5.1", + "node_modules/@testing-library/dom/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "MIT", - "dependencies": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - }, "engines": { "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@svgr/plugin-svgo/node_modules/cosmiconfig": { - "version": "7.1.0", + "node_modules/@testing-library/dom/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/@svgr/webpack": { - "version": "6.5.1", + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" + "@babel/runtime": "^7.12.5" }, "engines": { - "node": ">=10" + "node": ">=10", + "npm": ">=6" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" } }, "node_modules/@trysound/sax": { @@ -4553,6 +8954,53 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, "node_modules/@types/body-parser": { "version": "1.19.5", "dev": true, @@ -4596,10 +9044,32 @@ "@types/node": "*" } }, + "node_modules/@types/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/detect-port": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.5.tgz", + "integrity": "sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==", + "dev": true + }, + "node_modules/@types/doctrine": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz", + "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==", + "dev": true + }, "node_modules/@types/draft-js": { - "version": "0.11.3", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@types/draft-js/-/draft-js-0.11.11.tgz", + "integrity": "sha512-cEtfSrxWUQjM/TzdADjzw9NAj+I66p39MMsjYvsz8Qi3pw4AU6uDpJanVV3AHdtUP2HfYVf9sonD8Jb8Nn17wA==", "dev": true, - "license": "MIT", "dependencies": { "@types/react": "*", "immutable": "~3.7.4" @@ -4613,6 +9083,24 @@ "node": ">=0.8.0" } }, + "node_modules/@types/ejs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", + "dev": true + }, + "node_modules/@types/emscripten": { + "version": "1.39.10", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.10.tgz", + "integrity": "sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==", + "dev": true + }, + "node_modules/@types/escodegen": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz", + "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", + "dev": true + }, "node_modules/@types/eslint": { "version": "8.56.2", "license": "MIT", @@ -4655,12 +9143,27 @@ "@types/send": "*" } }, + "node_modules/@types/find-cache-dir": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz", + "integrity": "sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==", + "dev": true + }, "node_modules/@types/flat": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@types/flat/-/flat-5.0.5.tgz", "integrity": "sha512-nPLljZQKSnac53KDUDzuzdRfGI0TDb5qPrb+SrQyN3MtdQrOnGsKniHN1iYZsJEBIVQve94Y6gNz22sgISZq+Q==", "dev": true }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/history": { "version": "4.7.11", "dev": true, @@ -4723,11 +9226,23 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mdx": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.11.tgz", + "integrity": "sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==", + "dev": true + }, "node_modules/@types/mime": { "version": "1.3.5", "dev": true, "license": "MIT" }, + "node_modules/@types/mime-types": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", + "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", + "dev": true + }, "node_modules/@types/minimatch": { "version": "3.0.5", "dev": true, @@ -4739,12 +9254,37 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "18.19.9", - "license": "MIT", + "version": "20.11.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz", + "integrity": "sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==", "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/@types/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@types/node-forge": { "version": "1.3.11", "dev": true, @@ -4762,6 +9302,18 @@ "version": "4.0.2", "license": "MIT" }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "node_modules/@types/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==", + "dev": true + }, "node_modules/@types/prop-types": { "version": "15.7.11", "license": "MIT" @@ -4894,15 +9446,95 @@ "@types/node": "*" } }, + "node_modules/@types/source-list-map": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz", + "integrity": "sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==", + "dev": true + }, + "node_modules/@types/tapable": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.12.tgz", + "integrity": "sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==", + "dev": true + }, "node_modules/@types/trusted-types": { "version": "2.0.7", "dev": true, "license": "MIT" }, + "node_modules/@types/uglify-js": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz", + "integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/@types/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true + }, "node_modules/@types/uuid": { - "version": "8.3.4", + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true + }, + "node_modules/@types/webpack": { + "version": "4.41.38", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.38.tgz", + "integrity": "sha512-oOW7E931XJU1mVfCnxCVgv8GLFL768pDO5u2Gzk82i8yTIgX6i7cntyZOkZYb/JtYM8252SN9bQp9tgkVDSsRw==", "dev": true, - "license": "MIT" + "dependencies": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/@types/ws": { "version": "8.5.10", @@ -5256,6 +9888,20 @@ "devOptional": true, "license": "ISC" }, + "node_modules/@vitest/utils": { + "version": "0.34.7", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.7.tgz", + "integrity": "sha512-ziAavQLpCYS9sLOorGrFFKmy2gnfiNU0ZJ15TsMz/K92NAPS/rp9K4z6AJQQk5Y8adCy4Iwpxy7pQumQ/psnRg==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", "license": "MIT", @@ -5368,17 +10014,70 @@ "version": "1.11.6", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/esbuild-plugin-pnp": { + "version": "3.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz", + "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "esbuild": ">=0.10.0" + } + }, + "node_modules/@yarnpkg/fslib": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz", + "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==", + "dev": true, + "dependencies": { + "@yarnpkg/libzip": "^2.3.0", + "tslib": "^1.13.0" + }, + "engines": { + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + } + }, + "node_modules/@yarnpkg/fslib/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@yarnpkg/libzip": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", + "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", + "dev": true, + "dependencies": { + "@types/emscripten": "^1.39.6", + "tslib": "^1.13.0" + }, + "engines": { + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "license": "Apache-2.0" + "node_modules/@yarnpkg/libzip/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@zeit/schemas": { "version": "2.29.0", @@ -5593,6 +10292,12 @@ "node": ">= 8" } }, + "node_modules/app-root-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", + "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", + "dev": true + }, "node_modules/arch": { "version": "2.2.0", "dev": true, @@ -5622,6 +10327,18 @@ "devOptional": true, "license": "Python-2.0" }, + "node_modules/aria-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", + "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/aria-query": { "version": "5.3.0", "dev": true, @@ -5737,6 +10454,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.reduce": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", + "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.tosorted": { "version": "1.1.2", "dev": true, @@ -5789,6 +10525,19 @@ "safer-buffer": "~2.1.0" } }, + "node_modules/assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, "node_modules/assert-plus": { "version": "1.0.0", "dev": true, @@ -5797,6 +10546,18 @@ "node": ">=0.8" } }, + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/ast-types-flow": { "version": "0.0.8", "dev": true, @@ -5815,6 +10576,12 @@ "dev": true, "license": "MIT" }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, "node_modules/asynciterator.prototype": { "version": "1.0.0", "dev": true, @@ -5953,6 +10720,15 @@ "dequal": "^2.0.3" } }, + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "dev": true, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/babel-loader": { "version": "9.1.3", "dev": true, @@ -5987,6 +10763,28 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/babel-plugin-add-react-displayname": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", + "integrity": "sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==", + "dev": true + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/babel-plugin-macros": { "version": "3.1.0", "license": "MIT", @@ -6152,6 +10950,18 @@ "tweetnacl": "^0.14.3" } }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "dev": true, + "dependencies": { + "open": "^8.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/bfj": { "version": "8.0.0", "license": "MIT", @@ -6170,6 +10980,15 @@ "version": "3.7.2", "license": "MIT" }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/big.js": { "version": "5.2.2", "license": "MIT", @@ -6403,6 +11222,18 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, "node_modules/brace-expansion": { "version": "2.0.1", "dev": true, @@ -6426,6 +11257,21 @@ "dev": true, "license": "MIT" }, + "node_modules/browser-assert": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", + "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", + "dev": true + }, + "node_modules/browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", + "dev": true, + "dependencies": { + "pako": "~0.2.0" + } + }, "node_modules/browserslist": { "version": "4.22.2", "funding": [ @@ -6456,6 +11302,15 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, "node_modules/buffer": { "version": "5.7.1", "dev": true, @@ -6529,13 +11384,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, - "license": "MIT", "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6764,14 +11625,9 @@ "license": "MIT" }, "node_modules/chokidar": { - "version": "3.5.3", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -6784,6 +11640,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -6798,6 +11657,15 @@ "node": ">= 6" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "license": "MIT", @@ -6819,6 +11687,21 @@ "node": ">=8" } }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dev": true, + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, "node_modules/classnames": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", @@ -6958,6 +11841,32 @@ "node": ">=0.8" } }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/clsx": { "version": "1.2.1", "license": "MIT", @@ -7077,6 +11986,12 @@ "node": ">=4.0.0" } }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, "node_modules/compare-func": { "version": "2.0.0", "dev": true, @@ -7267,6 +12182,21 @@ "node": ">=0.8" } }, + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, "node_modules/content-disposition": { "version": "0.5.2", "dev": true, @@ -9010,40 +13940,37 @@ } }, "node_modules/csso": { - "version": "4.2.0", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, - "license": "MIT", "dependencies": { - "css-tree": "^1.1.2" + "css-tree": "~2.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "dev": true, - "license": "MIT", "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=8.0.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/csso/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true }, "node_modules/csstype": { "version": "3.1.3", @@ -9381,6 +14308,44 @@ "dev": true, "license": "MIT" }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/deep-extend": { "version": "0.6.0", "dev": true, @@ -9400,6 +14365,22 @@ "node": ">=0.10.0" } }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/default-gateway": { "version": "6.0.3", "dev": true, @@ -9423,16 +14404,20 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-lazy-prop": { @@ -9452,10 +14437,38 @@ "object-keys": "^1.1.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dev": true, + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/delayed-stream": { @@ -9520,6 +14533,38 @@ "dev": true, "license": "MIT" }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "dev": true + }, + "node_modules/detect-package-manager": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", + "integrity": "sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==", + "dev": true, + "dependencies": { + "execa": "^5.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + } + }, "node_modules/detect-port-alt": { "version": "1.1.6", "license": "MIT", @@ -9554,6 +14599,15 @@ "node": ">=0.3.1" } }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/dijkstrajs": { "version": "1.0.3", "license": "MIT" @@ -9625,6 +14679,12 @@ "node": ">= 8" } }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, "node_modules/dom-converter": { "version": "0.2.0", "dev": true, @@ -10036,6 +15096,17 @@ "once": "^1.4.0" } }, + "node_modules/endent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", + "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", + "dev": true, + "dependencies": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.5" + } + }, "node_modules/enhanced-resolve": { "version": "5.15.0", "license": "MIT", @@ -10069,6 +15140,18 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/envinfo": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", + "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/error-ex": { "version": "1.3.2", "license": "MIT", @@ -10135,6 +15218,59 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/es-iterator-helpers": { "version": "1.0.15", "dev": true, @@ -10197,6 +15333,61 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/esbuild-plugin-alias": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz", + "integrity": "sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==", + "dev": true + }, + "node_modules/esbuild-register": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz", + "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.12 <1" + } + }, "node_modules/escalade": { "version": "3.1.1", "license": "MIT", @@ -11626,6 +16817,12 @@ "node": ">= 6" } }, + "node_modules/fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", + "dev": true + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "license": "MIT" @@ -11671,6 +16868,15 @@ "node": ">=0.8.0" } }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, "node_modules/fbjs": { "version": "2.0.0", "license": "MIT", @@ -11704,6 +16910,12 @@ "pend": "~1.2.0" } }, + "node_modules/fetch-retry": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz", + "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==", + "dev": true + }, "node_modules/figures": { "version": "3.2.0", "dev": true, @@ -11766,6 +16978,30 @@ "node": ">= 12" } }, + "node_modules/file-system-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", + "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", + "dev": true, + "dependencies": { + "fs-extra": "11.1.1", + "ramda": "0.29.0" + } + }, + "node_modules/file-system-cache/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/filelist": { "version": "1.0.4", "dev": true, @@ -11913,19 +17149,30 @@ "devOptional": true, "license": "ISC" }, + "node_modules/flow-parser": { + "version": "0.231.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.231.0.tgz", + "integrity": "sha512-WVzuqwq7ZnvBceCG0DGeTQebZE+iIU0mlk5PmJgYj9DDrt+0isGC2m1ezW9vxL4V+HERJJo9ExppOnwKH2op6Q==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/focus-trap": { - "version": "6.9.4", - "license": "MIT", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", + "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", "dependencies": { - "tabbable": "^5.3.3" + "tabbable": "^6.2.0" } }, "node_modules/focus-trap-react": { - "version": "9.0.2", - "license": "MIT", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/focus-trap-react/-/focus-trap-react-10.2.3.tgz", + "integrity": "sha512-YXBpFu/hIeSu6NnmV2xlXzOYxuWkoOtar9jzgp3lOmjWLWY59C/b8DtDHEAV4SPU07Nd/t+nS/SBNGkhUBFmEw==", "dependencies": { - "focus-trap": "^6.9.4", - "tabbable": "^5.3.3" + "focus-trap": "^7.5.4", + "tabbable": "^6.2.0" }, "peerDependencies": { "prop-types": "^15.8.1", @@ -12230,6 +17477,12 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "node_modules/fs-extra": { "version": "11.2.0", "license": "MIT", @@ -12242,6 +17495,36 @@ "node": ">=14.14" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/fs-monkey": { "version": "1.0.5", "license": "Unlicense" @@ -12250,6 +17533,19 @@ "version": "1.0.0", "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "license": "MIT", @@ -12322,25 +17618,66 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { - "version": "1.2.2", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, - "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-npm-tarball-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.1.0.tgz", + "integrity": "sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==", + "dev": true, + "engines": { + "node": ">=12.17" + } + }, "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", "dev": true, "license": "ISC" }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/get-pkg-repo": { "version": "4.2.1", "dev": true, @@ -12461,6 +17798,18 @@ "node": ">=10" } }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-stdin": { "version": "8.0.0", "dev": true, @@ -12514,6 +17863,25 @@ "assert-plus": "^1.0.0" } }, + "node_modules/giget": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.1.tgz", + "integrity": "sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g==", + "dev": true, + "dependencies": { + "citty": "^0.1.5", + "consola": "^3.2.3", + "defu": "^6.1.3", + "node-fetch-native": "^1.6.1", + "nypm": "^0.3.3", + "ohash": "^1.1.3", + "pathe": "^1.1.1", + "tar": "^6.2.0" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, "node_modules/git-raw-commits": { "version": "2.0.11", "dev": true, @@ -13092,6 +18460,12 @@ "dev": true, "license": "ISC" }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "dev": true + }, "node_modules/glob": { "version": "7.2.3", "license": "ISC", @@ -13238,26 +18612,89 @@ "dev": true, "license": "MIT" }, - "node_modules/gopd": { - "version": "1.0.1", + "node_modules/gopd": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "devOptional": true, + "license": "MIT" + }, + "node_modules/gunzip-maybe": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", + "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==", + "dev": true, + "dependencies": { + "browserify-zlib": "^0.1.4", + "is-deflate": "^1.0.0", + "is-gzip": "^1.0.0", + "peek-stream": "^1.1.0", + "pumpify": "^1.3.3", + "through2": "^2.0.3" + }, + "bin": { + "gunzip-maybe": "bin.js" + } + }, + "node_modules/gunzip-maybe/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/gunzip-maybe/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/gunzip-maybe/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/gunzip-maybe/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/gunzip-maybe/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "devOptional": true, - "license": "MIT" - }, "node_modules/gzip-size": { "version": "6.0.0", "license": "MIT", @@ -13351,11 +18788,12 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13421,7 +18859,8 @@ }, "node_modules/history": { "version": "4.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", "dependencies": { "@babel/runtime": "^7.1.2", "loose-envify": "^1.2.0", @@ -13714,6 +19153,293 @@ } } }, + "node_modules/html-webpack-plugin-4": { + "name": "html-webpack-plugin", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, + "node_modules/html-webpack-plugin-4/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/html-webpack-plugin-4/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/html-webpack-plugin-5": { + "name": "html-webpack-plugin", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, "node_modules/htmlparser2": { "version": "8.0.2", "funding": [ @@ -13898,6 +19624,16 @@ "node": ">=14" } }, + "node_modules/i18next-http-backend": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.5.0.tgz", + "integrity": "sha512-Z/aQsGZk1gSxt2/DztXk92DuDD20J+rNudT7ZCdTrNOiK8uQppfvdjq9+DFQfpAnFPn3VZS+KQIr1S/W1KxhpQ==", + "dev": true, + "peer": true, + "dependencies": { + "cross-fetch": "4.0.0" + } + }, "node_modules/i18next-localstorage-backend": { "version": "4.2.0", "license": "MIT", @@ -14184,12 +19920,52 @@ "react": ">=0.14.0" } }, - "node_modules/ipaddr.js": { - "version": "2.1.0", + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, - "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">= 10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-array-buffer": { @@ -14313,6 +20089,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-deflate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz", + "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==", + "dev": true + }, "node_modules/is-docker": { "version": "2.2.1", "license": "MIT", @@ -14380,6 +20162,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-gzip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", + "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "dev": true, @@ -14423,6 +20214,22 @@ "css-color-list": "0.0.1" } }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.2", "dev": true, @@ -14463,6 +20270,15 @@ "node": ">=8" } }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "devOptional": true, @@ -14699,11 +20515,54 @@ "version": "2.0.0", "license": "ISC" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/isstream": { "version": "0.1.2", "dev": true, "license": "MIT" }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/iterator.prototype": { "version": "1.1.2", "dev": true, @@ -14834,6 +20693,148 @@ "node": ">=8" } }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-mock/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-mock/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-mock/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-mock/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-mock/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-util": { "version": "29.7.0", "dev": true, @@ -15014,6 +21015,126 @@ "dev": true, "license": "MIT" }, + "node_modules/jscodeshift": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.2.tgz", + "integrity": "sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.23.0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.23.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/preset-flow": "^7.22.15", + "@babel/preset-typescript": "^7.23.0", + "@babel/register": "^7.22.15", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.23.3", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + }, + "peerDependenciesMeta": { + "@babel/preset-env": { + "optional": true + } + } + }, + "node_modules/jscodeshift/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jscodeshift/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jscodeshift/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jscodeshift/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jscodeshift/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jscodeshift/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jscodeshift/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "node_modules/jsesc": { "version": "2.5.2", "dev": true, @@ -15168,14 +21289,6 @@ "node": ">=6" } }, - "node_modules/klona": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/known-css-properties": { "version": "0.29.0", "dev": true, @@ -15214,6 +21327,20 @@ "node": "> 0.8" } }, + "node_modules/lazy-universal-dotenv": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz", + "integrity": "sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==", + "dev": true, + "dependencies": { + "app-root-dir": "^1.0.2", + "dotenv": "^16.0.0", + "dotenv-expand": "^10.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/ldjson-stream": { "version": "1.2.1", "dev": true, @@ -15811,7 +21938,19 @@ "json5": "^2.1.2" }, "engines": { - "node": ">=8.9.0" + "node": ">=8.9.0" + } + }, + "node_modules/local-pkg": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.1.tgz", + "integrity": "sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, "node_modules/locate-path": { @@ -16179,6 +22318,15 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, "node_modules/lower-case": { "version": "2.0.2", "dev": true, @@ -16195,6 +22343,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/magic-string": { "version": "0.25.9", "dev": true, @@ -16203,6 +22360,37 @@ "sourcemap-codec": "^1.4.8" } }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/make-error": { "version": "1.3.6", "dev": true, @@ -16213,6 +22401,15 @@ "dev": true, "license": "Unicode-DFS-2016" }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, "node_modules/map-obj": { "version": "5.0.0", "dev": true, @@ -16224,11 +22421,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/map-or-similar": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", + "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", + "dev": true + }, "node_modules/markdown-draft-js": { - "version": "2.2.1", - "license": "MIT", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/markdown-draft-js/-/markdown-draft-js-2.4.0.tgz", + "integrity": "sha512-MalOqajYYaELKLPHLnUcaU7kwhIHveVdKd15SKBkDkWj1NBLHuM5uZjXQ5TDfM4rrk4tcAzIvwWhCJzdGNcmkg==", "dependencies": { "remarkable": "^2.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/markdown-to-jsx": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.3.tgz", + "integrity": "sha512-qwu2XftKs/SP+f6oCe0ruAFKX6jZaKxrBfDBV4CthqbVbRQwHhNM28QGDQuTldCaOn+hocaqbmGvCuXO5m3smA==", + "dev": true, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "react": ">= 0.14.0" } }, "node_modules/matchmediaquery": { @@ -16247,6 +22466,29 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dev": true, + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdn-data": { "version": "2.0.30", "dev": true, @@ -16274,6 +22516,15 @@ "version": "5.2.1", "license": "MIT" }, + "node_modules/memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "dev": true, + "dependencies": { + "map-or-similar": "^1.5.0" + } + }, "node_modules/memorystream": { "version": "0.3.1", "dev": true, @@ -16376,18 +22627,6 @@ "node": ">=4" } }, - "node_modules/mini-create-react-context": { - "version": "0.4.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/mini-css-extract-plugin": { "version": "2.7.7", "license": "MIT", @@ -16486,6 +22725,55 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, "node_modules/mock-socket": { "version": "9.3.1", "dev": true, @@ -16618,6 +22906,46 @@ "tslib": "^2.0.3" } }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "dev": true + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-dir/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/node-dir/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/node-fetch": { "version": "2.7.0", "license": "MIT", @@ -16636,6 +22964,12 @@ } } }, + "node_modules/node-fetch-native": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.2.tgz", + "integrity": "sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w==", + "dev": true + }, "node_modules/node-forge": { "version": "1.3.1", "dev": true, @@ -16644,6 +22978,12 @@ "node": ">= 6.13.0" } }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, "node_modules/node-releases": { "version": "2.0.14", "license": "MIT" @@ -16826,56 +23166,209 @@ "semver": "bin/semver" } }, - "node_modules/npm-run-all/node_modules/shebang-command": { - "version": "1.2.0", + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nypm": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.8.tgz", + "integrity": "sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==", + "dev": true, + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.2.3", + "execa": "^8.0.1", + "pathe": "^1.1.2", + "ufo": "^1.4.0" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, + "node_modules/nypm/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/nypm/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nypm/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/nypm/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nypm/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nypm/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, - "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-all/node_modules/shebang-regex": { - "version": "1.0.0", + "node_modules/nypm/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-all/node_modules/which": { - "version": "1.3.1", + "node_modules/nypm/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" + "engines": { + "node": ">=12" }, - "bin": { - "which": "bin/which" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", + "node_modules/nypm/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/nth-check": { - "version": "2.1.1", + "node_modules/nypm/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/object-assign": { @@ -16893,6 +23386,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-keys": { "version": "1.1.1", "dev": true, @@ -16947,6 +23456,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", + "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", + "dev": true, + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "safe-array-concat": "^1.0.0" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object.groupby": { "version": "1.0.1", "dev": true, @@ -16986,11 +23514,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/objectorarray": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", + "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", + "dev": true + }, "node_modules/obuf": { "version": "1.1.2", "dev": true, "license": "MIT" }, + "node_modules/ohash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz", + "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==", + "dev": true + }, "node_modules/on-finished": { "version": "2.4.1", "dev": true, @@ -17220,6 +23760,12 @@ "node": ">=6" } }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + }, "node_modules/param-case": { "version": "3.0.4", "dev": true, @@ -17284,6 +23830,12 @@ "tslib": "^2.0.3" } }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, "node_modules/path-exists": { "version": "4.0.0", "license": "MIT", @@ -17339,7 +23891,8 @@ }, "node_modules/path-to-regexp": { "version": "1.8.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dependencies": { "isarray": "0.0.1" } @@ -17351,6 +23904,81 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/peek-stream": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", + "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "duplexify": "^3.5.0", + "through2": "^2.0.3" + } + }, + "node_modules/peek-stream/node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/peek-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/peek-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/peek-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/peek-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/peek-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, "node_modules/pend": { "version": "1.2.0", "dev": true, @@ -17393,6 +24021,15 @@ "node": ">=0.10.0" } }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-dir": { "version": "7.0.0", "dev": true, @@ -17551,6 +24188,18 @@ "node": ">=10.13.0" } }, + "node_modules/polished": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", + "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.17.8" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/postcss": { "version": "8.4.33", "funding": [ @@ -17976,16 +24625,17 @@ } }, "node_modules/postcss-loader": { - "version": "6.2.1", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", + "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", "dev": true, - "license": "MIT", "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" + "cosmiconfig": "^8.3.5", + "jiti": "^1.20.0", + "semver": "^7.5.4" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 14.15.0" }, "funding": { "type": "opencollective", @@ -17996,29 +24646,6 @@ "webpack": "^5.0.0" } }, - "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, "node_modules/postcss-logical": { "version": "5.0.4", "dev": true, @@ -18632,93 +25259,16 @@ "node_modules/postcss-svgo": { "version": "6.0.2", "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" - }, - "engines": { - "node": "^14 || ^16 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-svgo/node_modules/commander": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/postcss-svgo/node_modules/css-select": { - "version": "5.1.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/postcss-svgo/node_modules/csso": { - "version": "5.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/postcss-svgo/node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/postcss-svgo/node_modules/mdn-data": { - "version": "2.0.28", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/postcss-svgo/node_modules/svgo": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.2.0" }, "engines": { - "node": ">=14.0.0" + "node": "^14 || ^16 || >= 18" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" + "peerDependencies": { + "postcss": "^8.4.31" } }, "node_modules/postcss-unique-selectors": { @@ -18934,6 +25484,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/process": { "version": "0.11.10", "dev": true, @@ -18947,6 +25506,15 @@ "dev": true, "license": "MIT" }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/promise": { "version": "7.3.1", "license": "MIT", @@ -19022,11 +25590,249 @@ "once": "^1.3.1" } }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/pumpify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/pumpify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/pumpify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/punycode": { "version": "1.4.1", "dev": true, "license": "MIT" }, + "node_modules/puppeteer-core": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-2.1.1.tgz", + "integrity": "sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==", + "dev": true, + "dependencies": { + "@types/mime-types": "^2.1.0", + "debug": "^4.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^4.0.0", + "mime": "^2.0.3", + "mime-types": "^2.1.25", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^6.1.0" + }, + "engines": { + "node": ">=8.16.0" + } + }, + "node_modules/puppeteer-core/node_modules/agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/puppeteer-core/node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/puppeteer-core/node_modules/extract-zip/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dev": true, + "dependencies": { + "agent-base": "5", + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/puppeteer-core/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/puppeteer-core/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/puppeteer-core/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/puppeteer-core/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/puppeteer-core/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/puppeteer-core/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, "node_modules/q": { "version": "1.5.1", "dev": true, @@ -19240,6 +26046,16 @@ "performance-now": "^2.1.0" } }, + "node_modules/ramda": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", + "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, "node_modules/randombytes": { "version": "2.1.0", "license": "MIT", @@ -19341,6 +26157,16 @@ "version": "0.13.11", "license": "MIT" }, + "node_modules/react-colorful": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", + "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", + "dev": true, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/react-csv": { "version": "2.2.2", "license": "MIT" @@ -19504,6 +26330,63 @@ "node": "*" } }, + "node_modules/react-docgen": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-7.0.3.tgz", + "integrity": "sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.18.9", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9", + "@types/babel__core": "^7.18.0", + "@types/babel__traverse": "^7.18.0", + "@types/doctrine": "^0.0.9", + "@types/resolve": "^1.20.2", + "doctrine": "^3.0.0", + "resolve": "^1.22.1", + "strip-indent": "^4.0.0" + }, + "engines": { + "node": ">=16.14.0" + } + }, + "node_modules/react-docgen-typescript": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", + "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", + "dev": true, + "peerDependencies": { + "typescript": ">= 4.3.x" + } + }, + "node_modules/react-docgen/node_modules/@types/doctrine": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.9.tgz", + "integrity": "sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==", + "dev": true + }, + "node_modules/react-docgen/node_modules/@types/resolve": { + "version": "1.20.6", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.6.tgz", + "integrity": "sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==", + "dev": true + }, + "node_modules/react-docgen/node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/react-dom": { "version": "17.0.2", "license": "MIT", @@ -19531,6 +26414,27 @@ "react": ">= 16.8 || 18.0.0" } }, + "node_modules/react-element-to-jsx-string": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", + "integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==", + "dev": true, + "dependencies": { + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "18.1.0" + }, + "peerDependencies": { + "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0", + "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0" + } + }, + "node_modules/react-element-to-jsx-string/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/react-error-overlay": { "version": "6.0.11", "license": "MIT" @@ -19539,6 +26443,20 @@ "version": "3.2.2", "license": "MIT" }, + "node_modules/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "dependencies": { + "object-assign": "^4.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.1.1", + "react-side-effect": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.3.0" + } + }, "node_modules/react-i18next": { "version": "14.0.5", "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.0.5.tgz", @@ -19606,16 +26524,63 @@ "react-dom": "^16.8.0 || ^17 || ^18" } }, - "node_modules/react-property": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", - "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==" - }, - "node_modules/react-refresh": { - "version": "0.14.0", - "license": "MIT", + "node_modules/react-property": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", + "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==" + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dev": true, + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "dev": true, + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/react-responsive": { @@ -19635,14 +26600,14 @@ } }, "node_modules/react-router": { - "version": "5.2.0", - "license": "MIT", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "dependencies": { - "@babel/runtime": "^7.1.2", + "@babel/runtime": "^7.12.13", "history": "^4.9.0", "hoist-non-react-statics": "^3.1.0", "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", "path-to-regexp": "^1.7.0", "prop-types": "^15.6.2", "react-is": "^16.6.0", @@ -19654,14 +26619,15 @@ } }, "node_modules/react-router-dom": { - "version": "5.2.0", - "license": "MIT", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", "dependencies": { - "@babel/runtime": "^7.1.2", + "@babel/runtime": "^7.12.13", "history": "^4.9.0", "loose-envify": "^1.3.1", "prop-types": "^15.6.2", - "react-router": "5.2.0", + "react-router": "5.3.4", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" }, @@ -19671,7 +26637,8 @@ }, "node_modules/react-router/node_modules/react-is": { "version": "16.13.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-select": { "version": "4.3.1", @@ -19690,9 +26657,41 @@ "react-dom": "^16.8.0 || ^17.0.0" } }, + "node_modules/react-side-effect": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", + "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", + "peerDependencies": { + "react": "^16.3.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dev": true, + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-switch": { - "version": "6.1.0", - "license": "MIT", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/react-switch/-/react-switch-7.0.0.tgz", + "integrity": "sha512-KkDeW+cozZXI6knDPyUt3KBN1rmhoVYgAdCJqAh7st7tk8YE6N0iR89zjCWO8T8dUTeJGTR0KU+5CHCRMRffiA==", "dependencies": { "prop-types": "^15.7.2" }, @@ -19854,6 +26853,44 @@ "node": ">=8.10.0" } }, + "node_modules/recast": { + "version": "0.23.6", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz", + "integrity": "sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==", + "dev": true, + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/recast/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/recursive-readdir": { "version": "2.2.3", "license": "MIT", @@ -20030,6 +27067,38 @@ "esm": "^3.0.84" } }, + "node_modules/remark-external-links": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", + "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "is-absolute-url": "^3.0.0", + "mdast-util-definitions": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", + "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", + "dev": true, + "dependencies": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remarkable": { "version": "2.0.1", "license": "MIT", @@ -20272,7 +27341,8 @@ }, "node_modules/resolve-pathname": { "version": "3.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, "node_modules/resolve-url-loader": { "version": "5.0.0", @@ -20940,15 +28010,17 @@ "license": "ISC" }, "node_modules/set-function-length": { - "version": "1.2.0", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, - "license": "MIT", "dependencies": { - "define-data-property": "^1.1.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -20976,6 +28048,18 @@ "dev": true, "license": "ISC" }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shallow-equal": { "version": "1.2.1", "license": "MIT" @@ -21005,13 +28089,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -21087,6 +28176,16 @@ "dev": true, "license": "MIT" }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/sockjs": { "version": "0.3.24", "dev": true, @@ -21121,6 +28220,15 @@ "ms": "^2.1.1" } }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/source-list-map": { "version": "2.0.1", "dev": true, @@ -21188,6 +28296,16 @@ "dev": true, "license": "MIT" }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/spawn-command": { "version": "0.0.2", "dev": true @@ -21248,6 +28366,91 @@ "wbuf": "^1.7.3" } }, + "node_modules/speed-measure-webpack-plugin": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.4.2.tgz", + "integrity": "sha512-AtVzD0bnIy2/B0fWqJpJgmhcrfWFhBlduzSo0uwplr/QvB33ZNZj2NEth3NONgdnZJqicK0W0mSxnLSbsVCDbw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "webpack": "^1 || ^2 || ^3 || ^4 || ^5" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/speed-measure-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/split": { "version": "1.0.1", "dev": true, @@ -21295,11 +28498,6 @@ "node": ">=0.10.0" } }, - "node_modules/stable": { - "version": "0.1.8", - "dev": true, - "license": "MIT" - }, "node_modules/stack-generator": { "version": "2.0.10", "license": "MIT", @@ -21425,6 +28623,62 @@ "node": ">= 0.8" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/store2": { + "version": "2.14.3", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.3.tgz", + "integrity": "sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==", + "dev": true + }, + "node_modules/storybook": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.6.17.tgz", + "integrity": "sha512-8+EIo91bwmeFWPg1eysrxXlhIYv3OsXrznTr4+4Eq0NikqAoq6oBhtlN5K2RGS2lBVF537eN+9jTCNbR+WrzDA==", + "dev": true, + "dependencies": { + "@storybook/cli": "7.6.17" + }, + "bin": { + "sb": "index.js", + "storybook": "index.js" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/storybook-i18n": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/storybook-i18n/-/storybook-i18n-2.1.2.tgz", + "integrity": "sha512-jPIxaluHrIS0IChEyhM8G+maTdsIaKukJXzVZ4TneacCETpLq2Lnx9Ni7z2LZhrBvZLQUWXgtMSMGSCwDWYNSQ==", + "dev": true + }, + "node_modules/storybook-react-i18next": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/storybook-react-i18next/-/storybook-react-i18next-2.1.2.tgz", + "integrity": "sha512-M1/sEm+AlZXeSe+9kVW1blM1cCKjgHqxvplrd0n+ehIPEYqJ8NTF/9KW3xWjgQIrteYKkVcabzYxwKxg6MzSMg==", + "dev": true, + "dependencies": { + "storybook-i18n": "^2.1.1" + }, + "peerDependencies": { + "i18next": "^22.0.0 || ^23.0.0 || ^24.0.0", + "i18next-browser-languagedetector": "^7.0.0", + "i18next-http-backend": "^2.0.0", + "react-i18next": "^12.0.0 || ^13.0.0 || ^14.0.0" + } + }, "node_modules/stream-shift": { "version": "1.0.3", "dev": true, @@ -22171,69 +29425,87 @@ }, "node_modules/svg-parser": { "version": "2.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true }, "node_modules/svg-tags": { "version": "1.0.0", "dev": true }, "node_modules/svgo": { - "version": "2.8.0", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", + "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", "dev": true, - "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" }, "bin": { "svgo": "bin/svgo" }, "engines": { - "node": ">=10.13.0" + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" } }, "node_modules/svgo/node_modules/commander": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } }, - "node_modules/svgo/node_modules/css-tree": { - "version": "1.1.3", + "node_modules/svgo/node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/swc-loader": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.6.tgz", + "integrity": "sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==", "dev": true, - "license": "MIT", "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "@swc/counter": "^0.1.3" }, - "engines": { - "node": ">=8.0.0" + "peerDependencies": { + "@swc/core": "^1.2.147", + "webpack": ">=2" } }, - "node_modules/svgo/node_modules/mdn-data": { - "version": "2.0.14", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/svgo/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } + "node_modules/synchronous-promise": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz", + "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==", + "dev": true }, "node_modules/tabbable": { - "version": "5.3.3", - "license": "MIT" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" }, "node_modules/table": { "version": "6.8.1", @@ -22303,6 +29575,93 @@ "node": ">=6" } }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/telejson": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", + "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", + "dev": true, + "dependencies": { + "memoizerific": "^1.11.3" + } + }, + "node_modules/temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "dev": true, + "dependencies": { + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/temp-dir": { "version": "2.0.0", "dev": true, @@ -22311,6 +29670,18 @@ "node": ">=8" } }, + "node_modules/temp/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/tempy": { "version": "0.6.0", "dev": true, @@ -22423,6 +29794,42 @@ "version": "2.20.3", "license": "MIT" }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/text-extensions": { "version": "2.4.0", "dev": true, @@ -22465,12 +29872,14 @@ "license": "MIT" }, "node_modules/tiny-invariant": { - "version": "1.3.1", - "license": "MIT" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" }, "node_modules/tiny-warning": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, "node_modules/tlds": { "version": "1.249.0", @@ -22490,6 +29899,12 @@ "node": ">=8.17.0" } }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, "node_modules/to-camel-case": { "version": "1.0.0", "license": "MIT", @@ -22529,6 +29944,12 @@ "version": "1.3.3", "license": "MIT" }, + "node_modules/tocbot": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.25.0.tgz", + "integrity": "sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA==", + "dev": true + }, "node_modules/toidentifier": { "version": "1.0.1", "dev": true, @@ -22613,6 +30034,15 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true, + "engines": { + "node": ">=6.10" + } + }, "node_modules/ts-loader": { "version": "9.5.1", "dev": true, @@ -22956,6 +30386,12 @@ "version": "1.0.6", "license": "MIT" }, + "node_modules/ufo": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.0.tgz", + "integrity": "sha512-c7SxU8XB0LTO7hALl6CcE1Q92ZrLzr1iE0IVIsUa9SlFfkn2B2p6YLO6dLxOj7qCWY98PB3Q3EZbN6bEu8p7jA==", + "dev": true + }, "node_modules/uglify-js": { "version": "3.17.4", "dev": true, @@ -23053,6 +30489,45 @@ "node": ">=8" } }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/universalify": { "version": "2.0.1", "license": "MIT", @@ -23068,6 +30543,27 @@ "node": ">= 0.8" } }, + "node_modules/unplugin": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.0.tgz", + "integrity": "sha512-CuZtvvO8ua2Wl+9q2jEaqH6m3DoQ38N7pvBYQbbaeNlWGvK2l6GHiKi29aIHDPoSxdUzQ7Unevf1/ugil5X6Pg==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "chokidar": "^3.6.0", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.6.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/unplugin/node_modules/webpack-virtual-modules": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz", + "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==", + "dev": true + }, "node_modules/untildify": { "version": "4.0.0", "dev": true, @@ -23136,6 +30632,16 @@ "node": ">=6" } }, + "node_modules/url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, "node_modules/url-loader": { "version": "4.1.1", "license": "MIT", @@ -23169,6 +30675,42 @@ "requires-port": "^1.0.0" } }, + "node_modules/url/node_modules/qs": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz", + "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.1.tgz", + "integrity": "sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/use-constant": { "version": "1.1.1", "license": "MIT", @@ -23177,8 +30719,9 @@ } }, "node_modules/use-debounce": { - "version": "7.0.1", - "license": "MIT", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-9.0.4.tgz", + "integrity": "sha512-6X8H/mikbrt0XE8e+JXRtZ8yYVvKkdYRfmIhWZYsP8rcNs9hk3APV8Ua2mFkKRLcJKVdnX2/Vwrmg2GWKUQEaQ==", "engines": { "node": ">= 10.0.0" }, @@ -23186,11 +30729,69 @@ "react": ">=16.8.0" } }, + "node_modules/use-resize-observer": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", + "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", + "dev": true, + "dependencies": { + "@juggle/resize-observer": "^3.3.1" + }, + "peerDependencies": { + "react": "16.8.0 - 18", + "react-dom": "16.8.0 - 18" + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dev": true, + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "dev": true, "license": "MIT" }, + "node_modules/util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, "node_modules/utila": { "version": "0.4.0", "dev": true, @@ -23205,8 +30806,13 @@ } }, "node_modules/uuid": { - "version": "8.3.2", - "license": "MIT", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } @@ -23227,7 +30833,8 @@ }, "node_modules/value-equal": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, "node_modules/vary": { "version": "1.1.2", @@ -23324,6 +30931,15 @@ "node": ">=12.0.0" } }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/warning": { "version": "4.0.3", "license": "MIT", @@ -23366,8 +30982,9 @@ } }, "node_modules/web-vitals": { - "version": "2.1.4", - "license": "Apache-2.0" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.2.tgz", + "integrity": "sha512-c0rhqNcHXRkY/ogGDJQxZ9Im9D19hDihbzSQJrsioex+KnFgmMzBiy57Z1EjkhX/+OjyBpclDCzz2ITtjokFmg==" }, "node_modules/webidl-conversions": { "version": "3.0.1", @@ -23542,6 +31159,31 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/webpack-hot-middleware": { + "version": "2.26.1", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz", + "integrity": "sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==", + "dev": true, + "dependencies": { + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/webpack-sources": { "version": "3.2.3", "license": "MIT", @@ -23549,6 +31191,12 @@ "node": ">=10.13.0" } }, + "node_modules/webpack-virtual-modules": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", + "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==", + "dev": true + }, "node_modules/websocket-driver": { "version": "0.7.4", "license": "Apache-2.0", @@ -23729,6 +31377,12 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, "node_modules/word-wrap": { "version": "1.2.5", "license": "MIT", diff --git a/package.json b/package.json index ab7b6d9ed..81592df3d 100644 --- a/package.json +++ b/package.json @@ -15,24 +15,25 @@ "@calcom/embed-snippet": "^1.0.1", "@draft-js-plugins/buttons": "^4.3.2", "@draft-js-plugins/editor": "^4.1.3", - "@draft-js-plugins/emoji": "^4.6.3", + "@draft-js-plugins/emoji": "^4.6.5", "@draft-js-plugins/linkify": "^4.2.1", "@draft-js-plugins/static-toolbar": "^4.1.3", - "@emotion/react": "^11.10.6", - "@emotion/styled": "^11.10.6", - "@jitsi/react-sdk": "^1.0.2", + "@emotion/react": "^11.11.0", + "@emotion/styled": "^11.11.0", + "@jitsi/react-sdk": "^1.3.0", "@juggle/resize-observer": "^3.4.0", - "@mui/material": "^5.12.1", + "@mui/icons-material": "^5.11.16", + "@mui/material": "^5.13.7", "@onlineberatung/onlineberatung-frontend-extensions": "file:src/extensions", - "@stomp/stompjs": "^6.1.2", + "@stomp/stompjs": "^7.0.0", "bfj": "^8.0.0", "browserslist": "^4.22.2", "bytebuffer": "^5.0.1", "classnames": "^2.5.1", - "clsx": "^1.1.1", + "clsx": "^1.2.1", "core-js": "^3.35.1", "crypto-js": "^4.2.0", - "dayjs": "^1.10.7", + "dayjs": "^1.11.8", "draft-js": "0.11.7", "draft-js-export-html": "1.4.1", "element-closest": "^3.0.2", @@ -40,7 +41,7 @@ "element-scroll-polyfill": "^1.0.1", "fastestsmallesttextencoderdecoder": "^1.0.22", "flat": "^5.0.2", - "focus-trap-react": "^9.0.2", + "focus-trap-react": "^10.1.4", "fs-extra": "^11.2.0", "get-contrast": "^3.0.0", "hi-base32": "0.5.1", @@ -58,10 +59,10 @@ "jotai": "^2.7.0", "js-autocomplete": "^1.0.4", "lodash": "^4.17.21", - "markdown-draft-js": "2.2.1", + "markdown-draft-js": "^2.4.0", "mini-css-extract-plugin": "^2.7.7", "prompts": "^2.4.2", - "qrcode": "^1.5.0", + "qrcode": "^1.5.3", "react": "^17.0.2", "react-app-polyfill": "^3.0.0", "react-csv": "^2.2.2", @@ -69,13 +70,14 @@ "react-dev-utils": "^12.0.1", "react-device-detect": "^2.2.3", "react-dom": "^17.0.2", - "react-dropzone": "^14.2.1", + "react-dropzone": "^14.2.3", + "react-helmet": "^6.1.0", "react-i18next": "^14.0.5", "react-refresh": "^0.14.0", "react-responsive": "^9.0.2", - "react-router-dom": "5.2.0", + "react-router-dom": "^5.3.4", "react-select": "4.3.1", - "react-switch": "^6.0.0", + "react-switch": "^7.0.0", "react-use-measure": "^2.1.1", "resolve": "^1.22.8", "resolve-url-loader": "^5.0.0", @@ -85,10 +87,10 @@ "source-map-loader": "^5.0.0", "stacktrace-js": "^2.0.2", "url-loader": "4.1.1", - "use-constant": "^1.1.0", - "use-debounce": "^7.0.0", - "uuid": "^8.3.2", - "web-vitals": "^2.1.3", + "use-constant": "^1.1.1", + "use-debounce": "^9.0.4", + "uuid": "^9.0.0", + "web-vitals": "^3.3.2", "whatwg-fetch": "^3.6.20" }, "devDependencies": { @@ -97,18 +99,29 @@ "@commitlint/cli": "^18.5.0", "@commitlint/config-conventional": "^18.5.0", "@cypress/webpack-preprocessor": "^6.0.1", + "@cypress/react": "^7.0.3", + "@cypress/webpack-dev-server": "^3.5.1", "@dtsgenerator/replace-namespace": "^1.6.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", - "@svgr/webpack": "^6.2.0", - "@types/bytebuffer": "^5.0.43", - "@types/draft-js": "0.11.3", + "@storybook/addon-essentials": "^7.0.18", + "@storybook/addon-interactions": "^7.0.18", + "@storybook/addon-links": "^7.0.18", + "@storybook/blocks": "^7.0.18", + "@storybook/preset-scss": "^1.0.3", + "@storybook/react": "^7.0.26", + "@storybook/react-webpack5": "^7.0.18", + "@storybook/testing-library": "^0.1.0", + "@svgr/webpack": "^8.0.1", + "@types/bytebuffer": "^5.0.44", + "@types/draft-js": "0.11.11", "@types/flat": "^5.0.5", - "@types/node": "^18.16.1", - "@types/react": "^17.0.11", - "@types/react-dom": "^17.0.8", + "@types/node": "^20.2.5", + "@types/prettier": "^2.7.3", + "@types/react": "^17.0.60", + "@types/react-dom": "^17.0.20", "@types/react-router-dom": "^5.3.3", - "@types/sanitize-html": "^2.6.2", - "@types/uuid": "^8.3.2", + "@types/sanitize-html": "^2.9.0", + "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "^6.19.1", "@typescript-eslint/parser": "^6.19.1", "babel-loader": "^9.1.3", @@ -147,7 +160,7 @@ "npm-run-all": "^4.1.5", "postcss": "^8.4.33", "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", + "postcss-loader": "^7.3.2", "postcss-normalize": "^10.0.1", "postcss-preset-env": "^7.2.3", "postcss-safe-parser": "^6.0.0", @@ -157,6 +170,8 @@ "sass-loader": "^14.0.0", "serve": "^14.2.1", "standard-version": "^9.5.0", + "storybook": "^7.0.18", + "storybook-react-i18next": "^2.0.6", "style-loader": "^3.3.4", "stylelint": "^15.11.0", "stylelint-config-standard": "^34.0.0", @@ -178,6 +193,7 @@ "dev:server": "nodemon", "build": "node scripts/build.js", "test": "cross-env FAST_REFRESH=false BROWSER=none REACT_APP_API_URL=http://127.0.0.1:9001 HTTPS=0 PORT=9001 WDS_SOCKET_PORT=9001 concurrently --kill-others --success first \"npm run dev\" \"wait-on http://127.0.0.1:9001 && cypress run\"", + "test:components": "NODE_ENV=development cypress run --component --headed", "test:build": "cross-env FAST_REFRESH=false BROWSER=none PORT=9001 CYPRESS_WS_URL=http://127.0.0.1:9002 REACT_APP_API_URL=http://127.0.0.1:9001 concurrently --kill-others --success first \"npm run start\" \"wait-on http://127.0.0.1:9001 && cypress run\"", "release": "standard-version", "lint": "npm run lint:scripts && npm run lint:style", @@ -191,7 +207,9 @@ "cypress:wait-and-open:open": "cross-env NODE_ENV=production PORT=9001 CYPRESS_WS_URL=http://127.0.0.1:9002 REACT_APP_API_URL=http://127.0.0.1:9001 cypress open", "dtsgen": "ts-node dtsgen.ts", "prepare": "husky install", - "browserstack": "browserstack-cypress run --sync --env BROWSER=none,REACT_APP_API_URL=http://127.0.0.1:9001,HTTPS=0,PORT=9001,WDS_SOCKET_PORT=9001" + "browserstack": "browserstack-cypress run --sync --env BROWSER=none,REACT_APP_API_URL=http://127.0.0.1:9001,HTTPS=0,PORT=9001,WDS_SOCKET_PORT=9001", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" }, "eslintConfig": { "extends": [ diff --git a/public/favicon.ico b/public/favicon.ico index 416b50eedaa933aab024d2378ba40ab66e17236d..31709449cc17ea6bb6c15566c6e16ae2bd9ea359 100644 GIT binary patch literal 22382 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 literal 1150 zcmbu8!7D^j6vnSuYgX2lHWnnYn8hTe6j8IFC`DK(DN<_6LRp9?B`aA-k}Nby(kKhI zZ1^u`JvHZezjwO5=bG0jZ#r}DJNJCwIp@3QIoA^Xayb|MceYUUY6o;&pjJbY#fh*>kqKV(W0Bt|7jVuWNC_FvM@Ji%u0qcXx~f z?8cgL^mhNo<0Cg1a=`^=yCgb0Z9dM3$-?6gjaoxrGdx=K_lSPHi@v>DKHk$jVgH;B z^obtsi++8IPL7GzYNFMu^#WIEOJd%v{9wsfz7u_XNbr>>(d#SYg`*js{KrQL{`|~% z;bz|mKRznTy**bfh8leR_hr$`3o~Mf4f}_e_`eu^hIsCo+|-CxnCJ5Mz)B3W72@fM zxuN&lo1gljCB_*u-Kc+jK8`%6CrSTk@9za&vhduw&y&{wV9)BNc4jLJj~@;+W|qAE e%pM%+Sq}T>`vadgc+e#6V~++NUukvjKlTlax=|hg diff --git a/public/logo192.png b/public/logo192.png index 23a9a1fea340db4e1ca5cc34a556037c3e1742b5..9b0d39576e91bbac24725e17bd388aed86c3a5db 100644 GIT binary patch literal 2129 zcmc(gc{J3G8pnS#8H};3!wb-v&VJK3w%VxC2x&7vU=UbyCDZ=sTKFI+Vk6^g8J$5nz2U^Y!LAx(;r zsBS3%L$2m0N~+RVD~@r;$cJp1#VMjV08OrQ_aV7RWLEk*61HyOecl4BqA@V7ktA2>`c{#IR zJQ6D*TT=PA;KYdFMAiHH>r+eBtGxHi9}Vc3NKIYj>2`~e)ynD5Z`U@834zb4XvU1; zV{nwZ=^|$%XJb8uZR^3WxVtc#!gCThDL;|7PZg5x zwQWb#N!>8F9P~Pf@esRc=fh$BvJz3>xJka|Z-n8s_&8pxGYJ*``8$E+6sM3au=Izz zoG-a)foq zcf^iHxeV>`<;PjLYu`3GSpU73n-(_CMjw5XNyoO5uEjN`_||E&)0+h)HIW55XJCd% zd@bZvx&n=-i@gep#cEkqWj(oauZPo*XR9sC7BzsSNsYd4cBVZ$)XZk)4GEA_i~pA+ zVHZxJ>zH4r2g4*)Qz(oG$hV#_Q)X4av(Cg$*}^c$^CGpiCX~(n^Q$g;0J9Ol#lN6& zf7`&%)|wF%4Ecc&HxTmc67$mq?Ikt6c-t`eFkKGCUW+H@)2|tmq^7h`sFOo3yBvocs=xh4}(Fg$5f+70-u6Dt53@*Uv)~MA*=5M$Ui{ zm>yVPpxrif`C28-{VY4Fm-MhGK?XfNH5wMKE`k+Rs8=}x{t3>Xj+#oS+%C5PZ7Ma> zP?JRoq?*a%c;F~fZOql4U7d|TpyC9pRBQVj#%n_3&~oq>Wo?|VHu34Pj4 zy&Bc@e73hk4oqv{9J;mMIXh(MVn$x7m{n}bSA5zlqa6&L96DG7du$yO#6KFn7ycUI z0Su3AFF@AYuO%|wGQdoQcyQltr}2!F?5l{V1Wgy9Q9Pn6Yj{5g@qbsh(j0OtMJ8Vw zrL(+Z&xvJJa{_wBzoy`r zS8NpSmCI2%h2TpoE#o>*<^{4ApPv|pDvLUkUP{uPs?y(KS8KkA}imm3qU1xR3bL~+X zoiVBl)j85Av~7f7xl4#oM@81w_#)KOLS9q+nf|ED44<%N_+EOonMl)L7!`SxSmd@# z4fowV1D7GHebih?a>m!DnZd1ZwyVLoPsW`KA=N|vN-tWH`Wrsg2-87Q-Kitt1EbeH z5Z7LlF;gj{}utg<+ai=N<+EssUE$%W;8V6VqjPi)@9uEBdDvYg@%~Lck F`QHwxh0Xu~ literal 13086 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 Ki&u#n1pE&~{dOY& diff --git a/public/logo512.png b/public/logo512.png index 1413c0f25cc421f819a5ea1b245dc5ac4eb688b8..060f96f19f171d973efd74c099532f7de686d6d5 100644 GIT binary patch literal 5904 zcmdT|XH-+$x?MYsNR85wrd|O-gu@X?iUnslUOqatEg5D*dKks7Lk zbR-I*fCz#?s#M|71q>}D`^EeI-XC|IcgJ||?LXfhd(Sz)x!PE3eesqS$A$Q1_yGVy zrhgng4FHPwiUN2XFZ>MqvcU_|K_+%VXZ$V%g*peg0V7wx^KOc!KF;oLr`?=g!!I?v z5dn~RX?oPiDy(mIkaXIys*i6tq3EMQi2qa7iMayB3)mfM0CyX$hA&Wboi$1mFDt#G zqvqj0PY+pu{jjSJNdr=;7&JHVABRbg8s>_otH=LHioTo`_~}-*!Fo6F(e|}iZFfW* zSCrqE8r<72S=PPoy;oWTxs_Z>Y7d6e^IZ1E*!0)1HKGH}0ZpIR1UvvR&-&j9iaZ`q z;qL^PNBuh~fARih%DL6f-IUg*(sq_8w`P8}baLsl@pENv=;35x2;O!wS)Z!GS;#&# zs8Gm4@(g;-Vkn2CHq)bJtn5SWgbWbsR7SCT)aBX<{lUkaUel+S^5llKmm z(l?k$*sNAwi%Xj)YZO)=tH0W`ZX?T=q@K~F6#2u>bTG=^8p$2o(>q0 zUL(Vg9{=i%d(Y(iY@$+m0_~wJll7p!p(o|H~<6-lF9K*D)gh2@C>{O6>FCPa~P(t%`g+@~{clovO3L!3ioTn)78 zw(TP5OHYP%uxCeX07J2vAMK9ExOrEosrTl(@E~8guc@^;ossF3#0nMAsvo z8yO}_)yWL0Mq0+}m$|a?;gP>7kd37x`t*ndpt&f3N?F4~yrFS%9hJoJZ&OML6s0B^ z0SHzvx-UE-dNbbOtD=ABK<$rMo%n0?MDh__AVL-|1qBIIv?IPMKM~r%C4%zt3mgJww%(ypYddK1qjA zAiu^UKN{^8b#)@R&rH2gh9Ez_-1j^pf40l^pTF&AS?rg&xI{~#lx)q2XQ!;uG8KaS zU^9qG^)1ebphHzjmT`B~_xi3*-D-M@LV?wyhiN}1UmGo}3Z+&hwjZ%OwDrQeDOFy( z9OE!)(v`9K)vc#lb*j;Di&c)n7V#L7eU0661BD;+fcH?A^)|~(+KL$1!I$cz4N)Q_ zc6SOSqjHHD!R?bM417}wL2KwiYs#2L_oL&1pG?5;X9*GG&&`l;96V#Sr9`JMCVAhR zCS?T8=74%ZNZFjajXTwYJq4+}=@=I&2_Wd4+Cl&)H2pgjhD~=2H^ve`K>B7d1bK&4kaI>k%0_!*vN|GDYa^)88lLIZ z7P%+HU4HO2H6!e|8X6KToqqplUC*TZ)$__iH%FG)v!b}>Z#YzsP82sCsa;OL_@Rsx zXY%eIb)$lRENX6R--x3ZpG~NLXqp(1U+7eeLRfBsS4W=w3`{1sTyn6F%0TvqEp6%# z4la5HZVi%*x=fFm@ChQamrHq$y}SImH^}7I4ZRtDU5dS)i+(b=PsMqIiS~Q4NO4A+ zW~``cgLNJD^2teYP`=|I3tyQtJJIe4PfbeKzH+=kA$N><#*sGbU0|m^y*7fp`~7sQK*<)?Ec^XcZG}`_ zzZZEIJH#$r)I1S&*~&;y@0X5i>>7RTp~IkPy&{FT^jbWYe?-DX6B3|%H*w0(?uTTP z;(B0mY5OC`Eu}MEI~t?AbJPSY7FXH~w3nwL#&ekJYd1TtfNSQC-&2}@BCWC@dF3-X zPuG~u{&`LnjbxFKFN={^W=Z>QZuY-B(wCeX9*kme-qMRd9^7OpyYJbp;5ETF*JhhA zV)MN6W#-eU4NaD31S6j{B~p5E#g-0|Bv8hciyuXxVS9_4YMdr(s@)>hdq8X1uC6RV z>rI&-Q$f{!WEbtQMdi7n3G0L~H7EPAgD8gR9Ugk9U?U=R)m|;<9vv#2>UyRT7f^qq zdpRx3-|^E(Ri(IpmM0dj?iy?3Z>Cc@Od#4mzrivYbJLtD!X?^_@Vi5@!{R``*Ym`o z9T9;$yN|wl?8Q)+>X7aiDsvu1hR=I9zF)uc?3#K^Wo$%|DHgVljjzA`@)WU(Tlhkw z+SA?BjBz3;BBp%uy!RJp(RSQ;{ceH+>u_f#ib2muHqDN`AZ}Ehk{?VuC!-l#*v6VV z5)+bN{q7p5!14pNLatfZZzrkSl%l_X9u!P*lgsoXW$62k?xDtn)U2Gw>wK!^C#ZrW zZF|7x2`(QpI!-Ov6RJ<)hi0B`8q^T<=DIQj!laT)0g6Go^D_Ea2vLfa(@e%|u9xlz zkAuTXB52ZBm_1%|TudY*w(gYZT>@q4I9}yanj|RTQb(Wv6T1tOi^7B8LhjtU0Hj0> z*^0W{6aguQc6r+(i_m^0glNogZ{K2SUT+fE`=IR5<=#?BJS|ne$P#CE4gD$E*2;v zg2KInVh^M0Y_n*LC9N`|0{~ zS?O4v@{QtZ{*G2kG~N+dzur!}4(=bXzNL&5atl*VxUk3-XZz|~8enYZ8O0Aq_g5+53fAfY!Z%a_ z3V!p{X3fdtnWm4(4Pl5M;6hJk-;-GII>p>Mq(8W#_Z|a3+I|`f53sb@QF^Jj`DVpg zO=b}7QGm)A9u!p5CG0G*J?Rg?{R-I@ozt3Gg>-}z$lER?cn1;srxWqp_{^-;PyE%z zl*N=`0nV%^yWI9BJzR~F2hrw)JS=mL9!`eEbH%m*o8S_ZNH_0D1q=b`ds{bHP&DTV z&Om^cX7qH$Bf?G$^r*0_|NDYqiEiJ+!{v5}Bm)2e*x{rjmu($Lv;M`dJk_RNhyuVW z_Y3G)NjAS7e3*7x*hm0uXR@%sV|N@43)9V=P_PYs!pJ8J2Ztz(>I_QqRPLNbL6n4m z$~z5*0PUC$8B_`I)G2d)WQZjT&$5*3l921dZ^0|+SCQXxr(boe0#yK->RN1&EIv5I zmN#3DH=$@+KE;uAAU0|sy?NIdSSFO;3s(iPf4Tn9i#{k19;ICH2R}j~nqZw^^!sPO zLAghT$DDGqaeLSV3bk{-i8v_2cb+IAm1`s{PI3g;=4ZcILvW{4y99Ager6-V*XPbo zF#FBc1#MX=E1`=rbnZh=$EDoNY2u?%4($#4_N7~eXD2;Ku;k2~29giN=$v~PVSVXc zu(6OWvk(`*ow=O%O!cL1@+v!gXo zwh+v$4>tyO3EXi@aX`sGW?%brufArHqYIk3q&r;k*b2hY0dLybcl`A7p*f%o+mmsO zX@h?3pWuhK_^%F^GG0 zu+LAN`*g^i)!$SIhc-#lvYH-0;$C%WvvCK1U06N|KOty(4anfjNJRpPyUcCf!G~gg z!V$widUiQUcsxk(w%}+qMj(2rMc;sb+6o*X`f$an0_!lWC1+I*#DJC{v~CSad_NF} zigA*0ty~z&oEu7?5Cz}dgUyD`@lx$vVn=X{+!mLP@a*~;W z-i=f5(;rk7a`ou0$P6f7sE*%_(*ACaAnSkQSM5qu{2!6{>2Q*@~`#8_0a8n2nN=k77w;%aEvJX+1I=n z@rvM`wDw~6>(JOFwqydeSKt6dan~1HglTbC8H(7L&^v|Dhe29A-=^@*s#gooE;&q* zLC<}Im(ec6V^9$*#j0FgJ!d2%I=6|0%5gvhQN0( zp*LAgR!Wduvbya++3B7k&r}<1e{NfB9h-T_f_nFp7sJ(x~BxM<0I+W+OWh zUBrI++3PrE!YB46a)LPiBC40n6t$kT|vRrcZXua1T5BSJx6!xL{#$=O;ZNmd%je7@?*h? z6L%PKku(N9v3{k(VU|(&N;!O!XNk<-DASretr9%iue04^?9kvBpR)bEh+XQ>_eyL& zWuzfH@nA){B9N^VBw0)mW%-l%^jdsoI+`@j;>#&s-!5+xu;Ep0{-X~(Q0uXg;I|K5 z)?ImM(7=!5*P9{BTW6hTI~*oUU%1w8YMlF|fA}jlEc@;YjDyd@eEnLRHUw|*YEFtg zC%i4=?*y1f{f}0y{yiUmH|77VvA;U$e<$<*zi$5J_}?2##eaqTKikcWkWCT{fyT>! VW{23OY~^_erY06gi;O8({tHE#F?Rp} literal 43184 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 ISu?-?0dG}Gu>b%7 diff --git a/public/manifest.json b/public/manifest.json index 139e5c67e..f91f71324 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,6 +1,6 @@ { - "short_name": "Online-Beratung", - "name": "Caritas Online-Beratung – Online. Anonym. Sicher.", + "short_name": "Diakonie Online-Beratung", + "name": "Diakonie Online-Beratung – Online. Anonym. Sicher.", "icons": [ { "src": "favicon.ico", @@ -20,6 +20,6 @@ ], "start_url": ".", "display": "standalone", - "theme_color": "#cc1e1c", + "theme_color": "#5a2572", "background_color": "#ffffff" } diff --git a/public/releases/20220427001.md b/public/releases/20220427001.md new file mode 100644 index 000000000..fc3fecf50 --- /dev/null +++ b/public/releases/20220427001.md @@ -0,0 +1,35 @@ +# Überschrift 1 + +**Anzeigename** +Im Profil gibt es nun den Anzeigenamen den Sie frei wählen können. Dieser wird den Ratsuchenden angezeigt. [Verlinkung nach extern](https://www.google.de) + +**Feature Name** +Maximal zwei Sätze zur Erklärung des Features... Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore. [Verlinkung nach extern](https://www.google.de) + +## Überschrift 2 + +Dies ist ein Absatz. ...Lorem ipsum dolor sit amet, _consetetur sadipscing_ elitr +Mit einem Linebreak zwischen drin. ...Lorem **ipsum dolor sit amet**, consetetur sadipscing elitr + +- Eine Aufzählungsliste +- ohne Nummerierung +- ...Lorem ipsum dolor sit amet, consetetur sadipscing + - eingerückt + - eingerückt + +### Überschrift 3 + +Dies ist ein Absatz. ...Lorem ipsum dolor sit amet, _consetetur sadipscing_ elitr +Mit einem Linebreak zwischen drin. ...Lorem **ipsum dolor sit amet**, consetetur sadipscing elitr + +1. Eine Aufzählungsliste +2. mit Numerierung +3. ...Lorem ipsum dolor sit amet, consetetur sadipscing + +Hier nochmal ein paar Textformatierungen: z.B. **fetter Text** oder _kursiver Text_. + +#### Überschrift 4 + +##### Überschrift 5 + +###### Überschrift 6 diff --git a/public/releases/20220505001.md b/public/releases/20220505001.md new file mode 100644 index 000000000..88313a17f --- /dev/null +++ b/public/releases/20220505001.md @@ -0,0 +1,20 @@ +**Neuigkeiten-Fenster** +An dieser Stelle informieren wir Sie zukünftig über neue Funktionen und Änderungen im Beratungsportal. + +**Video-Termine** +Sie können Video-Termine jetzt auch unabhängig von Textberatungen planen und starten. Den zugehörigen Video-Link können Sie im Voraus an Ratsuchende versenden. Eine Registrierung ist für Ratsuchende an dieser Stelle nicht erforderlich. + +**Profil** +Das Profil wurde umgebaut, um es für Sie übersichtlicher zu gestalten. + +**QR-Code** +Neben Ihrem persönlichen Kontakt-Link und dem Direktlink der Beratungsstelle finden Sie jetzt auch einen entsprechenden QR-Code. + +**Anzeigename** +Im Profil können Sie Ihren Anzeigename, der bei Beratungen auf Seiten der Ratsuchenden erscheint, nun selbst festlegen. + +**2-Faktor-Authentifizierung** +Neben der 2-Faktor-Authentifizierung per App können Sie jetzt auch Ihre E-Mail-Adresse als zweiten Faktor nutzen. + +**Sicherheit der Video-Beratung** +Um die bestmögliche Verschlüsselung bei der Video-Beratung anzubieten, müssen Sie als Browser Chrome oder Edge nutzen. Wenn sich die Verschlüsselung in anderen Browsern wie Firefox zukünftig verbessert, werden wir diese natürlich hinzunehmen. diff --git a/public/releases/20221124001.md b/public/releases/20221124001.md new file mode 100644 index 000000000..271f6b97e --- /dev/null +++ b/public/releases/20221124001.md @@ -0,0 +1,15 @@ +**Weitergabe von Beratungen** + +Sie können einen Beratungsvorgang nun an Kolleginnen und Kollegen weitergeben. Rufen Sie dazu eine laufende Beratung unter "Meine Beratungen" auf und klicken dann im Chatverlauf dieser Beratung rechts oben auf das Drei-Punkt-Menü. Dort wählen Sie "Ratsuchendenprofil" aus und können unter "Zuweisung" die Beratung an eine Kollegin oder einen Kollegen übergeben. Die ratsuchende Person bekommt daraufhin eine Systemnachricht und muss der Weitergabe zustimmen oder diese ablehnen. + +**Verpflichtende Zwei-Faktor-Authentifizierung** + +Um die Beratungsdaten noch stärker zu schützen, müssen Sie in Ihrem Account ab 1.2.2023 einen zweiten Faktor zur Anmeldung hinterlegt haben. Für Ratsuchende bleibt die Zwei-Faktor-Authentifizierung weiterhin freiwillig. + +**E-Mail-Benachrichtigungen** + +Wenn Sie im Beratungsportal eingeloggt sind, werden nun keine Benachrichtigungsmails bei laufenden Beratungen gesendet. Somit wird verhindert, dass Sie während eines Live-Chats im Hintergrund ständig E-Mails bekommen. Darüber hinaus können Sie in Ihrem Profil unter "Einstellungen" E-Mail-Benachrichtigungen für laufende Beratungen deaktivieren. Sie bekommen dann nur noch E-Mails bei Erstanfragen. + +**Mehrsprachige Oberfläche** + +Wir haben das Beratungsportal fit für die Mehrsprachigkeit gemacht. Im ersten Schritt ist neben Deutsch nun auch Englisch auswählbar. Bitte wundern Sie sich nicht über einige holprige Formulierungen, die Übersetzung haben wir bisher nur maschinell durchführen lassen. Im nächsten Schritt werden wir das Englisch verbessern und Stück für Stück auch weitere Sprachen hinterlegen. diff --git a/public/releases/20221212001.md b/public/releases/20221212001.md new file mode 100644 index 000000000..770a0736f --- /dev/null +++ b/public/releases/20221212001.md @@ -0,0 +1,3 @@ +**Löschen einzelner Nachrichten und Dokumente** + +Es lassen sich nun eigene Nachrichten und gesendete Dokumente einzeln löschen. Klicken Sie dazu auf das Drei-Punkte-Menü direkt über einer Nachricht und wählen Sie "Löschen". diff --git a/public/releases/20230117001.md b/public/releases/20230117001.md new file mode 100644 index 000000000..88d8bdd0e --- /dev/null +++ b/public/releases/20230117001.md @@ -0,0 +1,3 @@ +**Verpflichtende Zwei-Faktor-Authentifizierung aufgehoben** + +Da es in einigen Beratungsstellen zu verzögertem Empfang der Authentifizierungscodes kommt, haben wir die angekündigte Pflicht zur Zwei-Faktor-Authentifizierung vorerst aufgehoben. Sie können sich also weiterhin ohne zweiten Faktor einloggen bis wir die Probleme analysiert und ggf. auch mit den zuständigen IT-Abteilungen vor Ort behoben haben. diff --git a/public/releases/releases.json b/public/releases/releases.json index 90dabbb3d..de9a3bf44 100644 --- a/public/releases/releases.json +++ b/public/releases/releases.json @@ -1,6 +1,17 @@ { - "19700101001": { - "title": "Beispiel #1", - "file": "19700101001.md" + "20220427001": { + "file": "20220427001.md" + }, + "20220505001": { + "file": "20220505001.md" + }, + "20221124001": { + "file": "20221124001.md" + }, + "20221212001": { + "file": "20221212001.md" + }, + "20230117001": { + "file": "20230117001.md" } } diff --git a/src/api/apiAgencySelection.ts b/src/api/apiAgencySelection.ts index b96f99f98..8f7acc972 100644 --- a/src/api/apiAgencySelection.ts +++ b/src/api/apiAgencySelection.ts @@ -9,7 +9,7 @@ export const apiAgencySelection = async ( ...params }: { postcode?: string; - consultingType: number | undefined; + consultingType?: number | undefined; topicId?: number; age?: number; gender?: string; diff --git a/src/api/apiGetConsultant.ts b/src/api/apiGetConsultant.ts index 31e126b3e..eb4bee94e 100644 --- a/src/api/apiGetConsultant.ts +++ b/src/api/apiGetConsultant.ts @@ -5,7 +5,8 @@ import { loadConsultingTypesForAgencies } from '../utils/loadConsultingTypesForA export const apiGetConsultant = async ( consultantId: string, - fetchConsultingTypeDetails?: boolean + fetchConsultingTypeDetails?: boolean, + catchAllErrors?: boolean ): Promise => { const url = endpoints.agencyConsultants + '/' + consultantId; @@ -13,7 +14,11 @@ export const apiGetConsultant = async ( url: url, method: FETCH_METHODS.GET, skipAuth: true, - responseHandling: [FETCH_ERRORS.CATCH_ALL] + responseHandling: [ + FETCH_ERRORS.EMPTY, + FETCH_ERRORS.NO_MATCH, + catchAllErrors && FETCH_ERRORS.CATCH_ALL + ] }).then(async (user: ConsultantDataInterface) => { if (!fetchConsultingTypeDetails) { return user; diff --git a/src/api/apiGetIsUsernameAvailable.ts b/src/api/apiGetIsUsernameAvailable.ts new file mode 100644 index 000000000..4e2e546b3 --- /dev/null +++ b/src/api/apiGetIsUsernameAvailable.ts @@ -0,0 +1,13 @@ +import { endpoints } from '../resources/scripts/endpoints'; +import { fetchData, FETCH_METHODS, FETCH_ERRORS } from './fetchData'; + +export const apiGetIsUsernameAvailable = async ( + username: string +): Promise => { + return fetchData({ + url: `${endpoints.baseUserService}/${username}`, + method: FETCH_METHODS.GET, + headersData: {}, + responseHandling: [FETCH_ERRORS.EMPTY, FETCH_ERRORS.NO_MATCH] + }); +}; diff --git a/src/api/apiGetTopicGroups.ts b/src/api/apiGetTopicGroups.ts new file mode 100644 index 000000000..334c17c9c --- /dev/null +++ b/src/api/apiGetTopicGroups.ts @@ -0,0 +1,13 @@ +import { TopicGroup } from '../globalState/interfaces/TopicGroups'; +import { endpoints } from '../resources/scripts/endpoints'; +import { fetchData, FETCH_ERRORS, FETCH_METHODS } from './fetchData'; + +export const apiGetTopicGroups = async (): Promise<{ + data: { items: Array }; +}> => { + return fetchData({ + url: endpoints.topicGroups, + responseHandling: [FETCH_ERRORS.EMPTY], + method: FETCH_METHODS.GET + }); +}; diff --git a/src/components/E2EEncryptionSupportHelp/E2EEncryptionSupportHelp.tsx b/src/components/E2EEncryptionSupportHelp/E2EEncryptionSupportHelp.tsx index 231b6ebc8..cb893949e 100644 --- a/src/components/E2EEncryptionSupportHelp/E2EEncryptionSupportHelp.tsx +++ b/src/components/E2EEncryptionSupportHelp/E2EEncryptionSupportHelp.tsx @@ -83,7 +83,7 @@ export const E2EEncryptionSupportHelp = () => { { const [isVisible, setIsVisible] = useState(false); @@ -10,7 +10,7 @@ export const Loading = () => { useEffect(() => { // Delay showing the loading indicator, but hide it again if loading takes too long const timeoutIds = [ - setTimeout(() => setIsVisible(true), 500), + setTimeout(() => setIsVisible(true), 200), setTimeout(() => setIsVisible(false), 2000) ]; return () => timeoutIds.forEach(clearTimeout); diff --git a/src/components/app/app.tsx b/src/components/app/app.tsx index e3c9e58ab..2676abaca 100644 --- a/src/components/app/app.tsx +++ b/src/components/app/app.tsx @@ -42,9 +42,11 @@ const AuthenticatedApp = lazy(() => import('./AuthenticatedApp').then((m) => ({ default: m.AuthenticatedApp })) ); const Registration = lazy(() => - import('../registration/Registration').then((m) => ({ - default: m.Registration - })) + import('../../extensions/components/registration/Registration').then( + (m) => ({ + default: m.Registration + }) + ) ); const WaitingRoomLoader = lazy(() => import('../waitingRoom/WaitingRoomLoader').then((m) => ({ @@ -61,7 +63,7 @@ type TExtraRoute = { component: ComponentType; }; -interface AppProps { +export interface AppProps { stageComponent: ComponentType; legalLinks?: Array; extraRoutes?: TExtraRoute[]; diff --git a/src/components/generateQrCode/GenerateQrCode.tsx b/src/components/generateQrCode/GenerateQrCode.tsx index 22f130041..89cc7e198 100644 --- a/src/components/generateQrCode/GenerateQrCode.tsx +++ b/src/components/generateQrCode/GenerateQrCode.tsx @@ -23,32 +23,23 @@ export const GenerateQrCode: React.FC = ({ }) => { const { t: translate } = useTranslation(); const [qr, setQr] = useState(''); - const [qrDownload, setQrDownload] = useState(''); const [overlayActive, setOverlayActive] = useState(false); const generateQrCodeRef = useRef(); + const backgroundColor = '#ffffff'; + const foregroundColor = '#000000'; + useEffect(() => { QRCode.toDataURL(url, { errorCorrectionLevel: 'L', width: 360, color: { - dark: '#00000099', - light: '#ffffff00' + dark: foregroundColor, + light: backgroundColor } }).then((url) => { setQr(url); }); - - QRCode.toDataURL(url, { - errorCorrectionLevel: 'L', - width: 360, - color: { - dark: '#000000', - light: '#ffffff00' - } - }).then((url) => { - setQrDownload(url); - }); }, [url]); const qrCodeNested = (): JSX.Element => { @@ -63,7 +54,7 @@ export const GenerateQrCode: React.FC = ({ filename }) + '.png' } - href={qrDownload} + href={qr} > {translate(`qrCode.overlay.download`)} diff --git a/src/components/input/input.tsx b/src/components/input/input.tsx new file mode 100644 index 000000000..55a1e349d --- /dev/null +++ b/src/components/input/input.tsx @@ -0,0 +1,270 @@ +import * as React from 'react'; +import { useState, useEffect, useRef } from 'react'; +import { TextField, Typography } from '@mui/material'; +import CheckCircleIcon from '@mui/icons-material/CheckCircle'; +import CancelIcon from '@mui/icons-material/Cancel'; +import { useTranslation } from 'react-i18next'; + +export interface InputProps { + label: string; + value: string; + inputMode?: + | 'tel' + | 'text' + | 'email' + | 'search' + | 'url' + | 'none' + | 'numeric' + | 'decimal'; + onInputChange?: Function; + startAdornment?: JSX.Element; + endAdornment?: JSX.Element; + isValueValid?(value: string): Promise; + inputType?: 'number' | 'tel' | 'text' | 'password'; + info?: string; + autoComplete?: string; + errorMessage?: string; + successMesssage?: string; + multipleCriteria?: Array<{ + info: string; + validation(val: string): boolean; + }>; +} + +export const Input = ({ + value, + label, + onInputChange, + startAdornment, + endAdornment, + isValueValid, + inputType, + info, + inputMode, + errorMessage, + successMesssage, + multipleCriteria, + autoComplete +}: InputProps) => { + const { t } = useTranslation(); + const [shrink, setShrink] = useState(value?.length > 0); + const [wasBlurred, setWasBlurred] = useState(false); + const [showSuccessMessage, setShowSuccessMessage] = + useState(false); + const [inputError, setInputError] = useState(false); + + const isValid = async (val) => { + if (isValueValid) { + return await isValueValid(val); + } else if (multipleCriteria) { + return multipleCriteria.every((criteria) => + criteria.validation(val) + ); + } else { + return true; + } + }; + + const handleBlur = async () => { + setWasBlurred(true); + const valid = await isValid(value); + if (value?.length === 0) { + setShrink(false); + } else if (!valid) { + setInputError(true); + } + if ((successMesssage || multipleCriteria) && valid) { + setShowSuccessMessage(true); + } else { + setShowSuccessMessage(false); + } + }; + + const handleChange = async (e) => { + onInputChange(e.target.value); + const valid = await isValid(e.target.value); + if (inputError && valid) { + setInputError(false); + setShowSuccessMessage(!!successMesssage || !!multipleCriteria); + } else if (showSuccessMessage && !valid) { + setInputError(true); + setShowSuccessMessage(false); + } + }; + + const getMultipleCriteriaDesign = (criteria) => { + const blurredIcon = wasBlurred ? ( + + ) : ( + '•' + ); + const icon = criteria.validation(value) ? ( + + ) : ( + blurredIcon + ); + const blurredColor = wasBlurred ? 'error.main' : 'info.light'; + const color = criteria.validation(value) + ? 'success.main' + : blurredColor; + return { icon, color }; + }; + const inputRef = useRef(); + useEffect(() => { + if ( + value?.length === 0 && + document.activeElement !== inputRef.current + ) { + setShrink(false); + } + }, [value]); + + return ( + <> + { + setShrink(true); + }} + onBlur={handleBlur} + > + {info && !inputError && !showSuccessMessage && ( + + {info} + + )} + {errorMessage && inputError && ( + + {errorMessage} + + )} + {showSuccessMessage && successMesssage && ( + + {successMesssage} + + )} + {multipleCriteria && + multipleCriteria.map((criteria) => { + return ( + + {getMultipleCriteriaDesign(criteria).icon}{' '} + {t(criteria.info)} + + ); + })} + + ); +}; diff --git a/src/components/inputField/InputField.tsx b/src/components/inputField/InputField.tsx index ec072b518..da0273952 100644 --- a/src/components/inputField/InputField.tsx +++ b/src/components/inputField/InputField.tsx @@ -43,6 +43,7 @@ export interface GeneratedInputs { state?: string; } +// LEGACY COMPONENT, use "Input" instead export const InputField = (props: InputFieldProps) => { const inputItem = props.item; const { t: translate } = useTranslation(); diff --git a/src/components/loadingIndicator/LoadingIndicator.tsx b/src/components/loadingIndicator/LoadingIndicator.tsx index be79cbea1..57ecb46ac 100644 --- a/src/components/loadingIndicator/LoadingIndicator.tsx +++ b/src/components/loadingIndicator/LoadingIndicator.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import './LoadingIndicator.styles.scss'; +import './LoadingIndicator.styles'; export const LoadingIndicator = () => { return ( diff --git a/src/components/localeSwitch/LocaleSwitch.tsx b/src/components/localeSwitch/LocaleSwitch.tsx index 49bd451b5..a23ee1c54 100644 --- a/src/components/localeSwitch/LocaleSwitch.tsx +++ b/src/components/localeSwitch/LocaleSwitch.tsx @@ -1,7 +1,6 @@ import * as React from 'react'; import './localeSwitch.styles'; import { ReactComponent as LanguageIconOutline } from '../../resources/img/icons/language_outline.svg'; -import { ReactComponent as LanguageIconFilled } from '../../resources/img/icons/language_filled.svg'; import { useTranslation } from 'react-i18next'; import { useContext, useEffect, useState } from 'react'; import { UserDataContext, LocaleContext } from '../../globalState'; @@ -13,6 +12,7 @@ import { SelectDropdownItem } from '../select/SelectDropdown'; import { setValueInCookie } from '../sessionCookie/accessSessionCookie'; +import LanguageIcon from '@mui/icons-material/Language'; export interface LocaleSwitchProp { updateUserData?: boolean; @@ -24,6 +24,9 @@ export interface LocaleSwitchProp { menuPlacement?: MENUPLACEMENT; selectRef?: any; isInsideMenu?: boolean; + color?: string; + colorHover?: string; + iconOnly?: boolean; } export const LocaleSwitch: React.FC = ({ @@ -35,7 +38,10 @@ export const LocaleSwitch: React.FC = ({ menuPlacement = MENUPLACEMENT_BOTTOM, label, selectRef, - isInsideMenu = false + isInsideMenu = false, + color = 'var(--secondary)', + colorHover = 'var(--hover-primary)', + iconOnly }) => { const { t: translate } = useTranslation(['common', 'languages']); @@ -90,7 +96,7 @@ export const LocaleSwitch: React.FC = ({ value: locale, label: ( <> - {showIcon && ( + {(showIcon || iconOnly) && ( <> {isInsideMenu && ( = ({ className="navigation__icon__outline" /> )} - )}{' '} - - {label - ? label - : translate([locale, locale], { ns: 'languages' })} - + {!iconOnly && ( + + {label + ? label + : translate([locale, locale], { + ns: 'languages' + })} + + )} ) }, styleOverrides: { menu: () => ({ - width: 'auto' + width: 'auto', + ...(iconOnly && { + left: '-100%' + }) }), control: () => ({ //'padding': '8px 12px', @@ -137,14 +150,25 @@ export const LocaleSwitch: React.FC = ({ dropdownIndicator: () => ({ display: 'none' }), + menuSwitch: () => { + return ( + iconOnly && { + display: 'inline-block' + } + ); + }, singleValue: () => ({ - maxWidth: 'auto', - position: 'relative', - top: 0, - transform: 'none', - display: 'flex', - flexDirection: vertical ? 'column' : 'row', - alignItems: 'center' + 'maxWidth': 'auto', + 'position': 'relative', + 'top': 0, + 'transform': 'none', + 'display': 'flex', + 'flexDirection': vertical ? 'column' : 'row', + 'alignItems': 'center', + color, + '&:hover': { + color: colorHover + } }), valueContainer: () => ({ overflow: 'visible', diff --git a/src/components/localeSwitch/localeSwitch.styles.scss b/src/components/localeSwitch/localeSwitch.styles.scss index accda5ded..d21ec07c2 100644 --- a/src/components/localeSwitch/localeSwitch.styles.scss +++ b/src/components/localeSwitch/localeSwitch.styles.scss @@ -8,13 +8,6 @@ padding-left: 0; } - .select__input__single-value { - color: $secondary; - &:hover { - color: $hover-primary; - } - } - span { font-weight: bold; } diff --git a/src/components/overlay/overlay.styles.scss b/src/components/overlay/overlay.styles.scss index fac0d94ed..1e31fed7e 100644 --- a/src/components/overlay/overlay.styles.scss +++ b/src/components/overlay/overlay.styles.scss @@ -5,7 +5,8 @@ $overlay-icon-size: 56px !default; $overlay-icon-size-large: 48px !default; $overlay-illustration-size: 120px !default; $overlay-illustration-size-from-large: 80px !default; -$overlay-illustration-size-large: 160px; +$overlay-illustration-width-large: auto; +$overlay-illustration-height-large: 100%; .overlay { display: flex; @@ -296,23 +297,13 @@ $overlay-illustration-size-large: 160px; &--large { background-color: #fff; - height: $overlay-illustration-size-large; - width: $overlay-illustration-size-large; - - @include breakpoint($fromLarge) { - width: $overlay-illustration-size-from-large; - height: $overlay-illustration-size-from-large; - } + height: $overlay-illustration-height-large; + width: $overlay-illustration-width-large; & > svg { - width: $overlay-illustration-size-large; - height: $overlay-illustration-size-large; + width: $overlay-illustration-width-large; + height: $overlay-illustration-height-large; align-self: center; - - @include breakpoint($fromLarge) { - width: $overlay-illustration-size-from-large; - height: $overlay-illustration-size-from-large; - } } } } @@ -335,12 +326,12 @@ $overlay-illustration-size-large: 160px; .overlay__illustration { background-color: transparent; margin-top: $grid-base-six; - height: $overlay-illustration-size-large; - width: $overlay-illustration-size-large; + height: $overlay-illustration-height-large; + width: $overlay-illustration-width-large; & > svg { - width: $overlay-illustration-size-large; - height: $overlay-illustration-size-large; + width: $overlay-illustration-width-large; + height: $overlay-illustration-height-large; align-self: center; } } diff --git a/src/components/registration/welcomeScreen.styles.scss b/src/components/registration/welcomeScreen.styles.scss index 56608a62e..f59215f42 100644 --- a/src/components/registration/welcomeScreen.styles.scss +++ b/src/components/registration/welcomeScreen.styles.scss @@ -50,7 +50,7 @@ $welcome-screen-button-text-align: center !default; } button { - min-width: 205px; + min-width: auto; width: 100%; } diff --git a/src/components/sessionsListItem/SessionListItemComponent.tsx b/src/components/sessionsListItem/SessionListItemComponent.tsx index 0c6890f52..d0cc87bfc 100644 --- a/src/components/sessionsListItem/SessionListItemComponent.tsx +++ b/src/components/sessionsListItem/SessionListItemComponent.tsx @@ -272,7 +272,7 @@ export const SessionListItemComponent = ({ [ `consultingType.${consultingType.id}.titles.default`, `consultingType.fallback.titles.default`, - consultingType.titles.default + consultingType.titles?.default ], { ns: 'consultingTypes' } ) @@ -383,7 +383,9 @@ export const SessionListItemComponent = ({ ) : (
- {showConsultingType + {showConsultingType && + consultingType?.id && + consultingType.titles?.default ? translate( [ `consultingType.${consultingType.id}.titles.default`, diff --git a/src/components/stageLayout/StageLayout.styles.scss b/src/components/stageLayout/StageLayout.styles.scss index 7c51e990e..a62dd7b81 100644 --- a/src/components/stageLayout/StageLayout.styles.scss +++ b/src/components/stageLayout/StageLayout.styles.scss @@ -14,6 +14,10 @@ } } + .stageLayout__header > * { + padding: 0 8px; + } + &__content { flex: 1; } diff --git a/src/components/stageLayout/StageLayout.tsx b/src/components/stageLayout/StageLayout.tsx index 7c104c193..f1ad0139c 100644 --- a/src/components/stageLayout/StageLayout.tsx +++ b/src/components/stageLayout/StageLayout.tsx @@ -9,9 +9,20 @@ import { useTranslation } from 'react-i18next'; import { LocaleSwitch } from '../localeSwitch/LocaleSwitch'; import { LegalLinksContext } from '../../globalState/provider/LegalLinksProvider'; import { useAppConfig } from '../../hooks/useAppConfig'; -import { useResponsive } from '../../hooks/useResponsive'; import LegalLinks from '../legalLinks/LegalLinks'; import { MENUPLACEMENT_BOTTOM_LEFT } from '../select/SelectDropdown'; +import { + AppBar, + Box, + Divider, + IconButton, + Slide, + Toolbar, + Typography, + useScrollTrigger +} from '@mui/material'; +import LoginIcon from '@mui/icons-material/Login'; +import { InfoDrawer } from '../../extensions/components/registration/infoDrawer/InfoDrawer'; interface StageLayoutProps { className?: string; @@ -21,6 +32,7 @@ interface StageLayoutProps { showLoginLink?: boolean; showRegistrationLink?: boolean; loginParams?: string; + showRegistrationInfoDrawer?: boolean; } export const StageLayout = ({ @@ -30,21 +42,80 @@ export const StageLayout = ({ showLegalLinks, showLoginLink, showRegistrationLink, - loginParams + loginParams, + showRegistrationInfoDrawer }: StageLayoutProps) => { + const trigger = useScrollTrigger(); const { t: translate } = useTranslation(); const legalLinks = useContext(LegalLinksContext); const { selectableLocales } = useContext(LocaleContext); const { specificAgency } = useContext(AgencySpecificContext); const settings = useAppConfig(); - const { fromL } = useResponsive(); return (
+ + theme.zIndex.drawer + 1 + }} + > + + + {translate('app.stage.title')} + + + + {selectableLocales.length > 1 && ( + + )} + + {showLoginLink && ( + + + + )} + + + + + + + {showRegistrationInfoDrawer && ( + + )} {React.cloneElement(Children.only(stage as ReactElement), { className: 'stageLayout__stage' })} -
+ {selectableLocales.length > 1 && (
)} -
+ -
{children}
+ + {children} +
{showLegalLinks && ( diff --git a/src/components/tagSelect/tagSelect.styles.scss b/src/components/tagSelect/tagSelect.styles.scss index bd490b2c1..ef5e2fc41 100644 --- a/src/components/tagSelect/tagSelect.styles.scss +++ b/src/components/tagSelect/tagSelect.styles.scss @@ -31,7 +31,7 @@ &__label { background: $dark-grey; - border-radius: $grid-base-four / 2; + border-radius: calc(#{$grid-base-four} / 2); text-align: center; cursor: pointer; padding: 0 $grid-base-two; diff --git a/src/extensions/api/apiGetConsultingTypeGroups.tsx b/src/extensions/api/apiGetConsultingTypeGroups.tsx new file mode 100644 index 000000000..9117a8b9f --- /dev/null +++ b/src/extensions/api/apiGetConsultingTypeGroups.tsx @@ -0,0 +1,13 @@ +import { fetchData, FETCH_METHODS } from '../../api'; +import { endpoints } from '../../resources/scripts/endpoints'; +import { ConsultingTypeGroupInterface } from '../globalState/interfaces/ConsultingTypeGroupInterface'; + +export const apiGetConsultingTypeGroups = async (): Promise< + Array +> => { + return fetchData({ + url: `${endpoints.consultingTypeServiceBase}/groups`, + method: FETCH_METHODS.GET, + skipAuth: true + }); +}; diff --git a/src/extensions/components/app/app.tsx b/src/extensions/components/app/app.tsx new file mode 100644 index 000000000..658d2cbd1 --- /dev/null +++ b/src/extensions/components/app/app.tsx @@ -0,0 +1,51 @@ +import * as React from 'react'; +import { ThemeProvider } from '@mui/material'; +import { UrlParamsProvider } from '../../../globalState/provider/UrlParamsProvider'; +import { RegistrationProvider } from '../../../globalState'; +import { App as CoreApp, AppProps } from '../../../components/app/app'; +import { lazy } from 'react'; +import '../../../resources/styles/mui-variables-mapping'; +import theme from '../../theme'; + +const Registration = lazy(() => + import('../registration/Registration').then((m) => ({ + default: m.Registration + })) +); + +const NewRegistration = () => ( + + + + + +); + +export const App = (props: AppProps) => { + // The login is possible both at the root URL as well as with an + // optional resort name. Since resort names are dynamic, we have + // to find out if the provided path is a resort name. If not, we + // use the authenticated app as a catch-all fallback. + + const extraRoutes = [ + ...props.extraRoutes, + { + route: { + path: [ + '/registration', + '/registration/topic-selection', + '/registration/zipcode', + '/registration/account-data', + '/registration/agency-selection' + ] + }, + component: NewRegistration + } + ]; + + return ( + + + + ); +}; diff --git a/src/extensions/components/consultingTypes/ConsultingTypes.styles.scss b/src/extensions/components/consultingTypes/ConsultingTypes.styles.scss new file mode 100644 index 000000000..c87469db5 --- /dev/null +++ b/src/extensions/components/consultingTypes/ConsultingTypes.styles.scss @@ -0,0 +1,63 @@ +.consultingTypes { + padding: 0; + + @include breakpoint($fromMedium) { + width: 490px; + } + + &__intro { + font-size: $font-size-h3; + line-height: 32px; + } + + &__groupSelect { + max-width: 100%; + margin: $grid-base-three 0; + padding: 0; + } + + &__children { + margin: $grid-base-six -#{$grid-base-three} 0; + } + + &__learnMore { + display: flex; + align-items: flex-start; + margin-top: $grid-base-eight; + appearance: none; + border: none; + background: transparent; + cursor: pointer; + text-decoration: underline; + padding-left: 0; + + &:hover { + color: var(--skin-color-primary-hover, $hover-primary); + } + } + + &__learnMoreIcon { + margin-right: $grid-base; + position: relative; + color: $primary; + } + + &__learnMoreText { + color: $primary; + &:hover { + color: var(--skin-color-primary-hover, $hover-primary); + } + } + + &__explanationOverlay .overlay__content { + text-align: left; + } + + .button-as-link { + &:focus-visible { + outline: $focus-outline; + outline-offset: 4px; + border-radius: $login-button-focus-border-radius; + } + } +} diff --git a/src/extensions/components/consultingTypes/ConsultingTypes.tsx b/src/extensions/components/consultingTypes/ConsultingTypes.tsx new file mode 100644 index 000000000..2ec79a776 --- /dev/null +++ b/src/extensions/components/consultingTypes/ConsultingTypes.tsx @@ -0,0 +1,246 @@ +import * as React from 'react'; +import { useEffect, useState, useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; +import { apiGetConsultingTypeGroups } from '../../api/apiGetConsultingTypeGroups'; +import { ConsultingTypeGroupInterface } from '../../globalState/interfaces/ConsultingTypeGroupInterface'; +import { Stage } from '../stage/stage'; +import { ConsultingTypesGroupChild } from './ConsultingTypesGroupChild'; +import { ConsultingTypesOverlay } from './ConsultingTypesOverlay'; +import './ConsultingTypes.styles.scss'; +import useIsFirstVisit from '../../../utils/useIsFirstVisit'; +import { Headline } from '../../../components/headline/Headline'; +import { InfoIcon } from '../../../resources/img/icons'; +import { LoadingIndicator } from '../../../components/loadingIndicator/LoadingIndicator'; +import { SelectDropdown } from '../../../components/select/SelectDropdown'; +import { StageLayout } from '../../../components/stageLayout/StageLayout'; +import { Text } from '../../../components/text/Text'; + +export const ConsultingTypes = () => { + const { t: translate } = useTranslation(['common', 'consultingTypes']); + + const [loadedConsultingTypeGroups, setLoadedConsultingTypeGroups] = + useState([]); + + const [consultingTypeGroups, setConsultingTypeGroups] = useState< + (ConsultingTypeGroupInterface & { + id: string; + })[] + >([]); + + const [loading, setLoading] = useState(true); + const [selectedGroupId, setSelectedGroupId] = useState(null); + const [expandedConsultingTypeId, setExpandedConsultingTypeId] = + useState(null); + const [isExplanationOverlayOpen, setIsExplanationOverlayOpen] = + useState(false); + const [selectedGroup, setSelectedGroup] = useState(null); + + useEffect(() => { + if (selectedGroupId === null) { + return; + } + setSelectedGroup( + consultingTypeGroups.find((group) => group.id === selectedGroupId) + ); + }, [selectedGroupId, consultingTypeGroups]); + + const handleGroupSelect = useCallback((item) => { + setSelectedGroupId(item.value); + setExpandedConsultingTypeId(undefined); + }, []); + + const handleConsultingTypeToggle = useCallback( + (consultingTypeId) => { + setExpandedConsultingTypeId( + consultingTypeId === expandedConsultingTypeId + ? undefined + : consultingTypeId + ); + }, + [expandedConsultingTypeId] + ); + + const handleExplanationOverlayToggle = () => { + setIsExplanationOverlayOpen(!isExplanationOverlayOpen); + }; + + const sortConsultingTypeGroups = useCallback( + (groups: ConsultingTypeGroupInterface[]) => + groups + // Translate titles before sorting + .map( + ( + group + ): ConsultingTypeGroupInterface & { + id: string; + } => ({ + ...group, + id: group.consultingTypes + .map((consultingType) => consultingType.id) + .sort() + .join('-'), + title: translate( + [ + `consultingTypeGroup.${group.title}.title`, + group.title + ], + { ns: 'consultingTypes' } + ) + }) + ) + .sort((a, b) => (a.title < b.title ? -1 : 1)) + .map((group) => ({ + ...group, + consultingTypes: group.consultingTypes + .slice() + // Translate titles before sorting + .map((consultingType) => ({ + ...consultingType, + titles: { + ...consultingType.titles, + long: translate( + [ + `consultingType.${consultingType.id}.titles.long`, + consultingType.titles.long + ], + { ns: 'consultingTypes' } + ), + default: translate( + [ + `consultingType.${consultingType.id}.titles.default`, + consultingType.titles.default + ], + { ns: 'consultingTypes' } + ) + } + })) + .sort((a, b) => + a.titles.long < b.titles.long ? -1 : 1 + ) + })), + [translate] + ); + + useEffect(() => { + apiGetConsultingTypeGroups() + .then(setLoadedConsultingTypeGroups) + .catch((error) => { + console.log(error); + }); + }, []); + + useEffect(() => { + if (!loadedConsultingTypeGroups) { + return; + } + + setConsultingTypeGroups( + sortConsultingTypeGroups(loadedConsultingTypeGroups) + ); + setLoading(false); + + return () => { + setLoading(true); + }; + }, [loadedConsultingTypeGroups, sortConsultingTypeGroups]); + + const isFirstVisit = useIsFirstVisit(); + + if (loading) { + return null; + } + + return ( + + } + > + {consultingTypeGroups == null ? ( + + ) : ( +
+ + + ({ + value: group.id, + label: group.title + }))} + selectInputLabel={translate( + 'consultingTypes.selectGroup' + )} + handleDropdownSelect={handleGroupSelect} + useIconOption={false} + isSearchable={false} + menuPlacement="bottom" + /> +
+ {selectedGroup !== null && + selectedGroup.consultingTypes.map( + (consultingType) => ( + + handleConsultingTypeToggle( + consultingType.id + ) + } + groupChild={consultingType} + /> + ) + )} +
+ +
+ )} + + {isExplanationOverlayOpen && ( + + )} +
+ ); +}; diff --git a/src/extensions/components/consultingTypes/ConsultingTypesAgencySelection.styles.scss b/src/extensions/components/consultingTypes/ConsultingTypesAgencySelection.styles.scss new file mode 100644 index 000000000..c3d88ca86 --- /dev/null +++ b/src/extensions/components/consultingTypes/ConsultingTypesAgencySelection.styles.scss @@ -0,0 +1,41 @@ +.consultingTypesAgencySelection { + margin-top: $grid-base-three; + + &__innerWrapper { + @include breakpoint($xlarge) { + display: flex; + } + } + + &__postcode { + @include breakpoint($xlarge) { + max-width: 200px; + } + } + + &__register { + margin-top: $grid-base-three; + + button { + width: 100%; + } + + @include breakpoint($xlarge) { + margin-top: 0; + margin-left: $grid-base-two; + } + } + + &__postcodeFallback { + margin-top: $grid-base-three; + + p { + margin-bottom: 20px; + } + + a { + display: block; + text-decoration: underline; + } + } +} diff --git a/src/extensions/components/consultingTypes/ConsultingTypesAgencySelection.tsx b/src/extensions/components/consultingTypes/ConsultingTypesAgencySelection.tsx new file mode 100644 index 000000000..104fb1adb --- /dev/null +++ b/src/extensions/components/consultingTypes/ConsultingTypesAgencySelection.tsx @@ -0,0 +1,169 @@ +import * as React from 'react'; +import { useState, useEffect } from 'react'; +import { useTranslation } from 'react-i18next'; +import './ConsultingTypesAgencySelection.styles.scss'; +import { useAppConfig } from '../../../hooks/useAppConfig'; +import { VALID_POSTCODE_LENGTH } from '../../../components/agencySelection/agencySelectionHelpers'; +import { apiAgencySelection, FETCH_ERRORS } from '../../../api'; +import { parsePlaceholderString } from '../../../utils/parsePlaceholderString'; +import { InputField } from '../../../components/inputField/InputField'; +import { PinIcon } from '../../../resources/img/icons'; +import { Button, BUTTON_TYPES } from '../../../components/button/Button'; +import { Notice } from '../../../components/notice/Notice'; +import { + AgencyDataInterface, + ConsultingTypeInterface +} from '../../../globalState/interfaces'; +import { AskerRegistrationExternalAgencyOverlay } from '../../../components/profile/AskerRegistrationExternalAgencyOverlay'; +import { Text } from '../../../components/text/Text'; + +interface ConsultingTypesAgencySelectionProps { + consultingType: ConsultingTypeInterface; +} + +const ConsultingTypesAgencySelection = ({ + consultingType +}: ConsultingTypesAgencySelectionProps) => { + const settings = useAppConfig(); + const [postcode, setPostcode] = useState(''); + const [agency, setAgency] = useState(); + const [postcodeFallbackLink, setPostcodeFallbackLink] = useState(); + const [externalAgencyOverlayActive, setExternalAgencyOverlayActive] = + useState(null); + const { t: translate } = useTranslation(); + + const handlePostcodeInput = (e) => { + setPostcode(e.target.value); + setPostcodeFallbackLink(null); + }; + + const handleButton = () => { + if (agency.external) { + if (!agency.url) { + console.error( + "Agency is external but didn't provide a `url`. Failed to redirect." + ); + return; + } + setExternalAgencyOverlayActive(true); + } else { + window.location.href = `/${consultingType.slug}/registration?postcode=${postcode}`; + } + }; + + useEffect(() => { + setAgency(undefined); + + if (postcode.length !== VALID_POSTCODE_LENGTH) { + return; + } + + let isCanceled = false; + apiAgencySelection({ + postcode, + consultingType: consultingType.id + }) + .then((result) => { + if (isCanceled) return; + + if (!result || result.length === 0) { + console.error( + 'Agency selection returned an empty result. This should never happen.' + ); + return; + } + setAgency(result[0]); + }) + .catch((error) => { + if (error.message === FETCH_ERRORS.EMPTY) { + setPostcodeFallbackLink( + parsePlaceholderString(settings.postcodeFallbackUrl, { + url: consultingType.urls + .registrationPostcodeFallbackUrl, + postcode: postcode + }) + ); + } + + return null; + }); + + return () => { + isCanceled = true; + }; + }, [ + consultingType.id, + consultingType.urls.registrationPostcodeFallbackUrl, + postcode, + settings.postcodeFallbackUrl + ]); + + const handleExternalAgencyOverlayAction = () => { + setExternalAgencyOverlayActive(false); + }; + + return ( +
+
+ + }} + inputHandle={handlePostcodeInput} + /> +
+ {postcodeFallbackLink != null && ( + + + + {translate( + 'registration.agencySelection.postcode.search' + )} + + + )} + {externalAgencyOverlayActive && ( + + )} +
+ ); +}; + +export default ConsultingTypesAgencySelection; diff --git a/src/extensions/components/consultingTypes/ConsultingTypesGroupChild.styles.scss b/src/extensions/components/consultingTypes/ConsultingTypesGroupChild.styles.scss new file mode 100644 index 000000000..fa4ae97c6 --- /dev/null +++ b/src/extensions/components/consultingTypes/ConsultingTypesGroupChild.styles.scss @@ -0,0 +1,55 @@ +.consultingTypesGroupChild { + &:last-of-type:not(.consultingTypesGroupChild--expanded) { + border-bottom: 1px solid $grey-light; + } + + &:not(.consultingTypesGroupChild--expanded) { + border-top: 1px solid $grey-light; + } + + &:hover { + background-color: $background-lighter; + } + + &--expanded { + border: none; + background-color: $background-lighter; + + & + .consultingTypesGroupChild { + border-top: none; + } + + .consultingTypesGroupChild__titleLabel { + font-weight: $font-weight-bold; + color: $secondary; + } + } + + &__title { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + padding: $grid-base-three; + background: transparent; + appearance: none; + border: none; + cursor: pointer; + } + + &__titleLabel { + color: $primary; + } + + &__icon { + margin-left: $grid-base-three; + + path { + fill: $primary-4; + } + } + + &__details { + padding: 0 $grid-base-three $grid-base-three; + } +} diff --git a/src/extensions/components/consultingTypes/ConsultingTypesGroupChild.tsx b/src/extensions/components/consultingTypes/ConsultingTypesGroupChild.tsx new file mode 100644 index 000000000..69fd2a2c4 --- /dev/null +++ b/src/extensions/components/consultingTypes/ConsultingTypesGroupChild.tsx @@ -0,0 +1,63 @@ +import clsx from 'clsx'; +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; +import { ConsultingTypesGroupChildDetails } from './ConsultingTypesGroupChildDetails'; +import { ConsultingTypeGroupChildInterface } from '../../globalState/interfaces/ConsultingTypeGroupInterface'; +import { ArrowDownIcon, ArrowUpIcon } from '../../../resources/img/icons'; +import { Text } from '../../../components/text/Text'; +import './ConsultingTypesGroupChild.styles.scss'; + +interface ConsultingTypesGroupChildProps { + groupChild: ConsultingTypeGroupChildInterface; + handleToggleExpanded(): void; + isExpanded: boolean; +} + +export const ConsultingTypesGroupChild = ({ + groupChild, + handleToggleExpanded, + isExpanded +}: ConsultingTypesGroupChildProps) => { + const { t: translate } = useTranslation(['consultingTypes']); + const iconProps = { + width: 14, + className: 'consultingTypesGroupChild__icon' + }; + + return ( +
+ + {isExpanded && ( + + )} +
+ ); +}; diff --git a/src/extensions/components/consultingTypes/ConsultingTypesGroupChildDetails.tsx b/src/extensions/components/consultingTypes/ConsultingTypesGroupChildDetails.tsx new file mode 100644 index 000000000..960036f8b --- /dev/null +++ b/src/extensions/components/consultingTypes/ConsultingTypesGroupChildDetails.tsx @@ -0,0 +1,100 @@ +import * as React from 'react'; +import { useEffect, useState } from 'react'; +import ConsultingTypesAgencySelection from './ConsultingTypesAgencySelection'; +import './consultingTypesGroupChildDetails.styles.scss'; +import { useTranslation } from 'react-i18next'; +import { apiGetConsultingType } from '../../../api'; +import { LoadingIndicator } from '../../../components/loadingIndicator/LoadingIndicator'; +import { ConsultingTypeInterface } from '../../../globalState/interfaces'; +import { Text } from '../../../components/text/Text'; +import { ArrowRightIcon } from '../../../resources/img/icons'; +interface ConsultingTypesGroupChildDetailsProps { + className?: string; + consultingTypeId: number; +} + +export const ConsultingTypesGroupChildDetails = ({ + className, + consultingTypeId +}: ConsultingTypesGroupChildDetailsProps) => { + const [consultingType, setConsultingType] = + useState(); + const { t: translate } = useTranslation(['common', 'consultingTypes']); + + useEffect(() => { + let isCanceled; + + apiGetConsultingType({ consultingTypeId }).then((result) => { + if (isCanceled) return; + setConsultingType(result); + }); + return () => { + isCanceled = true; + }; + }, [consultingTypeId]); + + if (consultingType == null) { + return ( +
+ +
+ ); + } + + return ( +
+ + {consultingType.furtherInformation.url && ( + + + + + )} + +
+ {translate('consultingTypes.details.explanation.description') + .split('\n') + .map((part, index) => ( + + ))} +
+ +
+ ); +}; diff --git a/src/extensions/components/consultingTypes/ConsultingTypesOverlay.styles.scss b/src/extensions/components/consultingTypes/ConsultingTypesOverlay.styles.scss new file mode 100644 index 000000000..9bf15f8e2 --- /dev/null +++ b/src/extensions/components/consultingTypes/ConsultingTypesOverlay.styles.scss @@ -0,0 +1,12 @@ +.consultingTypesOverlay { + &__serviceExplanation { + display: grid; + grid-template-columns: auto; + padding: $grid-base-four 0 $grid-base; + row-gap: $grid-base-three; + + .text { + text-align: left; + } + } +} diff --git a/src/extensions/components/consultingTypes/ConsultingTypesOverlay.tsx b/src/extensions/components/consultingTypes/ConsultingTypesOverlay.tsx new file mode 100644 index 000000000..05448d865 --- /dev/null +++ b/src/extensions/components/consultingTypes/ConsultingTypesOverlay.tsx @@ -0,0 +1,38 @@ +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import './ConsultingTypesOverlay.styles.scss'; +import { + Overlay, + OVERLAY_FUNCTIONS +} from '../../../components/overlay/Overlay'; +import { ServiceExplanation } from '../../../components/serviceExplanation/ServiceExplanation'; +import { BUTTON_TYPES } from '../../../components/button/Button'; + +interface ConsultingTypesOverlayProps { + handleOverlay?(): void; +} + +export const ConsultingTypesOverlay = ({ + handleOverlay +}: ConsultingTypesOverlayProps) => { + const { t: translate } = useTranslation(); + return ( + + ), + buttonSet: [ + { + label: translate('consultingTypes.overlay.close'), + function: OVERLAY_FUNCTIONS.CLOSE, + type: BUTTON_TYPES.PRIMARY + } + ] + }} + handleOverlay={handleOverlay} + /> + ); +}; diff --git a/src/extensions/components/consultingTypes/consultingTypesGroupChildDetails.styles.scss b/src/extensions/components/consultingTypes/consultingTypesGroupChildDetails.styles.scss new file mode 100644 index 000000000..d7abf504a --- /dev/null +++ b/src/extensions/components/consultingTypes/consultingTypesGroupChildDetails.styles.scss @@ -0,0 +1,40 @@ +.consultingTypesGroupChildDetails { + &__loadingIndicator { + display: flex; + justify-content: center; + padding: $grid-base-three; + + // Reserve some extra space to avoid the layout shifting too much + min-height: 280px; + } + + &__details { + display: inline-flex; + align-items: flex-start; + margin-top: $grid-base-two; + } + + &__detailsIcon { + position: relative; + margin-right: $grid-base * 0.5; + top: -3px; // Align to baseline + } + + &__detailsLabel { + color: $primary; + } + + &__explanationTitle { + margin-top: $grid-base-three; + font-weight: $font-weight-bold; + } + + &__explanationDescription { + margin-top: $grid-base * 1.5; + white-space: pre-wrap; + } + + &__explanationDescriptionPart { + margin-top: $grid-base * 0.5; + } +} diff --git a/src/extensions/components/legalInformationLinks/DataProtection.tsx b/src/extensions/components/legalInformationLinks/DataProtection.tsx new file mode 100644 index 000000000..1c7723075 --- /dev/null +++ b/src/extensions/components/legalInformationLinks/DataProtection.tsx @@ -0,0 +1,160 @@ +import * as React from 'react'; +import { Stage } from '../stage/stage'; +import useDocumentTitle from '../../resources/utils/useDocumentTitle'; +import './legalPage.styles'; +import { useTranslation } from 'react-i18next'; +import { legalLinks } from '../../resources/scripts/config'; +import { Headline } from '../../../components/headline/Headline'; +import { Text } from '../../../components/text/Text'; + +export const DataProtection = () => { + const { t: translate } = useTranslation(); + useDocumentTitle(translate('profile.footer.dataprotection')); + return ( +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ ); +}; diff --git a/src/extensions/components/legalInformationLinks/Imprint.tsx b/src/extensions/components/legalInformationLinks/Imprint.tsx new file mode 100644 index 000000000..8f13fa9fd --- /dev/null +++ b/src/extensions/components/legalInformationLinks/Imprint.tsx @@ -0,0 +1,64 @@ +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; +import { ReactComponent as BMILogo } from './bmi-foerder-logo.svg'; +import { ReactComponent as MBELogo } from './mbe-logo.svg'; +import { ReactComponent as GluecksspiraleLogo } from './gluecksspirale-logo.svg'; +import useDocumentTitle from '../../resources/utils/useDocumentTitle'; +import { Stage } from '../stage/stage'; +import './legalPage.styles'; +import { Headline } from '../../../components/headline/Headline'; +import { Text } from '../../../components/text/Text'; + +export const Imprint = () => { + const { t: translate } = useTranslation(); + useDocumentTitle(translate('profile.footer.imprint')); + return ( +
+ +
+ + + + + + + + + + + + + +
+
+ +
+
+ +
+
+ +
+
+
+
+ ); +}; diff --git a/src/extensions/components/legalInformationLinks/bmi-foerder-logo.svg b/src/extensions/components/legalInformationLinks/bmi-foerder-logo.svg new file mode 100644 index 000000000..2ec4c7d5b --- /dev/null +++ b/src/extensions/components/legalInformationLinks/bmi-foerder-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/extensions/components/legalInformationLinks/gluecksspirale-logo.svg b/src/extensions/components/legalInformationLinks/gluecksspirale-logo.svg new file mode 100644 index 000000000..a10064a09 --- /dev/null +++ b/src/extensions/components/legalInformationLinks/gluecksspirale-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/extensions/components/legalInformationLinks/legalPage.styles.scss b/src/extensions/components/legalInformationLinks/legalPage.styles.scss new file mode 100644 index 000000000..c392c691a --- /dev/null +++ b/src/extensions/components/legalInformationLinks/legalPage.styles.scss @@ -0,0 +1,50 @@ +.legalPageWrapper { + .stageLayout__content { + padding-top: $grid-base-six; + + & > * { + width: 100%; + text-align: left; + } + } + + .headline--3, + .text { + margin-bottom: $grid-base-four; + } + + .headline--4 { + margin-bottom: $grid-base-three; + } + + .text { + margin-top: 16px; + } + + .legalInformation__logos { + svg { + width: 100%; + } + } + + ol, + ul { + li { + margin-top: $grid-base; + } + } + + .headline--5 + .headline--5 { + margin-top: 22px; + } + + table { + tr { + th, + td { + border: 1px solid $grey-light; + padding: $grid-base $grid-base-three $grid-base 10px; + } + } + } +} diff --git a/src/extensions/components/legalInformationLinks/mbe-logo.svg b/src/extensions/components/legalInformationLinks/mbe-logo.svg new file mode 100644 index 000000000..ea3e5887c --- /dev/null +++ b/src/extensions/components/legalInformationLinks/mbe-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/extensions/components/registration/Registration.tsx b/src/extensions/components/registration/Registration.tsx new file mode 100644 index 000000000..e75ee0d13 --- /dev/null +++ b/src/extensions/components/registration/Registration.tsx @@ -0,0 +1,342 @@ +import { Typography, Link, Button, Box } from '@mui/material'; +import * as React from 'react'; +import { useState, useEffect, useContext, useCallback } from 'react'; +import { StageLayout } from '../../../components/stageLayout/StageLayout'; +import useIsFirstVisit from '../../../utils/useIsFirstVisit'; +import { ReactComponent as HelloBannerIcon } from '../../../resources/img/illustrations/hello-banner.svg'; +import { StepBar } from './stepBar/StepBar'; +import { AccountData } from './accountData/AccountData'; +import { ZipcodeInput } from './zipcodeInput/ZipcodeInput'; +import { AgencySelection } from './agencySelection/AgencySelection'; +import { TopicSelection } from './topicSelection/TopicSelection'; +import { useHistory, useLocation } from 'react-router-dom'; +import { useTranslation } from 'react-i18next'; +import { Link as RouterLink } from 'react-router-dom'; +import { WelcomeScreen } from './welcomeScreen/WelcomeScreen'; +import { + RegistrationContext, + TenantContext, + registrationSessionStorageKey +} from '../../../globalState'; +import { Helmet } from 'react-helmet'; +import { GlobalComponentContext } from '../../../globalState/provider/GlobalComponentContext'; +import { + OVERLAY_FUNCTIONS, + Overlay, + OverlayItem +} from '../../../components/overlay/Overlay'; +import { redirectToApp } from '../../../components/registration/autoLogin'; +import { BUTTON_TYPES } from '../../../components/button/Button'; +import { PreselectionBox } from './preselectionBox/PreselectionBox'; +import { endpoints } from '../../../resources/scripts/endpoints'; +import { apiPostRegistration } from '../../../api'; +import { useAppConfig } from '../../../hooks/useAppConfig'; +import { REGISTRATION_DATA_VALIDATION } from './registrationDataValidation'; + +export const Registration = () => { + const { t } = useTranslation(['common', 'consultingTypes', 'agencies']); + const settings = useAppConfig(); + const isFirstVisit = useIsFirstVisit(); + const { Stage } = useContext(GlobalComponentContext); + const { + disabledNextButton, + setDisabledNextButton, + updateSessionStorageWithPreppedData, + refreshSessionStorageRegistrationData, + sessionStorageRegistrationData, + availableSteps, + dataPrepForSessionStorage, + consultant, + isConsultantLink + } = useContext(RegistrationContext); + const { tenant } = useContext(TenantContext); + const [currentStep, setCurrentStep] = useState(1); + const [redirectOverlayActive, setRedirectOverlayActive] = + useState(false); + const location = useLocation(); + const history = useHistory(); + const handleOverlayAction = (buttonFunction: string) => { + if (buttonFunction === OVERLAY_FUNCTIONS.REDIRECT_WITH_BLUR) { + redirectToApp(); + } + }; + const overlayItemRegistrationSuccess: OverlayItem = { + illustrationStyle: 'large', + svg: HelloBannerIcon, + headline: t('registration.overlay.success.headline'), + copy: t('registration.overlay.success.copy'), + buttonSet: [ + { + label: t('registration.overlay.success.button'), + function: OVERLAY_FUNCTIONS.REDIRECT_WITH_BLUR, + type: BUTTON_TYPES.AUTO_CLOSE + } + ] + }; + + const updateCurrentStep = () => { + const currentLocation = location?.pathname?.replace( + '/registration', + '' + ); + const step = availableSteps.findIndex( + (step) => step?.urlSuffix === currentLocation + ); + setCurrentStep(step === -1 ? 0 : step); + }; + + const checkForStepsWithMissingMandatoryFields = (): number[] => { + if (currentStep > 0) { + return availableSteps.reduce( + (missingSteps, step, currentIndex) => { + if ( + step?.mandatoryFields?.some( + (mandatoryField) => + sessionStorageRegistrationData?.[ + mandatoryField + ] === undefined + ) + ) { + return [...missingSteps, currentIndex]; + } + return missingSteps; + }, + [] + ); + } + return []; + }; + + const onNextClick = () => { + updateSessionStorageWithPreppedData(); + }; + + useEffect(() => { + setDisabledNextButton(true); + updateCurrentStep(); + refreshSessionStorageRegistrationData(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [location]); + + useEffect(() => { + // Check if mandatory fields from previous steps are missing + const missingPreviousSteps = checkForStepsWithMissingMandatoryFields() + .sort() + .filter((missingStep) => missingStep < currentStep); + + if (missingPreviousSteps.length > 0) { + history.push( + `/registration${ + availableSteps[missingPreviousSteps[0]]?.urlSuffix + }${location.search}` + ); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [currentStep, availableSteps, sessionStorageRegistrationData]); + + const onRegisterClick = useCallback(() => { + const registrationData = { + ...sessionStorageRegistrationData, + ...dataPrepForSessionStorage, + agencyId: sessionStorageRegistrationData.agencyId.toString(), + postcode: sessionStorageRegistrationData.zipcode, + termsAccepted: 'true', + preferredLanguage: 'de', + // ConsultingType and mainTopicId are identical for the MVP + consultingType: sessionStorageRegistrationData.mainTopicId, + ...(isConsultantLink + ? { consultantId: consultant?.consultantId } + : {}) + }; + + if ( + Object.keys(REGISTRATION_DATA_VALIDATION).every((item) => + REGISTRATION_DATA_VALIDATION[item].validation( + registrationData[item] + ) + ) + ) { + apiPostRegistration( + endpoints.registerAsker, + registrationData, + settings.multitenancyWithSingleDomainEnabled, + tenant + ).then(() => { + sessionStorage.removeItem(registrationSessionStorageKey); + setRedirectOverlayActive(true); + }); + } + }, [ + consultant?.consultantId, + dataPrepForSessionStorage, + isConsultantLink, + sessionStorageRegistrationData, + settings.multitenancyWithSingleDomainEnabled, + tenant + ]); + + return ( + <> + } + showRegistrationInfoDrawer={true} + > + + {availableSteps[currentStep]?.component === 'welcome' ? ( + + ) : ( + <> + + + +
+ + {t('registration.headline')} + + + {} + + + {availableSteps[currentStep]?.component === + 'topicSelection' && ( + + )} + {availableSteps[currentStep]?.component === + 'zipcode' && } + {availableSteps[currentStep]?.component === + 'agencySelection' && ( + + )} + {availableSteps[currentStep]?.component === + 'accountData' && } + + {availableSteps[currentStep]?.component !== + 'welcome' && ( + + + {currentStep > 0 && ( + + {t('registration.back')} + + )} + {currentStep === + availableSteps.length - 1 ? ( + + ) : ( + + )} + + + )} + + + )} +
+
+ {redirectOverlayActive && ( + + )} + + ); +}; diff --git a/src/extensions/components/registration/accountData/AccountData.tsx b/src/extensions/components/registration/accountData/AccountData.tsx new file mode 100644 index 000000000..cf76ecaef --- /dev/null +++ b/src/extensions/components/registration/accountData/AccountData.tsx @@ -0,0 +1,240 @@ +import { + Checkbox, + FormGroup, + InputAdornment, + Typography, + Link, + FormControlLabel +} from '@mui/material'; +import * as React from 'react'; +import { useState, useContext, useEffect } from 'react'; +import { useTranslation } from 'react-i18next'; +import PersonIcon from '@mui/icons-material/Person'; +import LockIcon from '@mui/icons-material/Lock'; +import { Input } from '../../../../components/input/input'; +import VisibilityIcon from '@mui/icons-material/Visibility'; +import { + hasMixedLetters, + hasNumber, + hasSpecialChar +} from '../../../../utils/validateInputValue'; +import { LegalLinksContext } from '../../../../globalState/provider/LegalLinksProvider'; +import { RegistrationContext } from '../../../../globalState'; +import { apiGetIsUsernameAvailable } from '../../../../api/apiGetIsUsernameAvailable'; +import { REGISTRATION_DATA_VALIDATION } from '../registrationDataValidation'; +import LegalLinks from '../../../../components/legalLinks/LegalLinks'; + +export const passwordCriteria = [ + { + info: 'registration.account.password.criteria1', + validation: (val) => val.length > 8 + }, + { + info: 'registration.account.password.criteria2', + validation: (val) => hasNumber(val) + }, + { + info: 'registration.account.password.criteria3', + validation: (val) => hasMixedLetters(val) + }, + { + info: 'registration.account.password.criteria4', + validation: (val) => hasSpecialChar(val) + } +]; + +export const AccountData = () => { + const legalLinks = useContext(LegalLinksContext); + const { t } = useTranslation(); + const [password, setPassword] = useState(''); + const [repeatPassword, setRepeatPassword] = useState(''); + const [isPasswordVisible, setIsPasswordVisible] = useState(); + const [dataProtectionChecked, setDataProtectionChecked] = + useState(); + const [isRepeatPasswordVisible, setIsRepeatPasswordVisible] = + useState(); + const [username, setUsername] = useState(''); + const [isUsernameAvailable, setIsUsernameAvailable] = + useState(true); + const { setDisabledNextButton, setDataForSessionStorage } = + useContext(RegistrationContext); + + useEffect(() => { + if ( + isUsernameAvailable && + REGISTRATION_DATA_VALIDATION.username.validation(username) && + REGISTRATION_DATA_VALIDATION.password.validation(password) && + password === repeatPassword && + dataProtectionChecked + ) { + setDisabledNextButton(false); + setDataForSessionStorage({ username, password }); + } else { + setDisabledNextButton(true); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [username, password, repeatPassword, dataProtectionChecked]); + + return ( + <> + + {t('registration.account.headline')} + + + {t('registration.account.subline')} + + + + + } + onInputChange={(val: string) => { + setUsername(val); + }} + value={username} + label={t('registration.account.username.label')} + info={t('registration.account.username.info')} + errorMessage={ + isUsernameAvailable + ? t('registration.account.username.error.available') + : t('registration.account.username.error.unavailable') + } + successMesssage={t('registration.account.username.success')} + isValueValid={async (val: string) => { + if (val.length < 5) { + setIsUsernameAvailable(true); + return false; + } else { + return await apiGetIsUsernameAvailable(val) + .then(() => { + setIsUsernameAvailable(false); + return false; + }) + .catch(() => { + setIsUsernameAvailable(true); + return true; + }); + } + }} + /> + + + + } + endAdornment={ + + { + setIsPasswordVisible(!isPasswordVisible); + }} + tabIndex={0} + onKeyDown={(e) => { + if (e.key === 'Enter') { + setIsPasswordVisible(!isPasswordVisible); + } + }} + /> + + } + onInputChange={(val: string) => { + setPassword(val); + }} + value={password} + label={t('registration.account.password.label')} + multipleCriteria={passwordCriteria} + /> + + + + } + endAdornment={ + + { + setIsRepeatPasswordVisible( + !isRepeatPasswordVisible + ); + }} + onKeyDown={(e) => { + if (e.key === 'Enter') { + setIsRepeatPasswordVisible( + !isRepeatPasswordVisible + ); + } + }} + /> + + } + onInputChange={(val: string) => { + setRepeatPassword(val); + }} + value={repeatPassword} + label={t('registration.account.repeatPassword.label')} + isValueValid={async (val) => + val === password && password.length > 0 + } + errorMessage={t('registration.account.repeatPassword.error')} + successMesssage={t( + 'registration.account.repeatPassword.success' + )} + /> + + { + setDataProtectionChecked(!dataProtectionChecked); + }} + sx={{ alignItems: 'flex-start' }} + control={ + + } + label={ + + legalLink.registration} + legalLinks={legalLinks} + params={{ aid: null }} + prefix={t( + 'registration.dataProtection.label.prefix' + )} + lastDelimiter={t( + 'registration.dataProtection.label.and' + )} + suffix={t( + 'registration.dataProtection.label.suffix' + )} + > + {(label, url) => ( + + {label} + + )} + + + } + /> + + + ); +}; diff --git a/src/extensions/components/registration/accountData/accountData.stories.ts b/src/extensions/components/registration/accountData/accountData.stories.ts new file mode 100644 index 000000000..6f681bde5 --- /dev/null +++ b/src/extensions/components/registration/accountData/accountData.stories.ts @@ -0,0 +1,10 @@ +import { Meta } from '@storybook/react'; + +import { AccountData } from './AccountData'; + +export default { + title: 'Registration/AccountData', + component: AccountData +} as Meta; + +export const Default = {}; diff --git a/src/extensions/components/registration/agencySelection/AgencyLanguages.tsx b/src/extensions/components/registration/agencySelection/AgencyLanguages.tsx new file mode 100644 index 000000000..32d6d9f15 --- /dev/null +++ b/src/extensions/components/registration/agencySelection/AgencyLanguages.tsx @@ -0,0 +1,42 @@ +import { Typography } from '@mui/material'; +import * as React from 'react'; +import { useEffect, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { apiAgencyLanguages } from '../../../../api/apiAgencyLanguages'; +import { LanguagesContext } from '../../../../globalState/provider/LanguagesProvider'; + +interface AgencyLanguagesProps { + agencyId?: number; +} + +export const AgencyLanguages = ({ agencyId }: AgencyLanguagesProps) => { + const { t } = useTranslation(); + const [languages, setLanguages] = useState(['de']); + const { fixed: fixedLanguages } = React.useContext(LanguagesContext); + + useEffect(() => { + if (agencyId !== undefined) { + apiAgencyLanguages(agencyId, false).then((res) => { + const allLanguages = [...fixedLanguages, ...res.languages]; + setLanguages( + allLanguages + .filter((element, index) => { + return allLanguages.indexOf(element) === index; + }) + .sort() + ); + }); + } + }, [agencyId, fixedLanguages]); + + return ( + + {languages.map( + (lang, index) => + `${index !== 0 ? ' |' : ''} ${t( + `languages.${lang}` + )} (${lang.toUpperCase()})` + )} + + ); +}; diff --git a/src/extensions/components/registration/agencySelection/AgencySelection.tsx b/src/extensions/components/registration/agencySelection/AgencySelection.tsx new file mode 100644 index 000000000..ca9e6b66f --- /dev/null +++ b/src/extensions/components/registration/agencySelection/AgencySelection.tsx @@ -0,0 +1,89 @@ +import * as React from 'react'; +import { useState, useEffect, VFC, useContext } from 'react'; +import { AgencySelectionResults } from './AgencySelectionResults'; +import { apiAgencySelection } from '../../../../api'; +import { RegistrationContext } from '../../../../globalState'; +import { AgencyDataInterface } from '../../../../globalState/interfaces'; +import { Typography } from '@mui/material'; +import { useTranslation } from 'react-i18next'; + +export const AgencySelection: VFC<{ + nextStepUrl: string; + onNextClick(): void; +}> = ({ nextStepUrl, onNextClick }) => { + const { + sessionStorageRegistrationData, + isConsultantLink, + consultant, + setDataForSessionStorage + } = useContext(RegistrationContext); + + const { t } = useTranslation(); + const [headlineZipcode, setHeadlineZipcode] = useState(''); + const [isLoading, setIsLoading] = useState(false); + const [results, setResults] = useState( + undefined + ); + useEffect(() => { + if (isConsultantLink) { + setResults( + consultant?.agencies?.filter((agency) => + agency?.topicIds?.includes( + sessionStorageRegistrationData?.mainTopicId + ) + ) + ); + } else if (sessionStorageRegistrationData?.zipcode?.length === 5) { + setHeadlineZipcode(sessionStorageRegistrationData.zipcode); + setResults(undefined); + (async () => { + setIsLoading(true); + try { + const agencyResponse = await apiAgencySelection({ + postcode: sessionStorageRegistrationData.zipcode, + // We will keep consultingTypeId identical to mainTopicId + consultingType: + sessionStorageRegistrationData.mainTopicId || + undefined, + topicId: + sessionStorageRegistrationData.mainTopicId || + undefined + }); + + setResults(agencyResponse); + if ( + agencyResponse.every( + (agency) => + agency.id !== + sessionStorageRegistrationData.agencyId + ) + ) { + setDataForSessionStorage({ agencyId: undefined }); + } + } catch { + setResults([]); + } + setIsLoading(false); + })(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [sessionStorageRegistrationData, consultant]); + + return ( + <> + + {(isConsultantLink && consultant?.agencies?.length === 1) || + results?.length === 1 + ? t('registration.agency.consultantheadline') + : t('registration.agency.headline')} + + + + ); +}; diff --git a/src/extensions/components/registration/agencySelection/AgencySelectionResults.tsx b/src/extensions/components/registration/agencySelection/AgencySelectionResults.tsx new file mode 100644 index 000000000..2ae005206 --- /dev/null +++ b/src/extensions/components/registration/agencySelection/AgencySelectionResults.tsx @@ -0,0 +1,418 @@ +import { + Typography, + FormControlLabel, + FormControl, + Radio, + RadioGroup, + Box, + Button, + Link +} from '@mui/material'; +import * as React from 'react'; +import { useContext, useEffect, useState } from 'react'; +import TaskAltIcon from '@mui/icons-material/TaskAlt'; +import NoResultsIllustration from '../../../../resources/img/illustrations/no-results.svg'; +import ConsultantIllustration from '../../../../resources/img/illustrations/consultant-found.svg'; +import OpenInNewIcon from '@mui/icons-material/OpenInNew'; +import { Loading } from '../../../../components/app/Loading'; +import { useTranslation } from 'react-i18next'; +import { RegistrationContext } from '../../../../globalState'; +import { AgencyDataInterface } from '../../../../globalState/interfaces'; +import { AgencyLanguages } from './AgencyLanguages'; +import { parsePlaceholderString } from '../../../../utils/parsePlaceholderString'; +import { useAppConfig } from '../../../../hooks/useAppConfig'; +import { VFC } from 'react'; +import { MetaInfo } from '../metaInfo/MetaInfo'; +import { REGISTRATION_DATA_VALIDATION } from '../registrationDataValidation'; + +interface AgencySelectionResultsProps { + isLoading?: boolean; + zipcode?: string; + results?: AgencyDataInterface[]; + nextStepUrl: string; + onNextClick(): void; +} + +export const AgencySelectionResults: VFC = ({ + isLoading, + zipcode, + results, + nextStepUrl, + onNextClick +}) => { + const { t } = useTranslation(); + const settings = useAppConfig(); + const { + setDisabledNextButton, + setDataForSessionStorage, + sessionStorageRegistrationData, + isConsultantLink + } = useContext(RegistrationContext); + + const [agencyId, setAgencyId] = useState( + sessionStorageRegistrationData?.agencyId + ); + + useEffect(() => { + if ( + // only external agencies + results?.length > 0 && + results?.every((agency) => agency.external) + ) { + setAgencyId(undefined); + setDisabledNextButton(true); + setDataForSessionStorage({ + agencyId: undefined + }); + return; + } + if ( + // only one agency + results?.length === 1 && + results?.every((agency) => !agency.external) + ) { + setAgencyId(results[0].id); + setDisabledNextButton(false); + setDataForSessionStorage({ + agencyId: results[0].id + }); + return; + } + if ( + // invalid agencyId, needs to be removed + agencyId && + results?.length === 0 + ) { + setDisabledNextButton(true); + setDataForSessionStorage({ + agencyId: undefined + }); + return; + } + if ( + // valid agencyId + REGISTRATION_DATA_VALIDATION.agencyId.validation( + agencyId?.toString() + ) + ) { + setDisabledNextButton(false); + setDataForSessionStorage({ + agencyId: agencyId + }); + return; + } + }, [ + agencyId, + results, + setDataForSessionStorage, + setDisabledNextButton, + zipcode + ]); + + return ( + <> + {isLoading && ( + + + + )} + {!!results && !isLoading && !isConsultantLink && ( + + {t('registration.agency.result.headline') + ' ' + zipcode}: + + )} + {/* only external results */} + {results?.length > 0 && + results?.every((agency) => agency.external) && ( + + + + {t( + 'registration.agency.result.external.headline' + )} + + + {t( + 'registration.agency.result.external.subline' + )} + + {results?.[0]?.url && ( + + )} + + + + )} + {/* no Results */} + {results?.length === 0 && ( + + + + {t('registration.agency.noresult.headline')} + + + {t('registration.agency.noresult.subline')} + + + + + + )} + {/* one Result */} + {results?.length === 1 && + !results?.every((agency) => { + return agency.external; + }) && ( + + + + + } + icon={} + /> + } + label={ + + + {results?.[0].name || ''} + + + {t( + 'registration.agency.result.languages' + )} + + + + } + /> + {results?.[0].description && ( + + setAgencyId(undefined) + } + backButtonLabel={t( + 'registration.agency.infoOverlay.backButtonLabel' + )} + nextButtonLabel={t( + 'registration.agency.infoOverlay.nextButtonLabel' + )} + nextStepUrl={nextStepUrl} + onNextClick={onNextClick} + onOverlayOpen={() => { + setDataForSessionStorage({ + agencyId: results?.[0].id + }); + setAgencyId(results?.[0].id); + }} + /> + )} + + + + )} + {/* more Results */} + {results?.length > 1 && + !results?.every((agency) => agency.external) && ( + + + {results?.map((agency, index) => ( + + { + setDisabledNextButton(false); + setAgencyId(agency.id); + setDataForSessionStorage({ + agencyId: agency.id + }); + }} + sx={{ + alignItems: 'flex-start' + }} + value={agency.id} + control={ + + } + label={ + + + {agency.name} + + + {t( + 'registration.agency.result.languages' + )} + + + + + } + /> + {agency.description && ( + + setAgencyId(undefined) + } + backButtonLabel={t( + 'registration.agency.infoOverlay.backButtonLabel' + )} + nextButtonLabel={t( + 'registration.agency.infoOverlay.nextButtonLabel' + )} + nextStepUrl={nextStepUrl} + onNextClick={onNextClick} + onOverlayOpen={() => { + setDataForSessionStorage({ + agencyId: agency.id + }); + setAgencyId(agency.id); + }} + /> + )} + + ))} + + + )} + + ); +}; diff --git a/src/extensions/components/registration/agencySelection/agencySelection.cy.tsx b/src/extensions/components/registration/agencySelection/agencySelection.cy.tsx new file mode 100644 index 000000000..d1c65e786 --- /dev/null +++ b/src/extensions/components/registration/agencySelection/agencySelection.cy.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { AgencySelection } from './AgencySelection'; +import { endpoints } from '../../../../resources/scripts/endpoints'; +import { RegistrationContext } from '../../../../globalState'; +import { BrowserRouter as Router } from 'react-router-dom'; + +it('Get results for zipcode', () => { + cy.fixture('service.agencies.json').then((data) => { + cy.intercept(new RegExp(`${endpoints.agencyServiceBase}*`), data).as( + 'agencies' + ); + }); + cy.mount( + + {}, + setDataForSessionStorage: () => {}, + isConsultantLink: false, + consultant: null, + sessionStorageRegistrationData: { + zipcode: '12345', + username: null, + agencyId: null, + mainTopicId: null, + password: null + } + }} + > + {}} /> + + + ); + cy.get('p').should('contains.text', 'name'); +}); diff --git a/src/extensions/components/registration/agencySelection/agencySelection.stories.ts b/src/extensions/components/registration/agencySelection/agencySelection.stories.ts new file mode 100644 index 000000000..8d7b42555 --- /dev/null +++ b/src/extensions/components/registration/agencySelection/agencySelection.stories.ts @@ -0,0 +1,12 @@ +import { Meta } from '@storybook/react'; + +import { AgencySelection } from './AgencySelection'; + +export default { + title: 'Registration/AgencySelection', + component: AgencySelection +} as Meta; + +export const Default = { + args: {} +}; diff --git a/src/extensions/components/registration/infoDrawer/InfoDrawer.tsx b/src/extensions/components/registration/infoDrawer/InfoDrawer.tsx new file mode 100644 index 000000000..c10a35e00 --- /dev/null +++ b/src/extensions/components/registration/infoDrawer/InfoDrawer.tsx @@ -0,0 +1,195 @@ +import * as React from 'react'; +import { useState, useContext, useEffect } from 'react'; +import { useTranslation } from 'react-i18next'; +import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; +import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp'; +import { Box, SwipeableDrawer, Typography } from '@mui/material'; +import { RegistrationContext } from '../../../../globalState'; +import { PreselectionError } from '../preselectionError/PreselectionError'; + +interface InfoDrawerProps { + trigger?: boolean; +} + +export const InfoDrawer = ({ trigger }: InfoDrawerProps) => { + const { + preselectedAgency, + preselectedTopicName, + hasAgencyError, + hasConsultantError, + hasTopicError, + isConsultantLink, + preselectedData + } = useContext(RegistrationContext); + const { t } = useTranslation(); + const drawerBleeding = 92; + const [isDrawerOpen, setIsDrawerOpen] = useState(false); + const [topicName, setTopicName] = useState('-'); + const [agencyName, setAgencyName] = useState('-'); + + const toggleDrawer = (event: React.KeyboardEvent | React.MouseEvent) => { + if ( + event?.type === 'keydown' && + ((event as React.KeyboardEvent).key === 'Tab' || + (event as React.KeyboardEvent).key === 'Shift') + ) { + return; + } + + setIsDrawerOpen(!isDrawerOpen); + }; + + useEffect(() => { + if (preselectedTopicName) { + setTopicName(preselectedTopicName); + } + if (preselectedAgency) { + setAgencyName(preselectedAgency.name); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [preselectedAgency, preselectedTopicName]); + + if ( + !(preselectedData.includes('tid') || preselectedData.includes('aid')) && + !isConsultantLink + ) { + return null; + } + + return ( + <> + .MuiPaper-root': { + top: -drawerBleeding, + overflow: 'visible' + }, + 'top': 0 + }} + anchor="top" + onClose={() => setIsDrawerOpen(false)} + onOpen={() => setIsDrawerOpen(true)} + open={isDrawerOpen} + ModalProps={{ + keepMounted: true + }} + > + { + if (e.key === 'Enter') { + toggleDrawer(e); + } + }} + tabIndex={0} + sx={{ + 'px': '16px', + 'pt': '16px', + 'mt': trigger ? 0 : '48px', + 'position': 'relative', + 'borderBottomLeftRadius': 8, + 'borderBottomRightRadius': 8, + 'visibility': 'visible', + 'right': 0, + 'left': 0, + 'width': '100vw', + 'backgroundColor': 'primary.main', + 'color': 'white', + 'animationName': 'slideIn', + 'animationDuration': '0.8s', + 'animationDelay': '0.3s', + 'animationFillMode': 'forwards', + '@keyframes slideIn': { + '0%': { + top: 0 + }, + '100%': { + top: drawerBleeding + } + } + }} + > + + {hasConsultantError ? ( + + ) : ( + <> + + {t('registration.topic.summary')} + + {hasTopicError && topicName === '-' ? ( + + ) : ( + + {topicName} + + )} + + {t('registration.agency.summary')} + + {hasAgencyError && agencyName === '-' ? ( + + ) : ( + + {agencyName} + + )} + + )} + + + {isDrawerOpen ? ( + + ) : ( + + )} + + + + + ); +}; diff --git a/src/extensions/components/registration/metaInfo/MetaInfo.tsx b/src/extensions/components/registration/metaInfo/MetaInfo.tsx new file mode 100644 index 000000000..9459cc006 --- /dev/null +++ b/src/extensions/components/registration/metaInfo/MetaInfo.tsx @@ -0,0 +1,144 @@ +import { Box, Tooltip, Button, Typography, Drawer } from '@mui/material'; +import * as React from 'react'; +import { VFC, useState } from 'react'; +import InfoIcon from '@mui/icons-material/Info'; +import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos'; +import { useTranslation } from 'react-i18next'; +import { Link as RouterLink } from 'react-router-dom'; + +export const MetaInfo: VFC<{ + description: string; + onOverlayOpen(): void; + onOverlayClose(): void; + nextStepUrl: string; + onNextClick(): void; + backButtonLabel: string; + nextButtonLabel: string; + headline: string; +}> = ({ + description, + onOverlayClose, + onNextClick, + nextStepUrl, + onOverlayOpen, + nextButtonLabel, + backButtonLabel, + headline +}) => { + const [isInfoOverlayOpen, setIsInfoOverlayOpen] = useState(false); + const { t } = useTranslation(); + + return ( + <> + + + + { + onOverlayOpen(); + setIsInfoOverlayOpen(true); + }} + onKeyDown={(e) => { + if (e.key === 'Enter') { + onOverlayOpen(); + setIsInfoOverlayOpen(true); + } + }} + tabIndex={0} + sx={{ + display: { + xs: 'inline', + md: 'none' + }, + cursor: 'pointer', + p: '9px', + width: '42px', + height: '42px' + }} + /> + theme.zIndex.drawer + 2 }} + anchor="left" + open={isInfoOverlayOpen} + onClose={() => { + onOverlayClose(); + setIsInfoOverlayOpen(false); + }} + > + + { + if (e.key === 'Enter') { + onOverlayClose(); + setIsInfoOverlayOpen(false); + } + }} + tabIndex={0} + onClick={() => { + onOverlayClose(); + setIsInfoOverlayOpen(false); + }} + /> + + {headline} + + {description} + + + + + + ); +}; diff --git a/src/extensions/components/registration/preselectionBox/PreselectionBox.tsx b/src/extensions/components/registration/preselectionBox/PreselectionBox.tsx new file mode 100644 index 000000000..c74a7b7fd --- /dev/null +++ b/src/extensions/components/registration/preselectionBox/PreselectionBox.tsx @@ -0,0 +1,161 @@ +import * as React from 'react'; +import { useContext, useState, useEffect, VFC } from 'react'; +import { useTranslation } from 'react-i18next'; +import { Box, Typography } from '@mui/material'; +import { RegistrationContext } from '../../../../globalState'; +import { PreselectionDrawer } from '../preselectionDrawer/preselectionDrawer'; +import ReportProblemIcon from '@mui/icons-material/ReportProblem'; +import { useResponsive } from '../../../../hooks/useResponsive'; + +export const PreselectionBox: VFC<{ + hasDrawer?: boolean; +}> = ({ hasDrawer = false }) => { + const { + preselectedAgency, + preselectedTopicName, + isConsultantLink, + hasConsultantError, + hasTopicError, + hasAgencyError, + preselectedData + } = useContext(RegistrationContext); + const { t } = useTranslation(); + const [topicName, setTopicName] = useState('-'); + const [agencyName, setAgencyName] = useState('-'); + const { fromM } = useResponsive(); + + useEffect(() => { + if (preselectedTopicName) { + setTopicName(preselectedTopicName); + } else { + setTopicName('-'); + } + if (preselectedAgency) { + setAgencyName(preselectedAgency?.name); + } else { + setAgencyName('-'); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [preselectedAgency, preselectedTopicName]); + + if ( + !(preselectedData.includes('tid') || preselectedData.includes('aid')) && + (!isConsultantLink || !hasDrawer) + ) { + return null; + } + + return ( + <> + + {isConsultantLink && + (hasConsultantError ? ( + + + ) : ( + + {' '} + {t('registration.consultantlink')} + + ))} + {(preselectedTopicName || hasTopicError) && + !isConsultantLink && ( + <> + + {t('registration.topic.summary')} + + {hasTopicError && !preselectedTopicName ? ( + + <> + + ) : ( + + {preselectedTopicName} + + )} + + )} + {(preselectedAgency || hasAgencyError) && !isConsultantLink && ( + <> + + {t('registration.agency.summary')} + + {hasAgencyError && !preselectedAgency ? ( + + <> + + ) : ( + {preselectedAgency?.name} + )} + + )} + + {hasDrawer && !fromM && ( + + )} + + ); +}; diff --git a/src/extensions/components/registration/preselectionDrawer/loader.svg b/src/extensions/components/registration/preselectionDrawer/loader.svg new file mode 100644 index 000000000..26bcbb8e0 --- /dev/null +++ b/src/extensions/components/registration/preselectionDrawer/loader.svg @@ -0,0 +1,35 @@ + + + B5ABEB99-26F0-4259-A9A3-296829836161 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/extensions/components/registration/preselectionDrawer/logo.svg b/src/extensions/components/registration/preselectionDrawer/logo.svg new file mode 100644 index 000000000..659229425 --- /dev/null +++ b/src/extensions/components/registration/preselectionDrawer/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/extensions/components/registration/preselectionDrawer/preselectionDrawer.tsx b/src/extensions/components/registration/preselectionDrawer/preselectionDrawer.tsx new file mode 100644 index 000000000..a6746ada9 --- /dev/null +++ b/src/extensions/components/registration/preselectionDrawer/preselectionDrawer.tsx @@ -0,0 +1,218 @@ +import * as React from 'react'; +import { useState, VFC, useContext } from 'react'; +import { Box, Drawer, Typography, Button } from '@mui/material'; +import { ReactComponent as Loader } from './loader.svg'; +import { ReactComponent as Logo } from './logo.svg'; +import { useTranslation } from 'react-i18next'; +import { PreselectionError } from '../preselectionError/PreselectionError'; +import { RegistrationContext } from '../../../../globalState'; + +export const PreselectionDrawer: VFC<{ + topicName: string; + agencyName: string; +}> = ({ topicName, agencyName }) => { + const { + hasTopicError, + hasAgencyError, + hasConsultantError, + isConsultantLink + } = useContext(RegistrationContext); + const { t } = useTranslation(); + const [loading, isLoading] = useState(true); + const [isOverlayDrawerOpen, setIsOverlayDrawerOpen] = + useState(true); + + setTimeout(() => { + isLoading(false); + }, 3000); + + return ( + theme.zIndex.drawer + 2, + '> .MuiPaper-root': { + top: 0, + height: '100vh', + overflow: 'scroll' + } + }} + > + + + + + {loading && ( + + + + )} + + {t('app.stage.title')} + + + {t('app.claim')} + + {!loading && ( + + {isConsultantLink ? ( + hasConsultantError ? ( + + ) : ( + + {t('registration.consultantlink')} + + ) + ) : ( + <> + + {t('registration.topic.summary')} + + {hasTopicError && topicName === '-' ? ( + + ) : ( + + {topicName} + + )} + + {t('registration.agency.summary')} + + {hasAgencyError && agencyName === '-' ? ( + + ) : ( + + {agencyName} + + )} + + )} + + + )} + + + ); +}; diff --git a/src/extensions/components/registration/preselectionError/PreselectionError.tsx b/src/extensions/components/registration/preselectionError/PreselectionError.tsx new file mode 100644 index 000000000..1dec25ae4 --- /dev/null +++ b/src/extensions/components/registration/preselectionError/PreselectionError.tsx @@ -0,0 +1,31 @@ +import * as React from 'react'; +import { VFC } from 'react'; +import { Box, Typography } from '@mui/material'; +import ReportProblemIcon from '@mui/icons-material/ReportProblem'; + +export const PreselectionError: VFC<{ + errorMessage: string; +}> = ({ errorMessage }) => { + return ( + + + + + ); +}; diff --git a/src/extensions/components/registration/registrationDataValidation.ts b/src/extensions/components/registration/registrationDataValidation.ts new file mode 100644 index 000000000..9b862acaa --- /dev/null +++ b/src/extensions/components/registration/registrationDataValidation.ts @@ -0,0 +1,31 @@ +import { passwordCriteria } from './accountData/AccountData'; + +interface RegistrationDataValidation { + [key: string]: { + validation(val: string): boolean; + }; +} + +export const REGISTRATION_DATA_VALIDATION: RegistrationDataValidation = { + mainTopicId: { + validation: (val) => !!val + }, + agencyId: { + validation: (val) => !!val + }, + zipcode: { + validation: (val: string) => { + const reg = /^\d*$/; + return val.length === 5 && reg.test(val); + } + }, + password: { + validation: (val) => + passwordCriteria.every((criteria) => criteria.validation(val)) + }, + username: { + validation: (val) => { + return val.length > 4; + } + } +}; diff --git a/src/extensions/components/registration/stepBar/StepBar.stories.ts b/src/extensions/components/registration/stepBar/StepBar.stories.ts new file mode 100644 index 000000000..4888774ba --- /dev/null +++ b/src/extensions/components/registration/stepBar/StepBar.stories.ts @@ -0,0 +1,15 @@ +import { Meta } from '@storybook/react'; + +import { StepBar } from './StepBar'; + +export default { + title: 'Registration/StepBar', + component: StepBar +} as Meta; + +export const Default = { + args: { + maxNumberOfSteps: 3, + currentStep: 2 + } +}; diff --git a/src/extensions/components/registration/stepBar/StepBar.tsx b/src/extensions/components/registration/stepBar/StepBar.tsx new file mode 100644 index 000000000..f8bcce859 --- /dev/null +++ b/src/extensions/components/registration/stepBar/StepBar.tsx @@ -0,0 +1,66 @@ +import { LinearProgress, Typography, Box } from '@mui/material'; +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; +import { VFC } from 'react'; + +interface StepBarProps { + currentStep: number; + maxNumberOfSteps: number; +} + +export const StepBar: VFC = ({ + currentStep, + maxNumberOfSteps +}) => { + const { t } = useTranslation(); + return ( + <> + + + + {currentStep > maxNumberOfSteps + ? maxNumberOfSteps + : currentStep} + + + + {t('registration.stepbar.step')}{' '} + {currentStep > maxNumberOfSteps + ? maxNumberOfSteps + : currentStep}{' '} + {t('registration.stepbar.of')} {maxNumberOfSteps} + + + maxNumberOfSteps + ? 100 + : (currentStep / maxNumberOfSteps) * 100 + } + color="primary" + sx={{ + 'mt': '20px', + 'mb': '48px', + 'backgroundColor': '#0000001A', + 'borderRadius': '2px', + '& .MuiLinearProgress-bar': { borderRadius: '2px' } + }} + /> + + ); +}; diff --git a/src/extensions/components/registration/stepBar/stepBar.cy.tsx b/src/extensions/components/registration/stepBar/stepBar.cy.tsx new file mode 100644 index 000000000..7d5d0da7d --- /dev/null +++ b/src/extensions/components/registration/stepBar/stepBar.cy.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { StepBar } from './StepBar'; + +it('shows correct steps', () => { + cy.mount(); + cy.get('h5').should( + 'contains.text', + 'registration.stepbar.step 1 registration.stepbar.of 3' + ); +}); + +it('show maxNumberofsteps if currentStep > maxNumberOfSteps', () => { + cy.mount(); + cy.get('h5').should( + 'contains.text', + 'registration.stepbar.step 3 registration.stepbar.of 3' + ); +}); diff --git a/src/extensions/components/registration/topicSelection/TopicSelection.tsx b/src/extensions/components/registration/topicSelection/TopicSelection.tsx new file mode 100644 index 000000000..94865011f --- /dev/null +++ b/src/extensions/components/registration/topicSelection/TopicSelection.tsx @@ -0,0 +1,439 @@ +import { + Typography, + Accordion, + AccordionDetails, + AccordionSummary, + Box, + FormControlLabel, + Radio, + RadioGroup, + FormControl +} from '@mui/material'; +import * as React from 'react'; +import { VFC, useContext, useState, useEffect } from 'react'; +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; +import { useTranslation } from 'react-i18next'; +import { RegistrationContext } from '../../../../globalState'; +import { apiGetTopicGroups } from '../../../../api/apiGetTopicGroups'; +import { apiGetTopicsData } from '../../../../api/apiGetTopicsData'; +import { + TopicsDataInterface, + TopicGroup +} from '../../../../globalState/interfaces'; +import { MetaInfo } from '../metaInfo/MetaInfo'; +import { Loading } from '../../../../components/app/Loading'; +import TaskAltIcon from '@mui/icons-material/TaskAlt'; +import { REGISTRATION_DATA_VALIDATION } from '../registrationDataValidation'; + +export const TopicSelection: VFC<{ + nextStepUrl: string; + onNextClick(): void; +}> = ({ nextStepUrl, onNextClick }) => { + const { + setDisabledNextButton, + setDataForSessionStorage, + sessionStorageRegistrationData, + preselectedData, + preselectedAgency, + isConsultantLink, + consultant, + hasAgencyError + } = useContext(RegistrationContext); + const { t } = useTranslation(); + const [value, setValue] = useState( + sessionStorageRegistrationData.mainTopicId || undefined + ); + const [topicGroups, setTopicGroups] = useState([]); + const [topics, setTopics] = useState([]); + const [isLoading, setIsLoading] = useState(false); + const [listView, setListView] = useState(false); + const [topicGroupId, setTopicGroupId] = useState( + sessionStorageRegistrationData.topicGroupId || undefined + ); + + const getTopic = (mainTopicId: number) => { + return topics?.find((topic) => topic?.id === mainTopicId); + }; + + useEffect(() => { + if ( + REGISTRATION_DATA_VALIDATION.mainTopicId.validation( + value?.toString() + ) && + (topicGroups.some((topicGroup) => + topicGroup.topicIds.includes(value) + ) || + (listView && topics.some((topic) => topic.id === value))) + ) { + setDisabledNextButton(false); + } + }, [setDisabledNextButton, value, topicGroups, listView, topics]); + + useEffect(() => { + if ( + (preselectedData.includes('aid') && !hasAgencyError) || + (isConsultantLink && consultant) + ) { + setListView(true); + } else { + setListView(false); + } + }, [consultant, hasAgencyError, isConsultantLink, preselectedData]); + + useEffect(() => { + if (topics.length === 1) { + setValue(topics[0].id); + setDataForSessionStorage({ + mainTopicId: topics[0].id + }); + } + }, [setDataForSessionStorage, topics]); + + useEffect(() => { + const getFilteredTopics = (topics: TopicsDataInterface[]) => { + if (preselectedData.includes('aid') && !hasAgencyError) { + const topicIds = preselectedAgency?.topicIds; + return topics?.filter((topic) => topicIds.includes(topic.id)); + } + if (isConsultantLink && consultant) { + const topicIds = consultant?.agencies + .map((agency) => agency.topicIds) + .flat(); + return topics?.filter((topic) => topicIds.includes(topic.id)); + } + return topics; + }; + (async () => { + try { + setIsLoading(true); + const topicGroupsResponse = await apiGetTopicGroups(); + const topicsResponse = await apiGetTopicsData(); + + setTopics(getFilteredTopics(topicsResponse)); + setTopicGroups( + topicGroupsResponse.data.items + .filter((topicGroup) => topicGroup.topicIds.length > 0) + .sort((a, b) => { + if (a.name === b.name) return 0; + return a.name < b.name ? -1 : 1; + }) + ); + setIsLoading(false); + } catch { + setTopics([]); + setTopicGroups([]); + } + })(); + }, [ + consultant, + hasAgencyError, + isConsultantLink, + preselectedAgency, + preselectedData + ]); + + return ( + <> + {topics.length === 1 ? ( + + {t('registration.topic.oneResult')} + + ) : ( + <> + + {t('registration.topic.headline')} + + + {t('registration.topic.subline')} + + + )} + {isLoading ? ( + + + + ) : ( + + + {topicGroups && topics && listView + ? topics + .sort((a, b) => { + if (a.name === b.name) return 0; + return a.name < b.name ? -1 : 1; + }) + .map((topic, index) => ( + + { + setValue(topic.id); + setDataForSessionStorage( + { + mainTopicId: + topic?.id + } + ); + }} + checked={ + value === topic?.id + } + checkedIcon={ + topics.length === + 1 ? ( + + ) : undefined + } + icon={ + topics.length === + 1 ? ( + + ) : undefined + } + /> + } + label={ + + + {topic?.name} + + + } + /> + {topic?.description && ( + + setValue(undefined) + } + backButtonLabel={t( + 'registration.topic.infoOverlay.backButtonLabel' + )} + nextButtonLabel={t( + 'registration.topic.infoOverlay.nextButtonLabel' + )} + nextStepUrl={nextStepUrl} + onNextClick={onNextClick} + onOverlayOpen={() => { + setDataForSessionStorage( + { + mainTopicId: + topic.id + } + ); + setValue(topic.id); + }} + /> + )} + + )) + : topicGroups.map((topicGroup) => ( + + + } + aria-controls={`panel-${topicGroup.name}-content`} + id={`panel-${topicGroup.name}`} + sx={{ + '& .MuiAccordionSummary-content.Mui-expanded': + { + m: '12px 0' + } + }} + > + + {topicGroup.name} + + + + {topicGroup.topicIds + .map((t) => getTopic(t)) + .sort((a, b) => { + if (a.name === b.name) + return 0; + return a.name < b.name + ? -1 + : 1; + }) + .map((topic, index) => ( + + { + setValue( + topic.id + ); + setTopicGroupId( + topicGroup.id + ); + setDataForSessionStorage( + { + mainTopicId: + topic?.id, + topicGroupId: + topicGroup?.id + } + ); + }} + checked={ + value === + topic?.id && + topicGroup.id === + topicGroupId + } + /> + } + label={ + + + { + topic?.name + } + + + } + /> + {topic.description && ( + + setValue( + undefined + ) + } + backButtonLabel={t( + 'registration.topic.infoOverlay.backButtonLabel' + )} + nextButtonLabel={t( + 'registration.topic.infoOverlay.nextButtonLabel' + )} + nextStepUrl={ + nextStepUrl + } + onNextClick={ + onNextClick + } + onOverlayOpen={() => { + setDataForSessionStorage( + { + mainTopicId: + topic.id, + topicGroupId: + topicGroup.id + } + ); + setValue( + topic.id + ); + setTopicGroupId( + topicGroup.id + ); + }} + /> + )} + + ))} + + + ))} + + + )} + + ); +}; diff --git a/src/extensions/components/registration/topicSelection/topicSelection.cy.tsx b/src/extensions/components/registration/topicSelection/topicSelection.cy.tsx new file mode 100644 index 000000000..eb6eaded4 --- /dev/null +++ b/src/extensions/components/registration/topicSelection/topicSelection.cy.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { TopicSelection } from './TopicSelection'; +import { endpoints } from '../../../../resources/scripts/endpoints'; +import { RegistrationProvider } from '../../../../globalState'; +import { BrowserRouter as Router } from 'react-router-dom'; + +it('Get accordion content', () => { + cy.fixture('service.topicGroups.json').then((data) => { + cy.intercept(new RegExp(`${endpoints.topicGroups}*`), data).as( + 'topicGroups' + ); + }); + cy.fixture('service.topics.json').then((data) => { + cy.intercept(new RegExp(`${endpoints.topicsData}*`), data).as('topics'); + }); + cy.mount( + + + {}} /> + + + ); + cy.get('h4').should('contains.text', 'Alter'); +}); diff --git a/src/extensions/components/registration/topicSelection/topicSelection.stories.ts b/src/extensions/components/registration/topicSelection/topicSelection.stories.ts new file mode 100644 index 000000000..2f8bd1da4 --- /dev/null +++ b/src/extensions/components/registration/topicSelection/topicSelection.stories.ts @@ -0,0 +1,17 @@ +import { Meta } from '@storybook/react'; + +import { TopicSelection } from './TopicSelection'; + +export default { + title: 'Registration/TopicSelection', + component: TopicSelection +} as Meta; + +export const Default = { + args: { + view: { + options: ['showResults', 'loading', 'noResults', 'oneResult'], + control: { type: 'select' } + } + } +}; diff --git a/src/extensions/components/registration/welcomeScreen/WelcomeScreen.tsx b/src/extensions/components/registration/welcomeScreen/WelcomeScreen.tsx new file mode 100644 index 000000000..146382005 --- /dev/null +++ b/src/extensions/components/registration/welcomeScreen/WelcomeScreen.tsx @@ -0,0 +1,155 @@ +import { Box, Typography, Button, Divider } from '@mui/material'; +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; +import CreateIcon from '@mui/icons-material/Create'; +import ChatIcon from '@mui/icons-material/Chat'; +import MailIcon from '@mui/icons-material/Mail'; +import LockIcon from '@mui/icons-material/Lock'; +import { Link as RouterLink, useLocation } from 'react-router-dom'; +import { useMemo, VFC } from 'react'; +import { PreselectionBox } from '../preselectionBox/PreselectionBox'; + +interface WelcomeScreenProps { + nextStepUrl: string; +} + +export const WelcomeScreen: VFC = ({ nextStepUrl }) => { + const { t } = useTranslation(); + const { search } = useLocation(); + + const infoDefinitions = useMemo( + () => [ + { + icon: ( + {redirectOverlayActive && ( diff --git a/src/extensions/components/registration/accountData/AccountData.tsx b/src/extensions/components/registration/accountData/AccountData.tsx index cf76ecaef..6544aa7cc 100644 --- a/src/extensions/components/registration/accountData/AccountData.tsx +++ b/src/extensions/components/registration/accountData/AccountData.tsx @@ -7,7 +7,14 @@ import { FormControlLabel } from '@mui/material'; import * as React from 'react'; -import { useState, useContext, useEffect } from 'react'; +import { + useState, + useContext, + useEffect, + VFC, + Dispatch, + SetStateAction +} from 'react'; import { useTranslation } from 'react-i18next'; import PersonIcon from '@mui/icons-material/Person'; import LockIcon from '@mui/icons-material/Lock'; @@ -19,7 +26,7 @@ import { hasSpecialChar } from '../../../../utils/validateInputValue'; import { LegalLinksContext } from '../../../../globalState/provider/LegalLinksProvider'; -import { RegistrationContext } from '../../../../globalState'; +import { RegistrationContext, RegistrationData } from '../../../../globalState'; import { apiGetIsUsernameAvailable } from '../../../../api/apiGetIsUsernameAvailable'; import { REGISTRATION_DATA_VALIDATION } from '../registrationDataValidation'; import LegalLinks from '../../../../components/legalLinks/LegalLinks'; @@ -43,7 +50,9 @@ export const passwordCriteria = [ } ]; -export const AccountData = () => { +export const AccountData: VFC<{ + onChange: Dispatch>>; +}> = ({ onChange }) => { const legalLinks = useContext(LegalLinksContext); const { t } = useTranslation(); const [password, setPassword] = useState(''); @@ -56,8 +65,7 @@ export const AccountData = () => { const [username, setUsername] = useState(''); const [isUsernameAvailable, setIsUsernameAvailable] = useState(true); - const { setDisabledNextButton, setDataForSessionStorage } = - useContext(RegistrationContext); + const { setDisabledNextButton } = useContext(RegistrationContext); useEffect(() => { if ( @@ -68,7 +76,7 @@ export const AccountData = () => { dataProtectionChecked ) { setDisabledNextButton(false); - setDataForSessionStorage({ username, password }); + onChange({ username, password }); } else { setDisabledNextButton(true); } diff --git a/src/extensions/components/registration/agencySelection/AgencyLanguages.tsx b/src/extensions/components/registration/agencySelection/AgencyLanguages.tsx index 32d6d9f15..de71fa48e 100644 --- a/src/extensions/components/registration/agencySelection/AgencyLanguages.tsx +++ b/src/extensions/components/registration/agencySelection/AgencyLanguages.tsx @@ -1,6 +1,6 @@ import { Typography } from '@mui/material'; import * as React from 'react'; -import { useEffect, useState } from 'react'; +import { useContext, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { apiAgencyLanguages } from '../../../../api/apiAgencyLanguages'; import { LanguagesContext } from '../../../../globalState/provider/LanguagesProvider'; @@ -11,32 +11,37 @@ interface AgencyLanguagesProps { export const AgencyLanguages = ({ agencyId }: AgencyLanguagesProps) => { const { t } = useTranslation(); - const [languages, setLanguages] = useState(['de']); - const { fixed: fixedLanguages } = React.useContext(LanguagesContext); + const [languagesString, setLanguagesString] = useState(''); + const { fixed: fixedLanguages } = useContext(LanguagesContext); useEffect(() => { - if (agencyId !== undefined) { - apiAgencyLanguages(agencyId, false).then((res) => { - const allLanguages = [...fixedLanguages, ...res.languages]; - setLanguages( - allLanguages - .filter((element, index) => { - return allLanguages.indexOf(element) === index; - }) - .sort() + (async () => { + let languages = ['de']; + if (agencyId !== undefined) { + languages = await apiAgencyLanguages(agencyId, false).then( + (res) => (languages = [...fixedLanguages, ...res.languages]) ); - }); - } - }, [agencyId, fixedLanguages]); + } + + setLanguagesString( + languages + .filter( + (element, index) => languages.indexOf(element) === index + ) + .map((lang) => { + const language = t(`languages.${lang}`); + const languageCode = lang.toUpperCase(); + return `${language} (${languageCode})`; + }) + .sort((a, b) => a.localeCompare(b)) + .join(' | ') + ); + })(); + }, [agencyId, fixedLanguages, t]); return ( - {languages.map( - (lang, index) => - `${index !== 0 ? ' |' : ''} ${t( - `languages.${lang}` - )} (${lang.toUpperCase()})` - )} + {languagesString} ); }; diff --git a/src/extensions/components/registration/agencySelection/AgencySelection.tsx b/src/extensions/components/registration/agencySelection/AgencySelection.tsx index ca9e6b66f..48a4954c4 100644 --- a/src/extensions/components/registration/agencySelection/AgencySelection.tsx +++ b/src/extensions/components/registration/agencySelection/AgencySelection.tsx @@ -1,88 +1,56 @@ import * as React from 'react'; -import { useState, useEffect, VFC, useContext } from 'react'; +import { + useState, + useEffect, + VFC, + useContext, + Dispatch, + SetStateAction +} from 'react'; import { AgencySelectionResults } from './AgencySelectionResults'; -import { apiAgencySelection } from '../../../../api'; -import { RegistrationContext } from '../../../../globalState'; -import { AgencyDataInterface } from '../../../../globalState/interfaces'; +import { RegistrationContext, RegistrationData } from '../../../../globalState'; import { Typography } from '@mui/material'; import { useTranslation } from 'react-i18next'; +import { UrlParamsContext } from '../../../../globalState/provider/UrlParamsProvider'; +import { useAgenciesForRegistration } from '../../../../containers/registration/hooks/useAgenciesForRegistration'; export const AgencySelection: VFC<{ + onChange: Dispatch>>; nextStepUrl: string; onNextClick(): void; -}> = ({ nextStepUrl, onNextClick }) => { - const { - sessionStorageRegistrationData, - isConsultantLink, - consultant, - setDataForSessionStorage - } = useContext(RegistrationContext); - +}> = ({ nextStepUrl, onNextClick, onChange }) => { const { t } = useTranslation(); + const { registrationData } = useContext(RegistrationContext); + const { consultant: preselectedConsultant } = useContext(UrlParamsContext); + + const { isLoading, agencies } = useAgenciesForRegistration({ + topic: registrationData.mainTopic, + postcode: registrationData?.zipcode + }); + const [headlineZipcode, setHeadlineZipcode] = useState(''); - const [isLoading, setIsLoading] = useState(false); - const [results, setResults] = useState( - undefined - ); - useEffect(() => { - if (isConsultantLink) { - setResults( - consultant?.agencies?.filter((agency) => - agency?.topicIds?.includes( - sessionStorageRegistrationData?.mainTopicId - ) - ) - ); - } else if (sessionStorageRegistrationData?.zipcode?.length === 5) { - setHeadlineZipcode(sessionStorageRegistrationData.zipcode); - setResults(undefined); - (async () => { - setIsLoading(true); - try { - const agencyResponse = await apiAgencySelection({ - postcode: sessionStorageRegistrationData.zipcode, - // We will keep consultingTypeId identical to mainTopicId - consultingType: - sessionStorageRegistrationData.mainTopicId || - undefined, - topicId: - sessionStorageRegistrationData.mainTopicId || - undefined - }); - setResults(agencyResponse); - if ( - agencyResponse.every( - (agency) => - agency.id !== - sessionStorageRegistrationData.agencyId - ) - ) { - setDataForSessionStorage({ agencyId: undefined }); - } - } catch { - setResults([]); - } - setIsLoading(false); - })(); + useEffect(() => { + if (!preselectedConsultant && registrationData?.zipcode?.length === 5) { + setHeadlineZipcode(registrationData.zipcode); } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [sessionStorageRegistrationData, consultant]); + }, [registrationData, preselectedConsultant]); return ( <> - {(isConsultantLink && consultant?.agencies?.length === 1) || - results?.length === 1 + {preselectedConsultant?.agencies?.length === 1 || + agencies?.length === 1 ? t('registration.agency.consultantheadline') : t('registration.agency.headline')} ); diff --git a/src/extensions/components/registration/agencySelection/AgencySelectionResults.tsx b/src/extensions/components/registration/agencySelection/AgencySelectionResults.tsx index 2ae005206..c7a2e510d 100644 --- a/src/extensions/components/registration/agencySelection/AgencySelectionResults.tsx +++ b/src/extensions/components/registration/agencySelection/AgencySelectionResults.tsx @@ -1,3 +1,4 @@ +import * as React from 'react'; import { Typography, FormControlLabel, @@ -8,24 +9,30 @@ import { Button, Link } from '@mui/material'; -import * as React from 'react'; -import { useContext, useEffect, useState } from 'react'; +import { + Dispatch, + SetStateAction, + useContext, + useEffect, + useState +} from 'react'; import TaskAltIcon from '@mui/icons-material/TaskAlt'; import NoResultsIllustration from '../../../../resources/img/illustrations/no-results.svg'; import ConsultantIllustration from '../../../../resources/img/illustrations/consultant-found.svg'; import OpenInNewIcon from '@mui/icons-material/OpenInNew'; import { Loading } from '../../../../components/app/Loading'; import { useTranslation } from 'react-i18next'; -import { RegistrationContext } from '../../../../globalState'; +import { RegistrationContext, RegistrationData } from '../../../../globalState'; import { AgencyDataInterface } from '../../../../globalState/interfaces'; import { AgencyLanguages } from './AgencyLanguages'; import { parsePlaceholderString } from '../../../../utils/parsePlaceholderString'; import { useAppConfig } from '../../../../hooks/useAppConfig'; -import { VFC } from 'react'; import { MetaInfo } from '../metaInfo/MetaInfo'; import { REGISTRATION_DATA_VALIDATION } from '../registrationDataValidation'; +import { UrlParamsContext } from '../../../../globalState/provider/UrlParamsProvider'; interface AgencySelectionResultsProps { + onChange: Dispatch>>; isLoading?: boolean; zipcode?: string; results?: AgencyDataInterface[]; @@ -33,24 +40,22 @@ interface AgencySelectionResultsProps { onNextClick(): void; } -export const AgencySelectionResults: VFC = ({ +export const AgencySelectionResults = ({ + onChange, isLoading, zipcode, results, nextStepUrl, onNextClick -}) => { +}: AgencySelectionResultsProps) => { const { t } = useTranslation(); const settings = useAppConfig(); - const { - setDisabledNextButton, - setDataForSessionStorage, - sessionStorageRegistrationData, - isConsultantLink - } = useContext(RegistrationContext); + const { setDisabledNextButton, registrationData } = + useContext(RegistrationContext); + const { consultant: preselectedConsultant } = useContext(UrlParamsContext); - const [agencyId, setAgencyId] = useState( - sessionStorageRegistrationData?.agencyId + const [selectedAgency, setSelectedAgency] = useState( + registrationData?.agency ); useEffect(() => { @@ -59,10 +64,10 @@ export const AgencySelectionResults: VFC = ({ results?.length > 0 && results?.every((agency) => agency.external) ) { - setAgencyId(undefined); + setSelectedAgency(undefined); setDisabledNextButton(true); - setDataForSessionStorage({ - agencyId: undefined + onChange({ + agency: undefined }); return; } @@ -71,43 +76,38 @@ export const AgencySelectionResults: VFC = ({ results?.length === 1 && results?.every((agency) => !agency.external) ) { - setAgencyId(results[0].id); + setSelectedAgency(results[0]); setDisabledNextButton(false); - setDataForSessionStorage({ - agencyId: results[0].id + onChange({ + agency: results[0] }); return; } + if ( // invalid agencyId, needs to be removed - agencyId && + selectedAgency && results?.length === 0 ) { setDisabledNextButton(true); - setDataForSessionStorage({ - agencyId: undefined + onChange({ + agency: undefined }); return; } + if ( // valid agencyId REGISTRATION_DATA_VALIDATION.agencyId.validation( - agencyId?.toString() + selectedAgency?.id?.toString() ) ) { setDisabledNextButton(false); - setDataForSessionStorage({ - agencyId: agencyId - }); - return; + onChange({ agency: selectedAgency }); } - }, [ - agencyId, - results, - setDataForSessionStorage, - setDisabledNextButton, - zipcode - ]); + }, [selectedAgency, results, onChange, setDisabledNextButton, zipcode]); + + const onlyExternalAgencies = results?.every((agency) => agency.external); return ( <> @@ -123,67 +123,62 @@ export const AgencySelectionResults: VFC = ({ )} - {!!results && !isLoading && !isConsultantLink && ( + {!!results && !isLoading && !preselectedConsultant && ( {t('registration.agency.result.headline') + ' ' + zipcode}: )} + {/* only external results */} - {results?.length > 0 && - results?.every((agency) => agency.external) && ( + {results?.length > 0 && onlyExternalAgencies && ( + + + + {t('registration.agency.result.external.headline')} + + + {t('registration.agency.result.external.subline')} + + {results?.[0]?.url && ( + + )} + - - - {t( - 'registration.agency.result.external.headline' - )} - - - {t( - 'registration.agency.result.external.subline' - )} - - {results?.[0]?.url && ( - - )} - - - - )} + /> + + )} + {/* no Results */} {results?.length === 0 && ( = ({ /> )} + {/* one Result */} - {results?.length === 1 && - !results?.every((agency) => { - return agency.external; - }) && ( - - + + - - - } - icon={} + + } + icon={} + /> + } + label={ + + + {results?.[0].name || ''} + + + {t( + 'registration.agency.result.languages' + )} + + + + } + /> + {results?.[0].description && ( + + setSelectedAgency(undefined) } - label={ - - - {results?.[0].name || ''} - - - {t( - 'registration.agency.result.languages' - )} - - - - } + backButtonLabel={t( + 'registration.agency.infoOverlay.backButtonLabel' + )} + nextButtonLabel={t( + 'registration.agency.infoOverlay.nextButtonLabel' + )} + nextStepUrl={nextStepUrl} + onNextClick={onNextClick} + onOverlayOpen={() => { + onChange({ + agency: results?.[0] + }); + setSelectedAgency(results?.[0]); + }} /> - {results?.[0].description && ( - - setAgencyId(undefined) - } - backButtonLabel={t( - 'registration.agency.infoOverlay.backButtonLabel' - )} - nextButtonLabel={t( - 'registration.agency.infoOverlay.nextButtonLabel' - )} - nextStepUrl={nextStepUrl} - onNextClick={onNextClick} - onOverlayOpen={() => { - setDataForSessionStorage({ - agencyId: results?.[0].id - }); - setAgencyId(results?.[0].id); - }} - /> - )} - - - - )} + )} + + + + )} + {/* more Results */} - {results?.length > 1 && - !results?.every((agency) => agency.external) && ( - - - {results?.map((agency, index) => ( + {results?.length > 1 && !onlyExternalAgencies && ( + + + {results + ?.filter((agency) => !agency.external) + .map((agency, index) => ( = ({ }} > { setDisabledNextButton(false); - setAgencyId(agency.id); - setDataForSessionStorage({ - agencyId: agency.id - }); + setSelectedAgency(agency); + onChange({ agency }); }} sx={{ alignItems: 'flex-start' @@ -354,7 +352,10 @@ export const AgencySelectionResults: VFC = ({ value={agency.id} control={ } label={ @@ -390,7 +391,7 @@ export const AgencySelectionResults: VFC = ({ headline={agency.name} description={agency.description} onOverlayClose={() => - setAgencyId(undefined) + setSelectedAgency(undefined) } backButtonLabel={t( 'registration.agency.infoOverlay.backButtonLabel' @@ -401,18 +402,16 @@ export const AgencySelectionResults: VFC = ({ nextStepUrl={nextStepUrl} onNextClick={onNextClick} onOverlayOpen={() => { - setDataForSessionStorage({ - agencyId: agency.id - }); - setAgencyId(agency.id); + onChange({ agency }); + setSelectedAgency(agency); }} /> )} ))} - - - )} + + + )} ); }; diff --git a/src/extensions/components/registration/agencySelection/agencySelection.cy.tsx b/src/extensions/components/registration/agencySelection/agencySelection.cy.tsx deleted file mode 100644 index d1c65e786..000000000 --- a/src/extensions/components/registration/agencySelection/agencySelection.cy.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React from 'react'; -import { AgencySelection } from './AgencySelection'; -import { endpoints } from '../../../../resources/scripts/endpoints'; -import { RegistrationContext } from '../../../../globalState'; -import { BrowserRouter as Router } from 'react-router-dom'; - -it('Get results for zipcode', () => { - cy.fixture('service.agencies.json').then((data) => { - cy.intercept(new RegExp(`${endpoints.agencyServiceBase}*`), data).as( - 'agencies' - ); - }); - cy.mount( - - {}, - setDataForSessionStorage: () => {}, - isConsultantLink: false, - consultant: null, - sessionStorageRegistrationData: { - zipcode: '12345', - username: null, - agencyId: null, - mainTopicId: null, - password: null - } - }} - > - {}} /> - - - ); - cy.get('p').should('contains.text', 'name'); -}); diff --git a/src/extensions/components/registration/infoDrawer/InfoDrawer.tsx b/src/extensions/components/registration/infoDrawer/InfoDrawer.tsx index c10a35e00..6e349e8fe 100644 --- a/src/extensions/components/registration/infoDrawer/InfoDrawer.tsx +++ b/src/extensions/components/registration/infoDrawer/InfoDrawer.tsx @@ -1,31 +1,30 @@ import * as React from 'react'; -import { useState, useContext, useEffect } from 'react'; +import { useState, useContext } from 'react'; import { useTranslation } from 'react-i18next'; import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp'; import { Box, SwipeableDrawer, Typography } from '@mui/material'; import { RegistrationContext } from '../../../../globalState'; import { PreselectionError } from '../preselectionError/PreselectionError'; +import { UrlParamsContext } from '../../../../globalState/provider/UrlParamsProvider'; interface InfoDrawerProps { trigger?: boolean; } export const InfoDrawer = ({ trigger }: InfoDrawerProps) => { - const { - preselectedAgency, - preselectedTopicName, - hasAgencyError, - hasConsultantError, - hasTopicError, - isConsultantLink, - preselectedData - } = useContext(RegistrationContext); const { t } = useTranslation(); + + const { hasAgencyError, hasConsultantError, hasTopicError } = + useContext(RegistrationContext); + const { + topic: preselectedTopic, + agency: preselectedAgency, + consultant: preselectedConsultant + } = useContext(UrlParamsContext); + const drawerBleeding = 92; const [isDrawerOpen, setIsDrawerOpen] = useState(false); - const [topicName, setTopicName] = useState('-'); - const [agencyName, setAgencyName] = useState('-'); const toggleDrawer = (event: React.KeyboardEvent | React.MouseEvent) => { if ( @@ -39,157 +38,142 @@ export const InfoDrawer = ({ trigger }: InfoDrawerProps) => { setIsDrawerOpen(!isDrawerOpen); }; - useEffect(() => { - if (preselectedTopicName) { - setTopicName(preselectedTopicName); - } - if (preselectedAgency) { - setAgencyName(preselectedAgency.name); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [preselectedAgency, preselectedTopicName]); - - if ( - !(preselectedData.includes('tid') || preselectedData.includes('aid')) && - !isConsultantLink - ) { + if (!preselectedTopic && !preselectedAgency && !preselectedConsultant) { return null; } return ( - <> - .MuiPaper-root': { - top: -drawerBleeding, - overflow: 'visible' - }, - 'top': 0 + .MuiPaper-root': { + top: -drawerBleeding, + overflow: 'visible' + }, + 'top': 0 + }} + anchor="top" + onClose={() => setIsDrawerOpen(false)} + onOpen={() => setIsDrawerOpen(true)} + open={isDrawerOpen} + ModalProps={{ + keepMounted: true + }} + > + { + if (e.key === 'Enter') { + toggleDrawer(e); + } }} - anchor="top" - onClose={() => setIsDrawerOpen(false)} - onOpen={() => setIsDrawerOpen(true)} - open={isDrawerOpen} - ModalProps={{ - keepMounted: true + tabIndex={0} + sx={{ + 'px': '16px', + 'pt': '16px', + 'mt': trigger ? 0 : '48px', + 'position': 'relative', + 'borderBottomLeftRadius': 8, + 'borderBottomRightRadius': 8, + 'visibility': 'visible', + 'right': 0, + 'left': 0, + 'width': '100vw', + 'backgroundColor': 'primary.main', + 'color': 'white', + 'animationName': 'slideIn', + 'animationDuration': '0.8s', + 'animationDelay': '0.3s', + 'animationFillMode': 'forwards', + '@keyframes slideIn': { + '0%': { + top: 0 + }, + '100%': { + top: drawerBleeding + } + } }} > { - if (e.key === 'Enter') { - toggleDrawer(e); - } - }} - tabIndex={0} sx={{ - 'px': '16px', - 'pt': '16px', - 'mt': trigger ? 0 : '48px', - 'position': 'relative', - 'borderBottomLeftRadius': 8, - 'borderBottomRightRadius': 8, - 'visibility': 'visible', - 'right': 0, - 'left': 0, - 'width': '100vw', - 'backgroundColor': 'primary.main', - 'color': 'white', - 'animationName': 'slideIn', - 'animationDuration': '0.8s', - 'animationDelay': '0.3s', - 'animationFillMode': 'forwards', - '@keyframes slideIn': { - '0%': { - top: 0 - }, - '100%': { - top: drawerBleeding - } - } + opacity: isDrawerOpen ? 1 : 0, + overflow: 'scroll', + maxHeight: isDrawerOpen ? '75vh' : 0 }} > - - {hasConsultantError ? ( - - ) : ( - <> - - {t('registration.topic.summary')} - - {hasTopicError && topicName === '-' ? ( - - ) : ( + {hasConsultantError ? ( + + ) : ( + <> + + {t('registration.topic.summary')} + + {hasTopicError && !preselectedTopic ? ( + + ) : ( + preselectedTopic && ( - {topicName} + {preselectedTopic.name} - )} - - {t('registration.agency.summary')} - - {hasAgencyError && agencyName === '-' ? ( - - ) : ( + ) + )} + + {t('registration.agency.summary')} + + {hasAgencyError && !preselectedAgency ? ( + + ) : ( + preselectedAgency && ( - {agencyName} + {preselectedAgency.name} - )} - - )} - - - {isDrawerOpen ? ( - - ) : ( - - )} - + ) + )} + + )} + + + {isDrawerOpen ? ( + + ) : ( + + )} - - + + ); }; diff --git a/src/extensions/components/registration/preselectionBox/PreselectedAgency.tsx b/src/extensions/components/registration/preselectionBox/PreselectedAgency.tsx new file mode 100644 index 000000000..4aa804209 --- /dev/null +++ b/src/extensions/components/registration/preselectionBox/PreselectedAgency.tsx @@ -0,0 +1,53 @@ +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; +import { Typography } from '@mui/material'; +import ReportProblemIcon from '@mui/icons-material/ReportProblem'; +import { AgencyDataInterface } from '../../../../globalState/interfaces'; + +const PreselectedAgency = ({ + hasError, + agency +}: { + hasError: boolean; + agency: AgencyDataInterface; +}) => { + const { t } = useTranslation(); + + if (!hasError && !agency) { + return null; + } + + return ( + <> + + {t('registration.agency.summary')} + + {hasError ? ( + + <> + + ) : ( + {agency.name} + )} + + ); +}; + +export default PreselectedAgency; diff --git a/src/extensions/components/registration/preselectionBox/PreselectedConsultant.tsx b/src/extensions/components/registration/preselectionBox/PreselectedConsultant.tsx new file mode 100644 index 000000000..dfb3998aa --- /dev/null +++ b/src/extensions/components/registration/preselectionBox/PreselectedConsultant.tsx @@ -0,0 +1,29 @@ +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; +import { Typography } from '@mui/material'; +import ReportProblemIcon from '@mui/icons-material/ReportProblem'; + +const PreselectedConsultant = ({ hasError }: { hasError: boolean }) => { + const { t } = useTranslation(); + if (hasError) { + return ( + + + ); + } + + return {t('registration.consultantlink')}; +}; + +export default PreselectedConsultant; diff --git a/src/extensions/components/registration/preselectionBox/PreselectedTopic.tsx b/src/extensions/components/registration/preselectionBox/PreselectedTopic.tsx new file mode 100644 index 000000000..26c92e0b4 --- /dev/null +++ b/src/extensions/components/registration/preselectionBox/PreselectedTopic.tsx @@ -0,0 +1,50 @@ +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; +import { SxProps, Theme, Typography } from '@mui/material'; +import ReportProblemIcon from '@mui/icons-material/ReportProblem'; +import { TopicsDataInterface } from '../../../../globalState/interfaces'; + +const PreselectedTopic = ({ + hasError, + topic, + sx +}: { + hasError: boolean; + topic: TopicsDataInterface; + sx: SxProps; +}) => { + const { t } = useTranslation(); + + if (!hasError && !topic) { + return null; + } + + return ( + <> + + {t('registration.topic.summary')} + + {hasError ? ( + + <> + + ) : ( + {topic.name} + )} + + ); +}; + +export default PreselectedTopic; diff --git a/src/extensions/components/registration/preselectionBox/PreselectionBox.tsx b/src/extensions/components/registration/preselectionBox/PreselectionBox.tsx index c74a7b7fd..75663bc83 100644 --- a/src/extensions/components/registration/preselectionBox/PreselectionBox.tsx +++ b/src/extensions/components/registration/preselectionBox/PreselectionBox.tsx @@ -1,47 +1,30 @@ import * as React from 'react'; -import { useContext, useState, useEffect, VFC } from 'react'; -import { useTranslation } from 'react-i18next'; -import { Box, Typography } from '@mui/material'; +import { useContext } from 'react'; +import { Box } from '@mui/material'; import { RegistrationContext } from '../../../../globalState'; import { PreselectionDrawer } from '../preselectionDrawer/preselectionDrawer'; -import ReportProblemIcon from '@mui/icons-material/ReportProblem'; import { useResponsive } from '../../../../hooks/useResponsive'; +import { UrlParamsContext } from '../../../../globalState/provider/UrlParamsProvider'; +import PreselectedConsultant from './PreselectedConsultant'; +import PreselectedTopic from './PreselectedTopic'; +import PreselectedAgency from './PreselectedAgency'; -export const PreselectionBox: VFC<{ +export const PreselectionBox = ({ + hasDrawer = false +}: { hasDrawer?: boolean; -}> = ({ hasDrawer = false }) => { - const { - preselectedAgency, - preselectedTopicName, - isConsultantLink, - hasConsultantError, - hasTopicError, - hasAgencyError, - preselectedData - } = useContext(RegistrationContext); - const { t } = useTranslation(); - const [topicName, setTopicName] = useState('-'); - const [agencyName, setAgencyName] = useState('-'); +}) => { const { fromM } = useResponsive(); - useEffect(() => { - if (preselectedTopicName) { - setTopicName(preselectedTopicName); - } else { - setTopicName('-'); - } - if (preselectedAgency) { - setAgencyName(preselectedAgency?.name); - } else { - setAgencyName('-'); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [preselectedAgency, preselectedTopicName]); + const { hasConsultantError, hasTopicError, hasAgencyError } = + useContext(RegistrationContext); + const { + agency: preselectedAgency, + topic: preselectedTopic, + consultant: preselectedConsultant + } = useContext(UrlParamsContext); - if ( - !(preselectedData.includes('tid') || preselectedData.includes('aid')) && - (!isConsultantLink || !hasDrawer) - ) { + if (!preselectedTopic && !preselectedAgency && !preselectedConsultant) { return null; } @@ -58,104 +41,38 @@ export const PreselectionBox: VFC<{ borderRadius: '4px', border: '1px solid #c6c5c4' }} + data-cy="preselected" + data-cy-preselected-consultant={ + preselectedConsultant?.consultantId + } + data-cy-preselected-consultant-error={hasConsultantError} + data-cy-preselected-agency={preselectedAgency?.id} + data-cy-preselected-agency-error={hasAgencyError} + data-cy-preselected-topic={preselectedTopic?.id} + data-cy-preselected-topic-error={hasTopicError} > - {isConsultantLink && - (hasConsultantError ? ( - - - ) : ( - - {' '} - {t('registration.consultantlink')} - - ))} - {(preselectedTopicName || hasTopicError) && - !isConsultantLink && ( - <> - - {t('registration.topic.summary')} - - {hasTopicError && !preselectedTopicName ? ( - - <> - - ) : ( - - {preselectedTopicName} - - )} - - )} - {(preselectedAgency || hasAgencyError) && !isConsultantLink && ( + {preselectedConsultant ? ( + + ) : ( <> - - {t('registration.agency.summary')} - - {hasAgencyError && !preselectedAgency ? ( - - <> - - ) : ( - {preselectedAgency?.name} - )} + /> + )} - {hasDrawer && !fromM && ( - - )} + {hasDrawer && !fromM && } ); }; diff --git a/src/extensions/components/registration/preselectionDrawer/preselectionDrawer.tsx b/src/extensions/components/registration/preselectionDrawer/preselectionDrawer.tsx index a6746ada9..dc88c4b6a 100644 --- a/src/extensions/components/registration/preselectionDrawer/preselectionDrawer.tsx +++ b/src/extensions/components/registration/preselectionDrawer/preselectionDrawer.tsx @@ -1,29 +1,51 @@ import * as React from 'react'; -import { useState, VFC, useContext } from 'react'; +import { useState, useContext } from 'react'; import { Box, Drawer, Typography, Button } from '@mui/material'; import { ReactComponent as Loader } from './loader.svg'; import { ReactComponent as Logo } from './logo.svg'; import { useTranslation } from 'react-i18next'; import { PreselectionError } from '../preselectionError/PreselectionError'; import { RegistrationContext } from '../../../../globalState'; +import { UrlParamsContext } from '../../../../globalState/provider/UrlParamsProvider'; -export const PreselectionDrawer: VFC<{ - topicName: string; - agencyName: string; -}> = ({ topicName, agencyName }) => { - const { - hasTopicError, - hasAgencyError, - hasConsultantError, - isConsultantLink - } = useContext(RegistrationContext); +const ConsultantPreslection = ({ hasError }) => { + const { t } = useTranslation(); + + if (hasError) { + return ( + + ); + } + + return ( + + {t('registration.consultantlink')} + + ); +}; + +export const PreselectionDrawer = () => { const { t } = useTranslation(); - const [loading, isLoading] = useState(true); + + const { hasTopicError, hasAgencyError, hasConsultantError } = + useContext(RegistrationContext); + const { + agency: preselectedAgency, + topic: preselectedTopic, + consultant: preselectedConsultant + } = useContext(UrlParamsContext); + + const [isloading, setIsloading] = useState(true); const [isOverlayDrawerOpen, setIsOverlayDrawerOpen] = useState(true); setTimeout(() => { - isLoading(false); + setIsloading(false); }, 3000); return ( @@ -63,7 +85,7 @@ export const PreselectionDrawer: VFC<{ p: '24px' }} > - {loading && ( + {isloading && ( {t('app.claim')} - {!loading && ( + {!isloading && ( - {isConsultantLink ? ( - hasConsultantError ? ( - - ) : ( - - {t('registration.consultantlink')} - - ) + {preselectedConsultant ? ( + ) : ( <> {t('registration.topic.summary')} - {hasTopicError && topicName === '-' ? ( + {hasTopicError ? ( + /> ) : ( - {topicName} + {preselectedTopic.name} )} {t('registration.agency.summary')} - {hasAgencyError && agencyName === '-' ? ( + {hasAgencyError ? ( + /> ) : ( - {agencyName} + {preselectedAgency.name} )} diff --git a/src/extensions/components/registration/stepBar/StepBar.tsx b/src/extensions/components/registration/stepBar/StepBar.tsx index f8bcce859..d216b01fe 100644 --- a/src/extensions/components/registration/stepBar/StepBar.tsx +++ b/src/extensions/components/registration/stepBar/StepBar.tsx @@ -15,7 +15,12 @@ export const StepBar: VFC = ({ const { t } = useTranslation(); return ( <> - + { - cy.mount(); - cy.get('h5').should( - 'contains.text', - 'registration.stepbar.step 1 registration.stepbar.of 3' - ); -}); - -it('show maxNumberofsteps if currentStep > maxNumberOfSteps', () => { - cy.mount(); - cy.get('h5').should( - 'contains.text', - 'registration.stepbar.step 3 registration.stepbar.of 3' - ); -}); diff --git a/src/extensions/components/registration/topicSelection/TopicSelection.tsx b/src/extensions/components/registration/topicSelection/TopicSelection.tsx index 94865011f..28554ee04 100644 --- a/src/extensions/components/registration/topicSelection/TopicSelection.tsx +++ b/src/extensions/components/registration/topicSelection/TopicSelection.tsx @@ -1,3 +1,4 @@ +import * as React from 'react'; import { Typography, Accordion, @@ -9,11 +10,18 @@ import { RadioGroup, FormControl } from '@mui/material'; -import * as React from 'react'; -import { VFC, useContext, useState, useEffect } from 'react'; +import { + VFC, + useContext, + useState, + useEffect, + SetStateAction, + Dispatch, + useCallback +} from 'react'; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import { useTranslation } from 'react-i18next'; -import { RegistrationContext } from '../../../../globalState'; +import { RegistrationContext, RegistrationData } from '../../../../globalState'; import { apiGetTopicGroups } from '../../../../api/apiGetTopicGroups'; import { apiGetTopicsData } from '../../../../api/apiGetTopicsData'; import { @@ -24,117 +32,117 @@ import { MetaInfo } from '../metaInfo/MetaInfo'; import { Loading } from '../../../../components/app/Loading'; import TaskAltIcon from '@mui/icons-material/TaskAlt'; import { REGISTRATION_DATA_VALIDATION } from '../registrationDataValidation'; +import { UrlParamsContext } from '../../../../globalState/provider/UrlParamsProvider'; export const TopicSelection: VFC<{ + onChange: Dispatch>>; nextStepUrl: string; onNextClick(): void; -}> = ({ nextStepUrl, onNextClick }) => { +}> = ({ onChange, nextStepUrl, onNextClick }) => { + const { setDisabledNextButton, registrationData } = + useContext(RegistrationContext); const { - setDisabledNextButton, - setDataForSessionStorage, - sessionStorageRegistrationData, - preselectedData, - preselectedAgency, - isConsultantLink, - consultant, - hasAgencyError - } = useContext(RegistrationContext); + topic: preselectedTopic, + agency: preselectedAgency, + consultant: preselectedConsultant + } = useContext(UrlParamsContext); const { t } = useTranslation(); const [value, setValue] = useState( - sessionStorageRegistrationData.mainTopicId || undefined + registrationData.mainTopicId || undefined ); - const [topicGroups, setTopicGroups] = useState([]); - const [topics, setTopics] = useState([]); - const [isLoading, setIsLoading] = useState(false); + const [topicGroups, setTopicGroups] = useState(); + const [topics, setTopics] = useState(); const [listView, setListView] = useState(false); const [topicGroupId, setTopicGroupId] = useState( - sessionStorageRegistrationData.topicGroupId || undefined + registrationData.topicGroupId || undefined ); - const getTopic = (mainTopicId: number) => { - return topics?.find((topic) => topic?.id === mainTopicId); - }; + const getTopic = useCallback( + (mainTopicId: number) => + topics?.find((topic) => topic?.id === mainTopicId), + [topics] + ); useEffect(() => { if ( REGISTRATION_DATA_VALIDATION.mainTopicId.validation( value?.toString() ) && - (topicGroups.some((topicGroup) => + (topicGroups?.some((topicGroup) => topicGroup.topicIds.includes(value) ) || - (listView && topics.some((topic) => topic.id === value))) + (listView && topics?.some((topic) => topic.id === value))) ) { setDisabledNextButton(false); } }, [setDisabledNextButton, value, topicGroups, listView, topics]); useEffect(() => { - if ( - (preselectedData.includes('aid') && !hasAgencyError) || - (isConsultantLink && consultant) - ) { - setListView(true); - } else { - setListView(false); - } - }, [consultant, hasAgencyError, isConsultantLink, preselectedData]); + setListView(!!(preselectedAgency || preselectedConsultant)); + }, [preselectedConsultant, preselectedAgency]); useEffect(() => { - if (topics.length === 1) { + if (topics?.length === 1) { setValue(topics[0].id); - setDataForSessionStorage({ - mainTopicId: topics[0].id + onChange({ + mainTopic: topics[0] }); } - }, [setDataForSessionStorage, topics]); + }, [topics, onChange]); useEffect(() => { - const getFilteredTopics = (topics: TopicsDataInterface[]) => { - if (preselectedData.includes('aid') && !hasAgencyError) { - const topicIds = preselectedAgency?.topicIds; - return topics?.filter((topic) => topicIds.includes(topic.id)); - } - if (isConsultantLink && consultant) { - const topicIds = consultant?.agencies - .map((agency) => agency.topicIds) - .flat(); - return topics?.filter((topic) => topicIds.includes(topic.id)); - } - return topics; - }; + const filterConsultantTopics = (t) => + !preselectedConsultant || + preselectedConsultant.agencies.some((a) => + a.topicIds?.includes(t.id) + ); + + const filterAgencyTopics = (t) => + !preselectedAgency || preselectedAgency.topicIds?.includes(t.id); + + const getFilteredTopics = (topics: TopicsDataInterface[]) => + topics + // Filter topic by preselected topic + .filter( + (t) => !preselectedTopic || t.id === preselectedTopic?.id + ) + // Filter topics by consultant topics + .filter(filterConsultantTopics) + // Filter topics by preselected agency + .filter(filterAgencyTopics); (async () => { + setTopics(undefined); + setTopicGroups(undefined); + + const topicsResponse = await apiGetTopicsData(); + const topics = getFilteredTopics(topicsResponse); try { - setIsLoading(true); + const topicIds = topics.map((t) => t.id); const topicGroupsResponse = await apiGetTopicGroups(); - const topicsResponse = await apiGetTopicsData(); - - setTopics(getFilteredTopics(topicsResponse)); + //const filer setTopicGroups( topicGroupsResponse.data.items .filter((topicGroup) => topicGroup.topicIds.length > 0) + .filter((topicGroup) => + topicGroup.topicIds.some(topicIds.includes) + ) .sort((a, b) => { if (a.name === b.name) return 0; return a.name < b.name ? -1 : 1; }) ); - setIsLoading(false); } catch { - setTopics([]); setTopicGroups([]); + setListView(true); } + + setTopics(topics); })(); - }, [ - consultant, - hasAgencyError, - isConsultantLink, - preselectedAgency, - preselectedData - ]); + }, [preselectedConsultant, preselectedAgency, preselectedTopic]); return ( <> - {topics.length === 1 ? ( + {topics?.length === 1 ? ( {t('registration.topic.oneResult')} @@ -148,7 +156,7 @@ export const TopicSelection: VFC<{ )} - {isLoading ? ( + {topics === undefined || topicGroups === undefined ? ( - {topicGroups && topics && listView - ? topics + {listView + ? (topics || []) .sort((a, b) => { if (a.name === b.name) return 0; return a.name < b.name ? -1 : 1; }) .map((topic, index) => ( - + setValue(undefined) + } + onOverlayOpen={() => + setValue(topic.id) + } + onChange={() => { + setValue(topic.id); + onChange({ + mainTopic: topic + }); }} - > - { - setValue(topic.id); - setDataForSessionStorage( - { - mainTopicId: - topic?.id - } - ); - }} - checked={ - value === topic?.id - } - checkedIcon={ - topics.length === - 1 ? ( - - ) : undefined - } - icon={ - topics.length === - 1 ? ( - - ) : undefined - } - /> - } - label={ - - - {topic?.name} - - - } - /> - {topic?.description && ( - - setValue(undefined) - } - backButtonLabel={t( - 'registration.topic.infoOverlay.backButtonLabel' - )} - nextButtonLabel={t( - 'registration.topic.infoOverlay.nextButtonLabel' - )} - nextStepUrl={nextStepUrl} - onNextClick={onNextClick} - onOverlayOpen={() => { - setDataForSessionStorage( - { - mainTopicId: - topic.id - } - ); - setValue(topic.id); - }} - /> - )} - + /> )) - : topicGroups.map((topicGroup) => ( + : (topicGroups || []).map((topicGroup) => ( - + {topicGroup.topicIds .map((t) => getTopic(t)) + .filter(Boolean) .sort((a, b) => { if (a.name === b.name) return 0; @@ -324,109 +276,48 @@ export const TopicSelection: VFC<{ : 1; }) .map((topic, index) => ( - { + setValue(undefined); + setTopicGroupId( + undefined + ); }} - > - { - setValue( - topic.id - ); - setTopicGroupId( - topicGroup.id - ); - setDataForSessionStorage( - { - mainTopicId: - topic?.id, - topicGroupId: - topicGroup?.id - } - ); - }} - checked={ - value === - topic?.id && - topicGroup.id === - topicGroupId - } - /> - } - label={ - - - { - topic?.name - } - - - } - /> - {topic.description && ( - - setValue( - undefined - ) - } - backButtonLabel={t( - 'registration.topic.infoOverlay.backButtonLabel' - )} - nextButtonLabel={t( - 'registration.topic.infoOverlay.nextButtonLabel' - )} - nextStepUrl={ - nextStepUrl - } - onNextClick={ - onNextClick - } - onOverlayOpen={() => { - setDataForSessionStorage( - { - mainTopicId: - topic.id, - topicGroupId: - topicGroup.id - } - ); - setValue( - topic.id - ); - setTopicGroupId( - topicGroup.id - ); - }} - /> - )} - + onOverlayOpen={() => { + setValue(topic.id); + setTopicGroupId( + topicGroup.id + ); + }} + checked={ + value === + topic.id && + topicGroup.id === + topicGroupId + } + onChange={() => { + setValue(topic.id); + setTopicGroupId( + topicGroup.id + ); + onChange({ + mainTopic: + topic, + topicGroupId: + topicGroup?.id + }); + }} + /> ))} @@ -437,3 +328,80 @@ export const TopicSelection: VFC<{ ); }; + +const TopicSelect = ({ + topics, + topic, + index, + nextStepUrl, + onNextClick, + onChange, + onOverlayClose, + onOverlayOpen, + checked +}) => { + const { t } = useTranslation(); + + return ( + + + ) : undefined + } + icon={ + topics.length === 1 ? ( + + ) : undefined + } + /> + } + label={ + + {topic?.name} + + } + /> + {topic?.description && ( + onOverlayClose(topic)} + onOverlayOpen={() => onOverlayOpen(topic)} + /> + )} + + ); +}; diff --git a/src/extensions/components/registration/topicSelection/topicSelection.cy.tsx b/src/extensions/components/registration/topicSelection/topicSelection.cy.tsx deleted file mode 100644 index eb6eaded4..000000000 --- a/src/extensions/components/registration/topicSelection/topicSelection.cy.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import { TopicSelection } from './TopicSelection'; -import { endpoints } from '../../../../resources/scripts/endpoints'; -import { RegistrationProvider } from '../../../../globalState'; -import { BrowserRouter as Router } from 'react-router-dom'; - -it('Get accordion content', () => { - cy.fixture('service.topicGroups.json').then((data) => { - cy.intercept(new RegExp(`${endpoints.topicGroups}*`), data).as( - 'topicGroups' - ); - }); - cy.fixture('service.topics.json').then((data) => { - cy.intercept(new RegExp(`${endpoints.topicsData}*`), data).as('topics'); - }); - cy.mount( - - - {}} /> - - - ); - cy.get('h4').should('contains.text', 'Alter'); -}); diff --git a/src/extensions/components/registration/welcomeScreen/WelcomeScreen.tsx b/src/extensions/components/registration/welcomeScreen/WelcomeScreen.tsx index 146382005..da74de364 100644 --- a/src/extensions/components/registration/welcomeScreen/WelcomeScreen.tsx +++ b/src/extensions/components/registration/welcomeScreen/WelcomeScreen.tsx @@ -5,17 +5,16 @@ import CreateIcon from '@mui/icons-material/Create'; import ChatIcon from '@mui/icons-material/Chat'; import MailIcon from '@mui/icons-material/Mail'; import LockIcon from '@mui/icons-material/Lock'; -import { Link as RouterLink, useLocation } from 'react-router-dom'; -import { useMemo, VFC } from 'react'; +import { Link as RouterLink } from 'react-router-dom'; +import { useMemo } from 'react'; import { PreselectionBox } from '../preselectionBox/PreselectionBox'; interface WelcomeScreenProps { nextStepUrl: string; } -export const WelcomeScreen: VFC = ({ nextStepUrl }) => { +export const WelcomeScreen = ({ nextStepUrl }: WelcomeScreenProps) => { const { t } = useTranslation(); - const { search } = useLocation(); const infoDefinitions = useMemo( () => [ @@ -73,7 +72,10 @@ export const WelcomeScreen: VFC = ({ nextStepUrl }) => { {t('registration.welcomeScreen.subline')} {infoDefinitions.map((info) => ( - + {info.icon} {info.headline} @@ -112,7 +114,8 @@ export const WelcomeScreen: VFC = ({ nextStepUrl }) => { sx={{ mt: { xs: '8px', md: '16px' } }} variant="contained" component={RouterLink} - to={`${nextStepUrl}${search}`} + to={nextStepUrl} + data-cy="button-register" > {t('registration.welcomeScreen.register.buttonLabel')} diff --git a/src/extensions/components/registration/zipcodeInput/ZipcodeInput.tsx b/src/extensions/components/registration/zipcodeInput/ZipcodeInput.tsx index 5d547e10d..4f132b2a9 100644 --- a/src/extensions/components/registration/zipcodeInput/ZipcodeInput.tsx +++ b/src/extensions/components/registration/zipcodeInput/ZipcodeInput.tsx @@ -1,33 +1,35 @@ import { InputAdornment, Typography } from '@mui/material'; import * as React from 'react'; import FmdGoodIcon from '@mui/icons-material/FmdGood'; -import { useState, VFC, useContext, useEffect } from 'react'; +import { + useState, + VFC, + useContext, + useEffect, + Dispatch, + SetStateAction +} from 'react'; import { useTranslation } from 'react-i18next'; import { Input } from '../../../../components/input/input'; -import { RegistrationContext } from '../../../../globalState'; +import { RegistrationContext, RegistrationData } from '../../../../globalState'; import { REGISTRATION_DATA_VALIDATION } from '../registrationDataValidation'; -export const ZipcodeInput: VFC = () => { +export const ZipcodeInput: VFC<{ + onChange: Dispatch>>; +}> = ({ onChange }) => { const { t } = useTranslation(); - const { - setDisabledNextButton, - setDataForSessionStorage, - sessionStorageRegistrationData - } = useContext(RegistrationContext); - const [value, setValue] = useState( - sessionStorageRegistrationData.zipcode || '' - ); + const { setDisabledNextButton, registrationData } = + useContext(RegistrationContext); + const [value, setValue] = useState(registrationData.zipcode || ''); useEffect(() => { if (REGISTRATION_DATA_VALIDATION.zipcode.validation(value)) { setDisabledNextButton(false); - setDataForSessionStorage({ zipcode: value }); + onChange({ zipcode: value }); } else { setDisabledNextButton(true); } - - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [value]); + }, [setDisabledNextButton, onChange, value]); return ( <> @@ -40,6 +42,9 @@ export const ZipcodeInput: VFC = () => { {t('registration.zipcode.bullet1')} {t('registration.zipcode.bullet2')} { - cy.mount( - - - - - - ); - cy.get('label').should('contains.text', 'registration.zipcode.label'); -}); - -it('shows correct value', () => { - cy.mount( - - - - - - ); - cy.get('input').type('12345'); - cy.get('input').invoke('val').should('equal', '12345'); -}); - -it('show invalid input onBlur', () => { - cy.mount( - - - - - - ); - cy.get('input').type('123'); - cy.get('body').click(0, 0); - cy.get('input').should('have.attr', 'aria-invalid', 'true'); -}); - -it('does not show wrong characters', () => { - cy.mount( - - - - - - ); - cy.get('input').type('abc123'); - cy.get('input').invoke('val').should('equal', '123'); -}); diff --git a/src/extensions/components/stage/stage.styles.scss b/src/extensions/components/stage/stage.styles.scss index 3af6a0cfb..81d2ac3d5 100644 --- a/src/extensions/components/stage/stage.styles.scss +++ b/src/extensions/components/stage/stage.styles.scss @@ -83,7 +83,7 @@ $animation-easing-title: cubic-bezier(0, 0, 0.5, 1); } } - &--animation-finished { + &--ready { transition-delay: unset; } diff --git a/src/extensions/components/stage/stage.tsx b/src/extensions/components/stage/stage.tsx index 630813fd5..820cdecbf 100644 --- a/src/extensions/components/stage/stage.tsx +++ b/src/extensions/components/stage/stage.tsx @@ -52,7 +52,7 @@ export const Stage = ({ className={clsx(className, 'stage', { 'stage--no-animation': !hasAnimation, 'stage--open': isOpen || !hasAnimation, - 'stage--animation-finished': hasAnimationFinished + 'stage--ready': hasAnimationFinished })} data-cy="stage" > diff --git a/src/extensions/cypress/cypress.json b/src/extensions/cypress/cypress.json new file mode 100644 index 000000000..e11cdcc0a --- /dev/null +++ b/src/extensions/cypress/cypress.json @@ -0,0 +1,12 @@ +{ + "e2e": { + "excludeSpecPattern": [ + "cypress/e2e/**/registration/base.cy.ts", + "cypress/e2e/**/registration/consultingType.cy.ts", + "cypress/e2e/**/registration/topic.cy.ts", + "cypress/e2e/**/messages/attachments/informal.cy.ts", + "cypress/e2e/**/login.cy.ts" + ], + "specPattern": ["src/extensions/cypress/e2e/**/*.cy.ts"] + } +} diff --git a/src/extensions/cypress/e2e/login.cy.ts b/src/extensions/cypress/e2e/login.cy.ts new file mode 100644 index 000000000..1dbab6164 --- /dev/null +++ b/src/extensions/cypress/e2e/login.cy.ts @@ -0,0 +1,37 @@ +import { + closeWebSocketServer, + mockWebSocket, + startWebSocketServer +} from '../../../../cypress/support/websocket'; +import { config } from '../../resources/scripts/config'; + +describe('Login', () => { + before(() => { + startWebSocketServer(); + }); + + after(() => { + closeWebSocketServer(); + }); + + beforeEach(() => { + cy.willReturn('frontend.settings', config); + mockWebSocket(); + }); + + it('should be able to login', () => { + cy.login(); + + cy.get('#appRoot').should('exist'); + }); + + it('displays the consultingtype page at the root', () => { + cy.visit('/'); + cy.contains('Willkommen bei der Online-Beratung'); + }); + + it('displays the login for resorts', () => { + cy.visit('/suchtberatung'); + cy.contains('Login'); + }); +}); diff --git a/src/extensions/globalState/index.ts b/src/extensions/globalState/index.ts deleted file mode 100644 index 1555ddadb..000000000 --- a/src/extensions/globalState/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './interfaces/ConsultingTypeGroupInterface'; diff --git a/src/extensions/globalState/interfaces/ConsultingTypeGroupInterface.ts b/src/extensions/globalState/interfaces/ConsultingTypeGroupInterface.ts deleted file mode 100644 index 257513efc..000000000 --- a/src/extensions/globalState/interfaces/ConsultingTypeGroupInterface.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface ConsultingTypeGroupChildInterface { - id: number; - titles: { - default: string; - long: string; - }; -} - -export interface ConsultingTypeGroupInterface { - title: string; - consultingTypes: Array; -} diff --git a/src/extensions/initApp.tsx b/src/extensions/initApp.tsx index 9a56184f1..54d3e427a 100644 --- a/src/extensions/initApp.tsx +++ b/src/extensions/initApp.tsx @@ -1,36 +1,72 @@ import * as React from 'react'; import * as ReactDOM from 'react-dom'; +import { ThemeProvider } from '@mui/material'; import { App } from '../components/app/app'; import { Stage } from './components/stage/stage'; -import { ConsultingTypes } from './components/consultingTypes/ConsultingTypes'; import { Imprint } from './components/legalInformationLinks/Imprint'; import { DataProtection } from './components/legalInformationLinks/DataProtection'; import { config, legalLinks } from './resources/scripts/config'; +import { UrlParamsProvider } from '../globalState/provider/UrlParamsProvider'; +import { RegistrationProvider } from '../globalState'; +import { lazy } from 'react'; +import '../resources/styles/mui-variables-mapping.scss'; +import theme from './theme'; +import { Redirect } from 'react-router-dom'; + +const Registration = lazy(() => + import('./components/registration/Registration').then((m) => ({ + default: m.Registration + })) +); + +const NewRegistration = () => ( + + + + + +); ReactDOM.render( - + ( + + ) }, - component: Imprint - }, - { - route: { - path: legalLinks.privacy + { + route: { + path: legalLinks.imprint + }, + component: Imprint }, - component: DataProtection - } - ]} - stageComponent={Stage} - />, + { + route: { + path: legalLinks.privacy + }, + component: DataProtection + } + ]} + stageComponent={Stage} + /> + , document.getElementById('appRoot') ); diff --git a/src/extensions/initError.tsx b/src/extensions/initError.tsx deleted file mode 100644 index 0f588f629..000000000 --- a/src/extensions/initError.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import * as React from 'react'; -import * as ReactDOM from 'react-dom'; -import { Error } from '../components/error/Error'; -import { config } from './resources/scripts/config'; - -ReactDOM.render( - , - document.getElementById('errorRoot') -); diff --git a/src/extensions/pages/app.html b/src/extensions/pages/app.html index 4ff1af7e3..7d37f67a4 100644 --- a/src/extensions/pages/app.html +++ b/src/extensions/pages/app.html @@ -1,4 +1,4 @@ - + @@ -28,7 +28,6 @@ -