From a21127a56611febc19ac1874ddf0ca93315b895b Mon Sep 17 00:00:00 2001 From: GPortas Date: Mon, 31 Jul 2023 12:23:45 +0100 Subject: [PATCH 01/37] Added: beta testing deployment GitHub action --- .github/workflows/deploy-beta-testing.yml | 98 +++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 .github/workflows/deploy-beta-testing.yml diff --git a/.github/workflows/deploy-beta-testing.yml b/.github/workflows/deploy-beta-testing.yml new file mode 100644 index 000000000..b7161b6e9 --- /dev/null +++ b/.github/workflows/deploy-beta-testing.yml @@ -0,0 +1,98 @@ +name: 'Deploy to Beta Testing' + +on: + push: + branches: + - develop + +jobs: + build: + runs-on: ubuntu-latest + environment: beta-testing + + steps: + - uses: actions/checkout@v3 + + - uses: actions/setup-node@v3 + with: + node-version: 18 + cache: 'npm' + + - name: Create .npmrc + run: | + cp .npmrc.example .npmrc + sed -i -e 's//${{ secrets.GITHUB_TOKEN }}/g' .npmrc + sed -i -e 's//${{ secrets.NPM_AUTH_TOKEN }}/g' .npmrc + + - name: Install Dependencies + run: npm install + + - name: Build Dataverse UI Library + working-directory: packages/design-system + run: npm run build + + - name: Create and populate .env file + env: + DATAVERSE_BACKEND_URL: ${{ secrets.DATAVERSE_BACKEND_URL }} + run: | + touch .env + echo VITE_DATAVERSE_BACKEND_URL="$DATAVERSE_BACKEND_URL" >> .env + shell: bash + + - name: Build with base path + run: npm run build -- --base=/spa + + - uses: actions/upload-artifact@v3 + with: + name: built-site + path: ./dist + + deploy-to-payara: + needs: build + runs-on: ubuntu-latest + environment: beta-testing + + steps: + - uses: actions/checkout@v3 + + - uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: '11' + + - uses: actions/download-artifact@v3 + with: + name: built-site + path: ./dist + + - name: Get branch name + id: branch-name + uses: tj-actions/branch-names@v6 + + - name: Build war file + working-directory: ./deployment/payara + run: mvn package "-Dversion=${{ steps.branch-name.outputs.current_branch }}" + + - name: Copy war file to remote instance + uses: appleboy/scp-action@master + with: + host: ${{ secrets.PAYARA_INSTANCE_HOST }} + username: ${{ secrets.PAYARA_INSTANCE_USERNAME }} + key: ${{ secrets.PAYARA_INSTANCE_SSH_PRIVATE_KEY }} + source: './deployment/payara/target/dataverse-frontend.war' + target: '/home/${{ secrets.PAYARA_INSTANCE_USERNAME }}' + overwrite: true + + - name: Execute payara war deployment remotely + uses: appleboy/ssh-action@v0.1.8 + with: + host: ${{ secrets.PAYARA_INSTANCE_HOST }} + username: ${{ secrets.PAYARA_INSTANCE_USERNAME }} + key: ${{ secrets.PAYARA_INSTANCE_SSH_PRIVATE_KEY }} + script: | + APPLICATION_NAME=dataverse-frontend + APPLICATION_WAR_PATH=deployment/payara/target/$APPLICATION_NAME.war + ASADMIN='/usr/local/payara5/bin/asadmin --user admin' + DATAVERSE_FRONTEND=`$ASADMIN list-applications |grep $APPLICATION_NAME |awk '{print $1}'` + $ASADMIN undeploy $DATAVERSE_FRONTEND + $ASADMIN deploy --name $APPLICATION_NAME --contextroot /spa $APPLICATION_WAR_PATH From a20339226ec35757da207c9d5b6f9cfe02ee5bc8 Mon Sep 17 00:00:00 2001 From: GPortas Date: Mon, 31 Jul 2023 12:38:16 +0100 Subject: [PATCH 02/37] Added: README section about Beta Testing Environment --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index c689fccac..a119c068a 100644 --- a/README.md +++ b/README.md @@ -180,6 +180,19 @@ It is important that the remote instance is correctly pre-configured, with the P A base path for the frontend application can be established on the remote server by setting the corresponding field in the workflow inputs. This mechanism prevents conflicts between the frontend application and any pre-existing deployed application running on Payara, which can potentially be a Dataverse backend. This way, only the routes with the base path included will redirect to the frontend application. +#### Beta Testing Environment + +To make the SPA Frontend accesible and testable by people interested in the project, there is a remote beta testing environment that includes the latest changes developed both for the frontend application and the Dataverse backend application (develop branches). + +This environment follows the "all-in-one" solution described above, where both applications coexist on a Payara server. + +Environment updates are carried out automatically through GitHub actions, present both in this repository and in the Dataverse backend repository, which deploy the develop branches when any change is pushed to them. + +The environment is accessible through the following URLs: + +- SPA: http://ec2-3-210-184-82.compute-1.amazonaws.com/spa +- JSF: http://ec2-3-210-184-82.compute-1.amazonaws.com + ## Changes from the Style Guide The design system and frontend in this repo are inspired by the Dataverse Project [Style Guide](https://guides.dataverse.org/en/latest/style/index.html), but the following changes have been made, especially for accessibility. From d12f01a5abd0737c66c20bf8d3165def896c3884 Mon Sep 17 00:00:00 2001 From: Guillermo Portas Date: Wed, 2 Aug 2023 16:00:07 +0100 Subject: [PATCH 03/37] Changed: updated beta testing environment URL in the README Co-authored-by: Philip Durbin --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a119c068a..efb3c33db 100644 --- a/README.md +++ b/README.md @@ -190,8 +190,8 @@ Environment updates are carried out automatically through GitHub actions, presen The environment is accessible through the following URLs: -- SPA: http://ec2-3-210-184-82.compute-1.amazonaws.com/spa -- JSF: http://ec2-3-210-184-82.compute-1.amazonaws.com +- SPA: https://beta.dataverse.org/spa +- JSF: https://beta.dataverse.org ## Changes from the Style Guide From 01fb15bdccbc022cee072d079163f621d7c11e3a Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Fri, 4 Aug 2023 11:05:48 -0400 Subject: [PATCH 04/37] add demo video to README #132 --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index efb3c33db..eecad2e5f 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,10 @@ [![Tests](https://github.com/IQSS/dataverse-frontend/actions/workflows/test.yml/badge.svg)](https://github.com/IQSS/dataverse-frontend/actions/workflows/test.yml) [![Unit Tests Coverage](https://coveralls.io/repos/github/IQSS/dataverse-frontend/badge.svg?branch=develop)](https://coveralls.io/github/IQSS/dataverse-frontend?branch=develop) +## Demo videos + +- 2023-08-01: [View mode of the dataset page](https://groups.google.com/g/dataverse-community/c/cxZ3Bal_-uo/m/h3kh3iVNCwAJ) + ## Getting Started First install node >=16 and npm >=8. Recommended versions `node v19` and `npm v9`. From be64802b2aa697b89dbbe5b51d42d66a9a3f04be Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 7 Aug 2023 12:08:18 +0200 Subject: [PATCH 05/37] fix: update js-dataverse version --- dev-env/run-env.sh | 2 +- package-lock.json | 8 ++++---- package.json | 2 +- .../repositories/DatasetJSDataverseRepository.ts | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dev-env/run-env.sh b/dev-env/run-env.sh index a8a2f09cd..28ebd20c6 100755 --- a/dev-env/run-env.sh +++ b/dev-env/run-env.sh @@ -6,7 +6,7 @@ export DATAVERSE_IMAGE_TAG=$1 export COMPOSE_HTTP_TIMEOUT=200 # Timeout for Dataverse bootstrap configbaker -export DATAVERSE_BOOTSTRAP_TIMEOUT="5m" +export DATAVERSE_BOOTSTRAP_TIMEOUT="10m" echo "INFO - Setting up Dataverse on image tag ${DATAVERSE_IMAGE_TAG}..." diff --git a/package-lock.json b/package-lock.json index 1c3447df2..96d02242d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.0", "dependencies": { "@faker-js/faker": "7.6.0", - "@iqss/dataverse-client-javascript": "2.0.0-pr67.5dfc70a", + "@iqss/dataverse-client-javascript": "2.0.0-pr80.378cc1e", "@iqss/dataverse-design-system": "*", "@istanbuljs/nyc-config-typescript": "1.0.2", "@tanstack/react-table": "8.9.2", @@ -3700,9 +3700,9 @@ }, "node_modules/@iqss/dataverse-client-javascript": { "name": "@IQSS/dataverse-client-javascript", - "version": "2.0.0-pr67.5dfc70a", - "resolved": "https://npm.pkg.github.com/download/@IQSS/dataverse-client-javascript/2.0.0-pr67.5dfc70a/dc27a9a220a347fb9e5d87f6887c8e87427482c1", - "integrity": "sha512-RCBJcdv42hYvWuLDE19/AYpKZr1AL9/VIre4FJm0vd0NMd1CLoPyDjetuK70nkP8fDDWVJLTlyaer8f1RZAfSA==", + "version": "2.0.0-pr80.378cc1e", + "resolved": "https://npm.pkg.github.com/download/@IQSS/dataverse-client-javascript/2.0.0-pr80.378cc1e/2361fc91f5e8618751025871e860062307b1adf4", + "integrity": "sha512-5Omv7ZG+K+B8ddEg0X3MjqbAK/cOPnPtclpBe2sptYRH1zaX1kHwSSTTBDmfNfIZTJUOe7KEP0/FX6Xa6iRG6w==", "license": "MIT", "dependencies": { "@types/node": "^18.15.11", diff --git a/package.json b/package.json index 2b456b355..6c74c74f0 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@faker-js/faker": "7.6.0", - "@iqss/dataverse-client-javascript": "2.0.0-pr67.5dfc70a", + "@iqss/dataverse-client-javascript": "2.0.0-pr80.378cc1e", "@iqss/dataverse-design-system": "*", "@istanbuljs/nyc-config-typescript": "1.0.2", "@tanstack/react-table": "8.9.2", diff --git a/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts b/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts index 206719395..ea25c0aa2 100644 --- a/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts +++ b/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts @@ -1,7 +1,7 @@ import { DatasetRepository } from '../../domain/repositories/DatasetRepository' import { Dataset } from '../../domain/models/Dataset' import { - getDatasetByPersistentId, + getDataset, getDatasetCitation, getDatasetSummaryFieldNames, WriteError, @@ -13,7 +13,7 @@ import { JSDatasetMapper } from '../mappers/JSDatasetMapper' export class DatasetJSDataverseRepository implements DatasetRepository { getByPersistentId(persistentId: string, version?: string): Promise { - return getDatasetByPersistentId + return getDataset .execute(persistentId, this.versionToVersionId(version)) .then((jsDataset) => Promise.all([ From ff963f687a42b07e04bc157b44245db141542f3c Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 8 Aug 2023 09:55:50 +0200 Subject: [PATCH 06/37] feat(MetadataBlockInfo): integrate js-dataverse implementation to getMetadataBlockInfo --- .../domain/models/MetadataBlockInfo.ts | 5 +- .../MetadataBlockInfoJSDataverseRepository.ts | 31 ------- .../mappers/JSMetadataBlockInfoMapper.ts | 51 +++++++++++ .../MetadataBlockInfoJSDataverseRepository.ts | 17 ++++ src/sections/dataset/DatasetFactory.tsx | 2 +- .../DatasetMetadataFieldValue.tsx | 83 ++--------------- .../DatasetMetadataFieldValueFormatted.tsx | 90 +++++++++++++++++++ .../dataset/domain/models/DatasetMother.ts | 11 ++- .../domain/models/MetadataBlockInfoMother.ts | 7 +- .../dataset-metadata/DatasetMetadata.spec.tsx | 61 +++++++++++-- .../dataset-summary/SummaryFields.spec.tsx | 6 +- .../MetadataBlockInfoCitationExample.ts | 83 +++++++++++++++++ ...dataBlockInfoJSDataverseRepository.spec.ts | 25 ++++++ 13 files changed, 346 insertions(+), 126 deletions(-) delete mode 100644 src/metadata-block-info/infrastructure/MetadataBlockInfoJSDataverseRepository.ts create mode 100644 src/metadata-block-info/infrastructure/mappers/JSMetadataBlockInfoMapper.ts create mode 100644 src/metadata-block-info/infrastructure/repositories/MetadataBlockInfoJSDataverseRepository.ts create mode 100644 src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx create mode 100644 tests/e2e-integration/integration/metadata-block-info/MetadataBlockInfoCitationExample.ts create mode 100644 tests/e2e-integration/integration/metadata-block-info/MetadataBlockInfoJSDataverseRepository.spec.ts diff --git a/src/metadata-block-info/domain/models/MetadataBlockInfo.ts b/src/metadata-block-info/domain/models/MetadataBlockInfo.ts index bffa2bcc8..7fa9e53a3 100644 --- a/src/metadata-block-info/domain/models/MetadataBlockInfo.ts +++ b/src/metadata-block-info/domain/models/MetadataBlockInfo.ts @@ -1,10 +1,13 @@ export interface MetadataBlockInfo { name: string - fields: Record + fields: MetadataBlockInfoFields } +export type MetadataBlockInfoFields = Record + export interface MetadataFieldInfo { displayFormat: string } export const METADATA_FIELD_DISPLAY_FORMAT_PLACEHOLDER = '#VALUE' +export const METADATA_FIELD_DISPLAY_FORMAT_NAME_PLACEHOLDER = '#NAME' diff --git a/src/metadata-block-info/infrastructure/MetadataBlockInfoJSDataverseRepository.ts b/src/metadata-block-info/infrastructure/MetadataBlockInfoJSDataverseRepository.ts deleted file mode 100644 index 6ce2e94c4..000000000 --- a/src/metadata-block-info/infrastructure/MetadataBlockInfoJSDataverseRepository.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { MetadataBlockInfoRepository } from '../domain/repositories/MetadataBlockInfoRepository' -import { MetadataBlockInfo } from '../domain/models/MetadataBlockInfo' -import { MetadataBlockName } from '../../dataset/domain/models/Dataset' - -export class MetadataBlockInfoJSDataverseRepository implements MetadataBlockInfoRepository { - // eslint-disable-next-line unused-imports/no-unused-vars - getByName(name: string): Promise { - // TODO implement using js-dataverse - return Promise.resolve({ - name: MetadataBlockName.CITATION, - fields: { - alternativePersistentId: { displayFormat: '' }, - publicationDate: { displayFormat: '' }, - citationDate: { displayFormat: '' }, - title: { displayFormat: '' }, - subject: { displayFormat: ';' }, - author: { displayFormat: '' }, - authorName: { displayFormat: '#VALUE' }, - authorAffiliation: { displayFormat: '(#VALUE)' }, - authorIdentifierScheme: { displayFormat: '- #VALUE:' }, - authorIdentifier: { displayFormat: '#VALUE' }, - datasetContact: { displayFormat: '#VALUE' }, - datasetContactName: { displayFormat: '#VALUE' }, - datasetContactAffiliation: { displayFormat: '(#VALUE)' }, - datasetContactEmail: { displayFormat: '[#VALUE](mailto:#VALUE)' }, - dsDescription: { displayFormat: '' }, - dsDescriptionValue: { displayFormat: '#VALUE' } - } - }) - } -} diff --git a/src/metadata-block-info/infrastructure/mappers/JSMetadataBlockInfoMapper.ts b/src/metadata-block-info/infrastructure/mappers/JSMetadataBlockInfoMapper.ts new file mode 100644 index 000000000..d345c9c66 --- /dev/null +++ b/src/metadata-block-info/infrastructure/mappers/JSMetadataBlockInfoMapper.ts @@ -0,0 +1,51 @@ +import { + MetadataBlock as JSMetadataBlockInfo, + MetadataFieldInfo as JSMetadataFieldInfo +} from '@iqss/dataverse-client-javascript' +import { MetadataBlockInfo, MetadataBlockInfoFields } from '../../domain/models/MetadataBlockInfo' + +export class JSMetadataBlockInfoMapper { + static toMetadataBlockInfo(jsMetadataBlockInfo: JSMetadataBlockInfo): MetadataBlockInfo { + return { + name: jsMetadataBlockInfo.name, + fields: this.toFields(jsMetadataBlockInfo.metadataFields) + } + } + + static toFields( + jsMetadataBlockInfoFields: Record + ): MetadataBlockInfoFields { + return Object.entries(jsMetadataBlockInfoFields).reduce( + (fields: MetadataBlockInfoFields, [key, value]) => { + fields[key] = { displayFormat: this.toDisplayFormat(value.displayFormat) } + return fields + }, + {} + ) + } + + static toDisplayFormat(jsDisplayFormat: string): string { + const link = 'href="#VALUE"' + if (jsDisplayFormat.includes(link)) { + return '[#VALUE](#VALUE)' + } + + const linkWithUrl = /]*>#VALUE<\/a>/ + const match = jsDisplayFormat.match(linkWithUrl) + if (match) { + return `[#VALUE](${match[1]}/#VALUE)` + } + + const emailFormat = '#EMAIL' + if (jsDisplayFormat === emailFormat) { + return '[#VALUE](mailto:#VALUE)' + } + + const imageFormat = '
' + if (jsDisplayFormat === imageFormat) { + return '![#NAME](#VALUE)' + } + + return jsDisplayFormat + } +} diff --git a/src/metadata-block-info/infrastructure/repositories/MetadataBlockInfoJSDataverseRepository.ts b/src/metadata-block-info/infrastructure/repositories/MetadataBlockInfoJSDataverseRepository.ts new file mode 100644 index 000000000..38e5bb4d4 --- /dev/null +++ b/src/metadata-block-info/infrastructure/repositories/MetadataBlockInfoJSDataverseRepository.ts @@ -0,0 +1,17 @@ +import { MetadataBlockInfoRepository } from '../../domain/repositories/MetadataBlockInfoRepository' +import { MetadataBlockInfo } from '../../domain/models/MetadataBlockInfo' +import { + getMetadataBlockByName, + MetadataBlock as JSMetadataBlockInfo +} from '@iqss/dataverse-client-javascript' +import { JSMetadataBlockInfoMapper } from '../mappers/JSMetadataBlockInfoMapper' + +export class MetadataBlockInfoJSDataverseRepository implements MetadataBlockInfoRepository { + getByName(name: string): Promise { + return getMetadataBlockByName + .execute(name) + .then((jsMetadataBlockInfo: JSMetadataBlockInfo) => + JSMetadataBlockInfoMapper.toMetadataBlockInfo(jsMetadataBlockInfo) + ) + } +} diff --git a/src/sections/dataset/DatasetFactory.tsx b/src/sections/dataset/DatasetFactory.tsx index 875485217..e90f0e0ad 100644 --- a/src/sections/dataset/DatasetFactory.tsx +++ b/src/sections/dataset/DatasetFactory.tsx @@ -6,7 +6,7 @@ import { useAnonymized } from './anonymized/AnonymizedContext' import { AnonymizedProvider } from './anonymized/AnonymizedProvider' import { FileJSDataverseRepository } from '../../files/infrastructure/FileJSDataverseRepository' import { MetadataBlockInfoProvider } from './metadata-block-info/MetadataBlockProvider' -import { MetadataBlockInfoJSDataverseRepository } from '../../metadata-block-info/infrastructure/MetadataBlockInfoJSDataverseRepository' +import { MetadataBlockInfoJSDataverseRepository } from '../../metadata-block-info/infrastructure/repositories/MetadataBlockInfoJSDataverseRepository' const datasetRepository = new DatasetJSDataverseRepository() const fileRepository = new FileJSDataverseRepository() diff --git a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValue.tsx b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValue.tsx index 1722b4159..99f4fe514 100644 --- a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValue.tsx +++ b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValue.tsx @@ -1,16 +1,10 @@ import { ANONYMIZED_FIELD_VALUE, - DatasetMetadataFieldValue as DatasetMetadataFieldValueModel, - DatasetMetadataSubField + DatasetMetadataFieldValue as DatasetMetadataFieldValueModel } from '../../../../dataset/domain/models/Dataset' -import { MarkdownComponent } from '../../markdown/MarkdownComponent' import { useAnonymized } from '../../anonymized/AnonymizedContext' import { useTranslation } from 'react-i18next' -import { useMetadataBlockInfo } from '../../metadata-block-info/MetadataBlockInfoContext' -import { - METADATA_FIELD_DISPLAY_FORMAT_PLACEHOLDER, - MetadataBlockInfo -} from '../../../../metadata-block-info/domain/models/MetadataBlockInfo' +import { DatasetMetadataFieldValueFormatted } from './DatasetMetadataFieldValueFormatted' interface DatasetMetadataFieldValueProps { metadataFieldName: string @@ -23,19 +17,14 @@ export function DatasetMetadataFieldValue({ }: DatasetMetadataFieldValueProps) { const { anonymizedView } = useAnonymized() const isAnonymizedField = anonymizedView && metadataFieldValue == ANONYMIZED_FIELD_VALUE - const { metadataBlockInfo } = useMetadataBlockInfo() - if (isAnonymizedField) { return } return ( - ) } @@ -44,65 +33,3 @@ const AnonymizedFieldValue = () => { const { t } = useTranslation('dataset') return

{t('anonymizedFieldValue')}

} - -export function metadataFieldValueToString( - metadataFieldName: string, - metadataFieldValue: DatasetMetadataFieldValueModel, - metadataBlockInfo?: MetadataBlockInfo -): string { - const separator = metadataBlockInfo?.fields[metadataFieldName]?.displayFormat ?? '' - - if (isArrayOfObjects(metadataFieldValue)) { - return metadataFieldValue - .map((metadataSubField) => joinSubFields(metadataSubField, metadataBlockInfo)) - .join(' \n \n') - } - - if (Array.isArray(metadataFieldValue)) { - return metadataFieldValue.join(`${separator} `) - } - - if (isAnObject(metadataFieldValue)) { - return Object.values(metadataFieldValue).join(`${separator} `) - } - - return metadataFieldValue -} - -export function isArrayOfObjects(variable: unknown): variable is object[] { - if (!Array.isArray(variable)) { - return false - } - - return variable.every((item) => isAnObject(item)) -} - -function isAnObject(variable: unknown): variable is object { - return typeof variable === 'object' && variable !== null -} - -function joinSubFields( - metadataSubField: DatasetMetadataSubField, - metadataBlockInfo?: MetadataBlockInfo -) { - return Object.entries(metadataSubField) - .map(([subFieldName, subFieldValue]) => - formatSubFieldValue(subFieldValue, metadataBlockInfo?.fields[subFieldName]?.displayFormat) - ) - .join(' ') -} - -function formatSubFieldValue( - subFieldValue: string | undefined, - displayFormat: string | undefined -): string { - if (subFieldValue === undefined) { - return '' - } - - if (displayFormat === undefined) { - return subFieldValue - } - - return displayFormat.replaceAll(METADATA_FIELD_DISPLAY_FORMAT_PLACEHOLDER, subFieldValue) -} diff --git a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx new file mode 100644 index 000000000..c0bc09b14 --- /dev/null +++ b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx @@ -0,0 +1,90 @@ +import { useMetadataBlockInfo } from '../../metadata-block-info/MetadataBlockInfoContext' +import { + METADATA_FIELD_DISPLAY_FORMAT_PLACEHOLDER, + MetadataBlockInfo +} from '../../../../metadata-block-info/domain/models/MetadataBlockInfo' +import { MarkdownComponent } from '../../markdown/MarkdownComponent' +import { + DatasetMetadataFieldValue as DatasetMetadataFieldValueModel, + DatasetMetadataSubField +} from '../../../../dataset/domain/models/Dataset' + +interface DatasetMetadataFieldValueFormattedProps { + metadataFieldName: string + metadataFieldValue: DatasetMetadataFieldValueModel +} +export function DatasetMetadataFieldValueFormatted({ + metadataFieldName, + metadataFieldValue +}: DatasetMetadataFieldValueFormattedProps) { + const { metadataBlockInfo } = useMetadataBlockInfo() + const metadataFieldValueMarkdown = metadataFieldValueToMarkdownFormat( + metadataFieldName, + metadataFieldValue, + metadataBlockInfo + ) + + return +} + +export function metadataFieldValueToMarkdownFormat( + metadataFieldName: string, + metadataFieldValue: DatasetMetadataFieldValueModel, + metadataBlockInfo?: MetadataBlockInfo +): string { + const separator = metadataBlockInfo?.fields[metadataFieldName]?.displayFormat ?? '' + + if (isArrayOfObjects(metadataFieldValue)) { + return metadataFieldValue + .map((metadataSubField) => joinSubFields(metadataSubField, metadataBlockInfo)) + .join(' \n \n') + } + + if (Array.isArray(metadataFieldValue)) { + return metadataFieldValue.join(`${separator} `) + } + + if (isAnObject(metadataFieldValue)) { + return joinObjectValues(metadataFieldValue, separator) + } + + return metadataFieldValue +} + +export function isArrayOfObjects(variable: unknown): variable is object[] { + return Array.isArray(variable) && variable.every(isAnObject) +} + +function isAnObject(variable: unknown): variable is object { + return typeof variable === 'object' && variable !== null +} + +function joinObjectValues(obj: object, separator: string): string { + return Object.values(obj).join(separator) +} + +function joinSubFields( + metadataSubField: DatasetMetadataSubField, + metadataBlockInfo?: MetadataBlockInfo +): string { + return Object.entries(metadataSubField) + .map(([subFieldName, subFieldValue]) => + formatSubFieldValue(subFieldValue, metadataBlockInfo?.fields[subFieldName]?.displayFormat) + ) + .join(' ') +} + +function formatSubFieldValue( + subFieldValue: string | undefined, + displayFormat: string | undefined +): string { + if (subFieldValue === undefined) { + return '' + } + + if (displayFormat === undefined) { + return subFieldValue + } + + return displayFormat.replaceAll(METADATA_FIELD_DISPLAY_FORMAT_PLACEHOLDER, subFieldValue) +} diff --git a/tests/component/dataset/domain/models/DatasetMother.ts b/tests/component/dataset/domain/models/DatasetMother.ts index 0e84fa720..4030c52c0 100644 --- a/tests/component/dataset/domain/models/DatasetMother.ts +++ b/tests/component/dataset/domain/models/DatasetMother.ts @@ -68,13 +68,13 @@ export class DatasetMother { authorName: faker.lorem.sentence(), authorAffiliation: faker.lorem.sentence(), authorIdentifierScheme: faker.lorem.sentence(), - authorIdentifier: faker.lorem.sentence() + authorIdentifier: faker.lorem.word() }, { authorName: faker.lorem.sentence(), authorAffiliation: faker.lorem.sentence(), authorIdentifierScheme: faker.lorem.sentence(), - authorIdentifier: faker.lorem.sentence() + authorIdentifier: faker.lorem.word() } ], datasetContact: [ @@ -87,6 +87,13 @@ export class DatasetMother { { dsDescriptionValue: faker.lorem.sentence() } + ], + producer: [ + { + producerName: faker.lorem.sentence(), + producerURL: faker.internet.url(), + producerLogoURL: faker.image.imageUrl() + } ] } }, diff --git a/tests/component/metadata-block-info/domain/models/MetadataBlockInfoMother.ts b/tests/component/metadata-block-info/domain/models/MetadataBlockInfoMother.ts index 791b5b9a1..c31293d05 100644 --- a/tests/component/metadata-block-info/domain/models/MetadataBlockInfoMother.ts +++ b/tests/component/metadata-block-info/domain/models/MetadataBlockInfoMother.ts @@ -19,9 +19,12 @@ export class MetadataBlockInfoMother { datasetContact: { displayFormat: '#VALUE' }, datasetContactName: { displayFormat: '#VALUE' }, datasetContactAffiliation: { displayFormat: '(#VALUE)' }, - datasetContactEmail: { displayFormat: '#VALUE' }, + datasetContactEmail: { displayFormat: '[#VALUE](mailto:#VALUE)' }, dsDescription: { displayFormat: '' }, - dsDescriptionValue: { displayFormat: '#VALUE' } + dsDescriptionValue: { displayFormat: '#VALUE' }, + producerURL: { displayFormat: '[#VALUE](#VALUE)' }, + producerLogoURL: { displayFormat: '![#NAME](#VALUE)' }, + dateOfCollectionStart: { displayFormat: '#NAME: #VALUE ' } }, ...props } diff --git a/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx b/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx index 7cd582a20..f4718182a 100644 --- a/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx +++ b/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx @@ -7,13 +7,61 @@ import { import { AnonymizedContext } from '../../../../../src/sections/dataset/anonymized/AnonymizedContext' import { isArrayOfObjects, - metadataFieldValueToString -} from '../../../../../src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValue' + metadataFieldValueToMarkdownFormat +} from '../../../../../src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted' import { MetadataBlockInfoProvider } from '../../../../../src/sections/dataset/metadata-block-info/MetadataBlockProvider' import { MetadataBlockInfoRepository } from '../../../../../src/metadata-block-info/domain/repositories/MetadataBlockInfoRepository' import { MetadataBlockInfoMother } from '../../../metadata-block-info/domain/models/MetadataBlockInfoMother' +const extractLinksFromText = (text: string): { text: string; link: string }[] => { + const linkFormat = /(? { + const matchResult = match.match(/\[(.*?)\]\((.*?)\)/) + if (matchResult) { + const [, text, link] = matchResult + return { text, link } + } + return null + }) + .filter((match) => match !== null) as { text: string; link: string }[] +} + +const extractImagesFromText = (text: string): string[] => { + return text.match(/!\[(.*?)\]\((.*?)\)/g) || [] +} + describe('DatasetMetadata', () => { + const checkMetadataFieldValue = (metadataFieldName: string, metadataFieldValue: string) => { + const extractedLinks = extractLinksFromText(metadataFieldValue) + const extractedImages = extractImagesFromText(metadataFieldValue) + const notPlainText = extractedLinks.length > 0 || extractedImages + + if (notPlainText) { + if (extractedLinks) { + extractedLinks.forEach(({ text, link }) => { + cy.findByText(text).should('exist') + cy.findByText(text).should('have.attr', 'href', link) + }) + } + if (extractedImages) { + extractedImages.forEach((image) => { + const [, altText, imageUrl] = image.match(/!\[(.*?)\]\((.*?)\)/) || [] + cy.findByAltText(altText).should('exist') + cy.findByAltText(altText).should('have.attr', 'src', imageUrl) + }) + } + } else { + cy.findByText(metadataFieldValue).should('exist') + } + } + it('renders the metadata blocks sections titles correctly', () => { const mockDataset = DatasetMother.create() const mockMetadataBlocks = mockDataset.metadataBlocks @@ -130,7 +178,7 @@ describe('DatasetMetadata', () => { } Object.entries(metadataBlock.fields).forEach(([metadataFieldName, metadataFieldValue]) => { - const metadataFieldValueString = metadataFieldValueToString( + const metadataFieldValueString = metadataFieldValueToMarkdownFormat( metadataFieldName, metadataFieldValue, metadataBlockInfoMock @@ -138,15 +186,12 @@ describe('DatasetMetadata', () => { if (isArrayOfObjects(metadataFieldValue)) { metadataFieldValueString.split(' \n \n').forEach((fieldValue) => { - cy.findAllByText(fieldValue).should('exist') + checkMetadataFieldValue(metadataFieldName, fieldValue) }) return } - const fieldValue = cy.findAllByText(metadataFieldValueString, { - exact: false - }) - fieldValue.should('exist') + checkMetadataFieldValue(metadataFieldName, metadataFieldValueString) }) }) }) diff --git a/tests/component/sections/dataset/dataset-summary/SummaryFields.spec.tsx b/tests/component/sections/dataset/dataset-summary/SummaryFields.spec.tsx index 4124e08b1..1682e93b2 100644 --- a/tests/component/sections/dataset/dataset-summary/SummaryFields.spec.tsx +++ b/tests/component/sections/dataset/dataset-summary/SummaryFields.spec.tsx @@ -3,8 +3,8 @@ import { SummaryFields } from '../../../../../src/sections/dataset/dataset-summa import { DatasetMother } from '../../../dataset/domain/models/DatasetMother' import { isArrayOfObjects, - metadataFieldValueToString -} from '../../../../../src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValue' + metadataFieldValueToMarkdownFormat +} from '../../../../../src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted' import { MetadataBlockInfoMother } from '../../../metadata-block-info/domain/models/MetadataBlockInfoMother' import { MetadataBlockInfoRepository } from '../../../../../src/metadata-block-info/domain/repositories/MetadataBlockInfoRepository' import { MetadataBlockInfoProvider } from '../../../../../src/sections/dataset/metadata-block-info/MetadataBlockProvider' @@ -38,7 +38,7 @@ describe('DatasetSummary', () => { ) summaryFieldDescription.should('exist') - const summaryFieldValueString = metadataFieldValueToString( + const summaryFieldValueString = metadataFieldValueToMarkdownFormat( summaryFieldName, summaryFieldValue, metadataBlockInfoMock diff --git a/tests/e2e-integration/integration/metadata-block-info/MetadataBlockInfoCitationExample.ts b/tests/e2e-integration/integration/metadata-block-info/MetadataBlockInfoCitationExample.ts new file mode 100644 index 000000000..86ae7db65 --- /dev/null +++ b/tests/e2e-integration/integration/metadata-block-info/MetadataBlockInfoCitationExample.ts @@ -0,0 +1,83 @@ +export const MetadataBlockInfoCitationExample = { + name: 'citation', + fields: { + title: { displayFormat: '' }, + subtitle: { displayFormat: '' }, + alternativeTitle: { displayFormat: '' }, + alternativeURL: { displayFormat: '[#VALUE](#VALUE)' }, + otherId: { displayFormat: ':' }, + otherIdAgency: { displayFormat: '#VALUE' }, + otherIdValue: { displayFormat: '#VALUE' }, + author: { displayFormat: '' }, + authorName: { displayFormat: '#VALUE' }, + authorAffiliation: { displayFormat: '(#VALUE)' }, + authorIdentifierScheme: { displayFormat: '- #VALUE:' }, + authorIdentifier: { displayFormat: '#VALUE' }, + datasetContact: { displayFormat: '' }, + datasetContactName: { displayFormat: '#VALUE' }, + datasetContactAffiliation: { displayFormat: '(#VALUE)' }, + datasetContactEmail: { displayFormat: '[#VALUE](mailto:#VALUE)' }, + dsDescription: { displayFormat: '' }, + dsDescriptionValue: { displayFormat: '#VALUE' }, + dsDescriptionDate: { displayFormat: '(#VALUE)' }, + subject: { displayFormat: '' }, + keyword: { displayFormat: '' }, + keywordValue: { displayFormat: '#VALUE' }, + keywordVocabulary: { displayFormat: '(#VALUE)' }, + keywordVocabularyURI: { displayFormat: '[#VALUE](#VALUE)' }, + topicClassification: { displayFormat: '' }, + topicClassValue: { displayFormat: '#VALUE' }, + topicClassVocab: { displayFormat: '(#VALUE)' }, + topicClassVocabURI: { displayFormat: '[#VALUE](#VALUE)' }, + publication: { displayFormat: '' }, + publicationCitation: { displayFormat: '#VALUE' }, + publicationIDType: { displayFormat: '#VALUE: ' }, + publicationIDNumber: { displayFormat: '#VALUE' }, + publicationURL: { displayFormat: '[#VALUE](#VALUE)' }, + notesText: { displayFormat: '' }, + language: { displayFormat: '' }, + producer: { displayFormat: '' }, + producerName: { displayFormat: '#VALUE' }, + producerAffiliation: { displayFormat: '(#VALUE)' }, + producerAbbreviation: { displayFormat: '(#VALUE)' }, + producerURL: { displayFormat: '[#VALUE](#VALUE)' }, + producerLogoURL: { displayFormat: '![#NAME](#VALUE)' }, + productionDate: { displayFormat: '' }, + productionPlace: { displayFormat: '' }, + contributor: { displayFormat: ':' }, + contributorType: { displayFormat: '#VALUE ' }, + contributorName: { displayFormat: '#VALUE' }, + grantNumber: { displayFormat: ':' }, + grantNumberAgency: { displayFormat: '#VALUE' }, + grantNumberValue: { displayFormat: '#VALUE' }, + distributor: { displayFormat: '' }, + distributorName: { displayFormat: '#VALUE' }, + distributorAffiliation: { displayFormat: '(#VALUE)' }, + distributorAbbreviation: { displayFormat: '(#VALUE)' }, + distributorURL: { displayFormat: '[#VALUE](#VALUE)' }, + distributorLogoURL: { displayFormat: '![#NAME](#VALUE)' }, + distributionDate: { displayFormat: '' }, + depositor: { displayFormat: '' }, + dateOfDeposit: { displayFormat: '' }, + timePeriodCovered: { displayFormat: ';' }, + timePeriodCoveredStart: { displayFormat: '#NAME: #VALUE ' }, + timePeriodCoveredEnd: { displayFormat: '#NAME: #VALUE ' }, + dateOfCollection: { displayFormat: ';' }, + dateOfCollectionStart: { displayFormat: '#NAME: #VALUE ' }, + dateOfCollectionEnd: { displayFormat: '#NAME: #VALUE ' }, + kindOfData: { displayFormat: '' }, + series: { displayFormat: ':' }, + seriesName: { displayFormat: '#VALUE' }, + seriesInformation: { displayFormat: '#VALUE' }, + software: { displayFormat: ',' }, + softwareName: { displayFormat: '#VALUE' }, + softwareVersion: { displayFormat: '#NAME: #VALUE' }, + relatedMaterial: { displayFormat: '' }, + relatedDatasets: { displayFormat: '' }, + otherReferences: { displayFormat: '' }, + dataSources: { displayFormat: '' }, + originOfSources: { displayFormat: '' }, + characteristicOfSources: { displayFormat: '' }, + accessToSources: { displayFormat: '' } + } +} diff --git a/tests/e2e-integration/integration/metadata-block-info/MetadataBlockInfoJSDataverseRepository.spec.ts b/tests/e2e-integration/integration/metadata-block-info/MetadataBlockInfoJSDataverseRepository.spec.ts new file mode 100644 index 000000000..5eb1d0636 --- /dev/null +++ b/tests/e2e-integration/integration/metadata-block-info/MetadataBlockInfoJSDataverseRepository.spec.ts @@ -0,0 +1,25 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import { IntegrationTestsUtils } from '../IntegrationTestsUtils' +import { MetadataBlockInfoJSDataverseRepository } from '../../../../src/metadata-block-info/infrastructure/repositories/MetadataBlockInfoJSDataverseRepository' +import { MetadataBlockInfoCitationExample } from './MetadataBlockInfoCitationExample' + +chai.use(chaiAsPromised) +const expect = chai.expect + +const metadataBlockInfoExpected = MetadataBlockInfoCitationExample +const metadataBlockInfoRepository = new MetadataBlockInfoJSDataverseRepository() +describe('Metadata Block Info JSDataverse Repository', () => { + before(() => IntegrationTestsUtils.setup()) + beforeEach(() => IntegrationTestsUtils.login()) + + it('gets the metadataBlockInfo by name', async () => { + await metadataBlockInfoRepository.getByName('citation').then((metadataBlockInfo) => { + if (!metadataBlockInfo) { + throw new Error('Metadata Block Info not found') + } + + expect(metadataBlockInfo).to.deep.equal(metadataBlockInfoExpected) + }) + }) +}) From 127b6ea778ea932d136229f9d174f4d00c964419 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 8 Aug 2023 10:40:04 +0200 Subject: [PATCH 07/37] feat(MetadataBlockInfo): replace #NAME placeholder by the translated name --- .../DatasetMetadataField.tsx | 1 + .../DatasetMetadataFieldValue.tsx | 6 ++++- .../DatasetMetadataFieldValueFormatted.tsx | 18 ++++++++++--- .../dataset-metadata/DatasetMetadata.spec.tsx | 27 +++++++++++++------ .../dataset-summary/SummaryFields.spec.tsx | 4 +-- 5 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataField.tsx b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataField.tsx index 71821add0..e8b6ef7a8 100644 --- a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataField.tsx +++ b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataField.tsx @@ -30,6 +30,7 @@ export function DatasetMetadataField({ metadataFieldName={metadataFieldName} /> diff --git a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValue.tsx b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValue.tsx index 99f4fe514..4ec9b80a7 100644 --- a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValue.tsx +++ b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValue.tsx @@ -1,17 +1,20 @@ import { ANONYMIZED_FIELD_VALUE, - DatasetMetadataFieldValue as DatasetMetadataFieldValueModel + DatasetMetadataFieldValue as DatasetMetadataFieldValueModel, + MetadataBlockName } from '../../../../dataset/domain/models/Dataset' import { useAnonymized } from '../../anonymized/AnonymizedContext' import { useTranslation } from 'react-i18next' import { DatasetMetadataFieldValueFormatted } from './DatasetMetadataFieldValueFormatted' interface DatasetMetadataFieldValueProps { + metadataBlockName: MetadataBlockName metadataFieldName: string metadataFieldValue: DatasetMetadataFieldValueModel } export function DatasetMetadataFieldValue({ + metadataBlockName, metadataFieldName, metadataFieldValue }: DatasetMetadataFieldValueProps) { @@ -23,6 +26,7 @@ export function DatasetMetadataFieldValue({ return ( diff --git a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx index c0bc09b14..b3cb7d7a7 100644 --- a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx +++ b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx @@ -1,33 +1,43 @@ import { useMetadataBlockInfo } from '../../metadata-block-info/MetadataBlockInfoContext' import { + METADATA_FIELD_DISPLAY_FORMAT_NAME_PLACEHOLDER, METADATA_FIELD_DISPLAY_FORMAT_PLACEHOLDER, MetadataBlockInfo } from '../../../../metadata-block-info/domain/models/MetadataBlockInfo' import { MarkdownComponent } from '../../markdown/MarkdownComponent' import { DatasetMetadataFieldValue as DatasetMetadataFieldValueModel, - DatasetMetadataSubField + DatasetMetadataSubField, + MetadataBlockName } from '../../../../dataset/domain/models/Dataset' +import { useTranslation } from 'react-i18next' interface DatasetMetadataFieldValueFormattedProps { + metadataBlockName: MetadataBlockName metadataFieldName: string metadataFieldValue: DatasetMetadataFieldValueModel } export function DatasetMetadataFieldValueFormatted({ + metadataBlockName, metadataFieldName, metadataFieldValue }: DatasetMetadataFieldValueFormattedProps) { + const { t } = useTranslation(metadataBlockName) const { metadataBlockInfo } = useMetadataBlockInfo() - const metadataFieldValueMarkdown = metadataFieldValueToMarkdownFormat( + const valueFormatted = metadataFieldValueToDisplayFormat( metadataFieldName, metadataFieldValue, metadataBlockInfo ) + const valueFormattedWithNamesTranslated = valueFormatted.replaceAll( + METADATA_FIELD_DISPLAY_FORMAT_NAME_PLACEHOLDER, + t(`${metadataBlockName}.datasetField.${metadataFieldName}.name`) + ) - return + return } -export function metadataFieldValueToMarkdownFormat( +export function metadataFieldValueToDisplayFormat( metadataFieldName: string, metadataFieldValue: DatasetMetadataFieldValueModel, metadataBlockInfo?: MetadataBlockInfo diff --git a/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx b/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx index f4718182a..de70cdffa 100644 --- a/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx +++ b/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx @@ -7,11 +7,12 @@ import { import { AnonymizedContext } from '../../../../../src/sections/dataset/anonymized/AnonymizedContext' import { isArrayOfObjects, - metadataFieldValueToMarkdownFormat + metadataFieldValueToDisplayFormat } from '../../../../../src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted' import { MetadataBlockInfoProvider } from '../../../../../src/sections/dataset/metadata-block-info/MetadataBlockProvider' import { MetadataBlockInfoRepository } from '../../../../../src/metadata-block-info/domain/repositories/MetadataBlockInfoRepository' import { MetadataBlockInfoMother } from '../../../metadata-block-info/domain/models/MetadataBlockInfoMother' +import { METADATA_FIELD_DISPLAY_FORMAT_NAME_PLACEHOLDER } from '../../../../../src/metadata-block-info/domain/models/MetadataBlockInfo' const extractLinksFromText = (text: string): { text: string; link: string }[] => { const linkFormat = /(? { if (notPlainText) { if (extractedLinks) { extractedLinks.forEach(({ text, link }) => { - cy.findByText(text).should('exist') - cy.findByText(text).should('have.attr', 'href', link) + const translatedText = text.replaceAll( + METADATA_FIELD_DISPLAY_FORMAT_NAME_PLACEHOLDER, + metadataFieldName + ) + cy.findByText(translatedText).should('exist') + cy.findByText(translatedText).should('have.attr', 'href', link) }) } if (extractedImages) { extractedImages.forEach((image) => { const [, altText, imageUrl] = image.match(/!\[(.*?)\]\((.*?)\)/) || [] - cy.findByAltText(altText).should('exist') - cy.findByAltText(altText).should('have.attr', 'src', imageUrl) + const translatedAltText = altText.replaceAll( + METADATA_FIELD_DISPLAY_FORMAT_NAME_PLACEHOLDER, + metadataFieldName + ) + cy.findByAltText(translatedAltText).should('exist') + cy.findByAltText(translatedAltText).should('have.attr', 'src', imageUrl) }) } } else { @@ -178,7 +187,9 @@ describe('DatasetMetadata', () => { } Object.entries(metadataBlock.fields).forEach(([metadataFieldName, metadataFieldValue]) => { - const metadataFieldValueString = metadataFieldValueToMarkdownFormat( + const metadataFieldNameTranslated = t[metadataBlock.name].datasetField[metadataFieldName] + .name as string + const metadataFieldValueString = metadataFieldValueToDisplayFormat( metadataFieldName, metadataFieldValue, metadataBlockInfoMock @@ -186,12 +197,12 @@ describe('DatasetMetadata', () => { if (isArrayOfObjects(metadataFieldValue)) { metadataFieldValueString.split(' \n \n').forEach((fieldValue) => { - checkMetadataFieldValue(metadataFieldName, fieldValue) + checkMetadataFieldValue(metadataFieldNameTranslated, fieldValue) }) return } - checkMetadataFieldValue(metadataFieldName, metadataFieldValueString) + checkMetadataFieldValue(metadataFieldNameTranslated, metadataFieldValueString) }) }) }) diff --git a/tests/component/sections/dataset/dataset-summary/SummaryFields.spec.tsx b/tests/component/sections/dataset/dataset-summary/SummaryFields.spec.tsx index 1682e93b2..903d9664e 100644 --- a/tests/component/sections/dataset/dataset-summary/SummaryFields.spec.tsx +++ b/tests/component/sections/dataset/dataset-summary/SummaryFields.spec.tsx @@ -3,7 +3,7 @@ import { SummaryFields } from '../../../../../src/sections/dataset/dataset-summa import { DatasetMother } from '../../../dataset/domain/models/DatasetMother' import { isArrayOfObjects, - metadataFieldValueToMarkdownFormat + metadataFieldValueToDisplayFormat } from '../../../../../src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted' import { MetadataBlockInfoMother } from '../../../metadata-block-info/domain/models/MetadataBlockInfoMother' import { MetadataBlockInfoRepository } from '../../../../../src/metadata-block-info/domain/repositories/MetadataBlockInfoRepository' @@ -38,7 +38,7 @@ describe('DatasetSummary', () => { ) summaryFieldDescription.should('exist') - const summaryFieldValueString = metadataFieldValueToMarkdownFormat( + const summaryFieldValueString = metadataFieldValueToDisplayFormat( summaryFieldName, summaryFieldValue, metadataBlockInfoMock From 86a9b853b6c69f60486495d6862e30fa28d5c42c Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 8 Aug 2023 10:53:11 +0200 Subject: [PATCH 08/37] feat(publicationData,citationDate, alternativePersistentId): implement using js-dataverse --- src/dataset/infrastructure/mappers/JSDatasetMapper.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/dataset/infrastructure/mappers/JSDatasetMapper.ts b/src/dataset/infrastructure/mappers/JSDatasetMapper.ts index f14f4beb3..f63bc52ec 100644 --- a/src/dataset/infrastructure/mappers/JSDatasetMapper.ts +++ b/src/dataset/infrastructure/mappers/JSDatasetMapper.ts @@ -24,7 +24,12 @@ export class JSDatasetMapper { citation, JSDatasetMapper.toSummaryFields(jsDataset.metadataBlocks, summaryFieldsNames), jsDataset.license, - JSDatasetMapper.toMetadataBlocks(jsDataset.metadataBlocks) // TODO Add alternativePersistentId, publicationDate, citationDate + JSDatasetMapper.toMetadataBlocks( + jsDataset.metadataBlocks, + jsDataset.alternativePersistentId, + jsDataset.publicationDate, + jsDataset.citationDate + ) ).build() } From 32a8225d214e8f4c6c8fed9cb35088f9e4462946 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 8 Aug 2023 12:13:25 +0200 Subject: [PATCH 09/37] fix(dev-env): restore configbaker timeout --- dev-env/run-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-env/run-env.sh b/dev-env/run-env.sh index 28ebd20c6..a8a2f09cd 100755 --- a/dev-env/run-env.sh +++ b/dev-env/run-env.sh @@ -6,7 +6,7 @@ export DATAVERSE_IMAGE_TAG=$1 export COMPOSE_HTTP_TIMEOUT=200 # Timeout for Dataverse bootstrap configbaker -export DATAVERSE_BOOTSTRAP_TIMEOUT="10m" +export DATAVERSE_BOOTSTRAP_TIMEOUT="5m" echo "INFO - Setting up Dataverse on image tag ${DATAVERSE_IMAGE_TAG}..." From 9360e2872c2a637518209728d36d224d65bf07ca Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 8 Aug 2023 12:45:07 +0200 Subject: [PATCH 10/37] fix(e2e action): increase wait for containers' timeout --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 001a50659..f6a07776f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -49,7 +49,7 @@ jobs: run: ./run-env.sh "$E2E_DATAVERSE_IMAGE_TAG" - name: Wait for containers to be ready - run: timeout 300s sh -c 'while ! docker logs dev_dataverse_bootstrap 2>&1 | grep -q "your instance has been configured"; do sleep 2; done' + run: timeout 360s sh -c 'while ! docker logs dev_dataverse_bootstrap 2>&1 | grep -q "your instance has been configured"; do sleep 2; done' - name: Run e2e tests run: npm run test:e2e From c7cbfbe9b9ce8ed1496e1e5e634e92c63da3d0ff Mon Sep 17 00:00:00 2001 From: MellyGray Date: Thu, 10 Aug 2023 10:49:13 +0200 Subject: [PATCH 11/37] fix(typo): replace Filter Type and Filter Tag by File Type and File Tags --- public/locales/en/files.json | 4 +-- .../dataset-files/DatasetFiles.spec.tsx | 6 ++-- .../FileCriteriaFilterByTag.spec.tsx | 16 +++++----- .../FileCriteriaFilterByType.spec.tsx | 16 +++++----- .../FileCriteriaFilters.spec.tsx | 8 ++--- .../FileCriteriaForm.spec.tsx | 32 +++++++++---------- 6 files changed, 41 insertions(+), 41 deletions(-) diff --git a/public/locales/en/files.json b/public/locales/en/files.json index ee3d85536..4814b3f5d 100644 --- a/public/locales/en/files.json +++ b/public/locales/en/files.json @@ -61,10 +61,10 @@ "title": "Filter by" }, "filterByType": { - "title": "Filter Type" + "title": "File Type" }, "filterByTag": { - "title": "Filter Tag" + "title": "File Tags" }, "filterByAccess": { "title": "Access", diff --git a/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx b/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx index 08a5c3e75..701030599 100644 --- a/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx @@ -82,9 +82,9 @@ describe('DatasetFiles', () => { ) cy.findByRole('button', { name: /Sort/ }).should('not.exist') - cy.findByRole('button', { name: 'Filter Type: All' }).should('not.exist') + cy.findByRole('button', { name: 'File Type: All' }).should('not.exist') cy.findByRole('button', { name: 'Access: All' }).should('not.exist') - cy.findByRole('button', { name: 'Filter Tag: All' }).should('not.exist') + cy.findByRole('button', { name: 'File Tags: All' }).should('not.exist') cy.findByText('There are no files in this dataset.').should('exist') }) @@ -122,7 +122,7 @@ describe('DatasetFiles', () => { new FileCriteria().withSortBy(FileSortByOption.NAME_AZ) ) - cy.findByRole('button', { name: 'Filter Type: All' }).should('exist') + cy.findByRole('button', { name: 'File Type: All' }).should('exist') }) it('calls the useFiles hook with the correct parameters when searchText criteria changes', () => { diff --git a/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaFilterByTag.spec.tsx b/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaFilterByTag.spec.tsx index 96bbcffcf..d2acad803 100644 --- a/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaFilterByTag.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaFilterByTag.spec.tsx @@ -30,7 +30,7 @@ describe('FilesCriteriaFilterByTag', () => { /> ) - cy.findByRole('button', { name: 'Filter Tag: All' }).click() + cy.findByRole('button', { name: 'File Tags: All' }).click() cy.findByText('All').should('exist') cy.findByText('Document (5)').should('exist') @@ -48,11 +48,11 @@ describe('FilesCriteriaFilterByTag', () => { /> ) - cy.findByRole('button', { name: 'Filter Tag: All' }).click() + cy.findByRole('button', { name: 'File Tags: All' }).click() cy.findByText('Document (5)').click() cy.wrap(onCriteriaChange).should('be.calledWith', defaultCriteria.withFilterByTag('document')) - cy.findByRole('button', { name: 'Filter Tag: Document' }).click() + cy.findByRole('button', { name: 'File Tags: Document' }).click() cy.findByText('Data (10)').click() cy.wrap(onCriteriaChange).should('be.calledWith', defaultCriteria.withFilterByTag('data')) }) @@ -69,7 +69,7 @@ describe('FilesCriteriaFilterByTag', () => { /> ) - cy.findByRole('button', { name: 'Filter Tag: Document' }).click() + cy.findByRole('button', { name: 'File Tags: Document' }).click() cy.findByText('All').should('exist').click() cy.wrap(onCriteriaChange).should('be.calledWith', defaultCriteria.withFilterByType(undefined)) }) @@ -85,15 +85,15 @@ describe('FilesCriteriaFilterByTag', () => { /> ) - cy.findByRole('button', { name: 'Filter Tag: All' }).click() + cy.findByRole('button', { name: 'File Tags: All' }).click() cy.findByText('All').should('have.class', styles['selected-option']) cy.findByRole('button', { name: 'Document (5)' }).click() - cy.findByRole('button', { name: 'Filter Tag: Document' }).click() + cy.findByRole('button', { name: 'File Tags: Document' }).click() cy.findByText('Document (5)').should('have.class', styles['selected-option']) cy.findByRole('button', { name: 'Data (10)' }).click() - cy.findByRole('button', { name: 'Filter Tag: Data' }).click() + cy.findByRole('button', { name: 'File Tags: Data' }).click() cy.findByText('Data (10)').should('have.class', styles['selected-option']) }) @@ -111,6 +111,6 @@ describe('FilesCriteriaFilterByTag', () => { /> ) - cy.findByRole('button', { name: 'Filter Tag: All' }).should('not.exist') + cy.findByRole('button', { name: 'File Tags: All' }).should('not.exist') }) }) diff --git a/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaFilterByType.spec.tsx b/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaFilterByType.spec.tsx index 3751936b6..e6c72496f 100644 --- a/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaFilterByType.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaFilterByType.spec.tsx @@ -30,7 +30,7 @@ describe('FilesCriteriaFilterByType', () => { /> ) - cy.findByRole('button', { name: 'Filter Type: All' }).click() + cy.findByRole('button', { name: 'File Type: All' }).click() cy.findByText('All').should('exist') cy.findByText('Image (5)').should('exist') @@ -48,11 +48,11 @@ describe('FilesCriteriaFilterByType', () => { /> ) - cy.findByRole('button', { name: 'Filter Type: All' }).click() + cy.findByRole('button', { name: 'File Type: All' }).click() cy.findByText('Image (5)').click() cy.wrap(onCriteriaChange).should('be.calledWith', defaultCriteria.withFilterByType('image')) - cy.findByRole('button', { name: 'Filter Type: Image' }).click() + cy.findByRole('button', { name: 'File Type: Image' }).click() cy.findByText('Text (10)').click() cy.wrap(onCriteriaChange).should('be.calledWith', defaultCriteria.withFilterByType('text')) }) @@ -69,7 +69,7 @@ describe('FilesCriteriaFilterByType', () => { /> ) - cy.findByRole('button', { name: 'Filter Type: Image' }).click() + cy.findByRole('button', { name: 'File Type: Image' }).click() cy.findByText('All').should('exist').click() cy.wrap(onCriteriaChange).should('be.calledWith', defaultCriteria.withFilterByType(undefined)) }) @@ -85,15 +85,15 @@ describe('FilesCriteriaFilterByType', () => { /> ) - cy.findByRole('button', { name: 'Filter Type: All' }).click() + cy.findByRole('button', { name: 'File Type: All' }).click() cy.findByText('All').should('have.class', styles['selected-option']) cy.findByRole('button', { name: 'Image (5)' }).click() - cy.findByRole('button', { name: 'Filter Type: Image' }).click() + cy.findByRole('button', { name: 'File Type: Image' }).click() cy.findByText('Image (5)').should('have.class', styles['selected-option']) cy.findByRole('button', { name: 'Text (10)' }).click() - cy.findByRole('button', { name: 'Filter Type: Text' }).click() + cy.findByRole('button', { name: 'File Type: Text' }).click() cy.findByText('Text (10)').should('have.class', styles['selected-option']) }) @@ -109,6 +109,6 @@ describe('FilesCriteriaFilterByType', () => { /> ) - cy.findByRole('button', { name: 'Filter Type: Image' }).should('not.exist') + cy.findByRole('button', { name: 'File Type: Image' }).should('not.exist') }) }) diff --git a/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaFilters.spec.tsx b/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaFilters.spec.tsx index 986860a8e..88ec100ed 100644 --- a/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaFilters.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaFilters.spec.tsx @@ -31,9 +31,9 @@ describe('FilesCriteriaFilters', () => { cy.findByText('Filter by').should('exist') - cy.findByRole('button', { name: 'Filter Type: All' }).should('exist') + cy.findByRole('button', { name: 'File Type: All' }).should('exist') cy.findByRole('button', { name: 'Access: All' }).should('exist') - cy.findByRole('button', { name: 'Filter Tag: All' }).should('exist') + cy.findByRole('button', { name: 'File Tags: All' }).should('exist') }) it('does not render filters by type options when there are no filters to be applied', () => { @@ -50,8 +50,8 @@ describe('FilesCriteriaFilters', () => { cy.findByText('Filter by').should('not.exist') - cy.findByRole('button', { name: 'Filter Type: All' }).should('not.exist') + cy.findByRole('button', { name: 'File Type: All' }).should('not.exist') cy.findByRole('button', { name: 'Access: All' }).should('not.exist') - cy.findByRole('button', { name: 'Filter Tag: All' }).should('not.exist') + cy.findByRole('button', { name: 'File Tags: All' }).should('not.exist') }) }) diff --git a/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaForm.spec.tsx b/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaForm.spec.tsx index c22ec5245..1ad307d6d 100644 --- a/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaForm.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaForm.spec.tsx @@ -55,9 +55,9 @@ describe('FileCriteriaForm', () => { ) cy.findByRole('button', { name: /Sort/ }).should('not.exist') - cy.findByRole('button', { name: 'Filter Type: All' }).should('not.exist') + cy.findByRole('button', { name: 'File Type: All' }).should('not.exist') cy.findByRole('button', { name: 'Access: All' }).should('not.exist') - cy.findByRole('button', { name: 'Filter Tag: All' }).should('not.exist') + cy.findByRole('button', { name: 'File Tags: All' }).should('not.exist') cy.findByLabelText('Search').should('not.exist') }) @@ -82,9 +82,9 @@ describe('FileCriteriaForm', () => { /> ) - cy.findByRole('button', { name: 'Filter Type: All' }).should('exist') + cy.findByRole('button', { name: 'File Type: All' }).should('exist') cy.findByRole('button', { name: 'Access: All' }).should('exist') - cy.findByRole('button', { name: 'Filter Tag: All' }).should('exist') + cy.findByRole('button', { name: 'File Tags: All' }).should('exist') cy.findByText('Filter by').should('exist') }) @@ -117,9 +117,9 @@ describe('FileCriteriaForm', () => { cy.findByRole('button', { name: /Sort/ }).click() cy.findByText('Oldest').click() - cy.findByRole('button', { name: 'Filter Type: Image' }).should('exist') + cy.findByRole('button', { name: 'File Type: Image' }).should('exist') cy.findByRole('button', { name: 'Access: Public' }).should('exist') - cy.findByRole('button', { name: 'Filter Tag: Document' }).should('exist') + cy.findByRole('button', { name: 'File Tags: Document' }).should('exist') }) it('saves global criteria when the filter by type option changes', () => { @@ -136,12 +136,12 @@ describe('FileCriteriaForm', () => { /> ) - cy.findByRole('button', { name: 'Filter Type: Image' }).click() + cy.findByRole('button', { name: 'File Type: Image' }).click() cy.findByText('Text (10)').click() - cy.findByRole('button', { name: 'Filter Type: Text' }).should('exist') + cy.findByRole('button', { name: 'File Type: Text' }).should('exist') cy.findByRole('button', { name: 'Access: Public' }).should('exist') - cy.findByRole('button', { name: 'Filter Tag: Document' }).should('exist') + cy.findByRole('button', { name: 'File Tags: Document' }).should('exist') }) it('saves global criteria when the filter by access option changes', () => { @@ -161,9 +161,9 @@ describe('FileCriteriaForm', () => { cy.findByRole('button', { name: 'Access: Public' }).click() cy.findByText('Restricted (10)').click() - cy.findByRole('button', { name: 'Filter Type: Image' }).should('exist') + cy.findByRole('button', { name: 'File Type: Image' }).should('exist') cy.findByRole('button', { name: 'Access: Restricted' }).should('exist') - cy.findByRole('button', { name: 'Filter Tag: Document' }).should('exist') + cy.findByRole('button', { name: 'File Tags: Document' }).should('exist') }) it('saves global criteria when the filter by tag option changes', () => { @@ -180,12 +180,12 @@ describe('FileCriteriaForm', () => { /> ) - cy.findByRole('button', { name: 'Filter Tag: Document' }).click() + cy.findByRole('button', { name: 'File Tags: Document' }).click() cy.findByText('Data (10)').click() - cy.findByRole('button', { name: 'Filter Type: Image' }).should('exist') + cy.findByRole('button', { name: 'File Type: Image' }).should('exist') cy.findByRole('button', { name: 'Access: Public' }).should('exist') - cy.findByRole('button', { name: 'Filter Tag: Data' }).should('exist') + cy.findByRole('button', { name: 'File Tags: Data' }).should('exist') }) it('saves global criteria when the search input changes', () => { @@ -205,9 +205,9 @@ describe('FileCriteriaForm', () => { cy.findByLabelText('Search').clear().type('new search') - cy.findByRole('button', { name: 'Filter Type: Image' }).should('exist') + cy.findByRole('button', { name: 'File Type: Image' }).should('exist') cy.findByRole('button', { name: 'Access: Public' }).should('exist') - cy.findByRole('button', { name: 'Filter Tag: Document' }).should('exist') + cy.findByRole('button', { name: 'File Tags: Document' }).should('exist') cy.findByLabelText('Search').should('have.value', 'new search') }) }) From 92916f6937e65b6574c9054cfe8b9c9d743ea576 Mon Sep 17 00:00:00 2001 From: GPortas Date: Thu, 17 Aug 2023 14:50:15 +0100 Subject: [PATCH 12/37] Changed: using flat secrets instead of environment secrets in deploy-beta-testing action --- .github/workflows/deploy-beta-testing.yml | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/.github/workflows/deploy-beta-testing.yml b/.github/workflows/deploy-beta-testing.yml index b7161b6e9..627fae996 100644 --- a/.github/workflows/deploy-beta-testing.yml +++ b/.github/workflows/deploy-beta-testing.yml @@ -8,7 +8,6 @@ on: jobs: build: runs-on: ubuntu-latest - environment: beta-testing steps: - uses: actions/checkout@v3 @@ -33,7 +32,7 @@ jobs: - name: Create and populate .env file env: - DATAVERSE_BACKEND_URL: ${{ secrets.DATAVERSE_BACKEND_URL }} + DATAVERSE_BACKEND_URL: ${{ secrets.BETA_DATAVERSE_BACKEND_URL }} run: | touch .env echo VITE_DATAVERSE_BACKEND_URL="$DATAVERSE_BACKEND_URL" >> .env @@ -50,7 +49,6 @@ jobs: deploy-to-payara: needs: build runs-on: ubuntu-latest - environment: beta-testing steps: - uses: actions/checkout@v3 @@ -76,19 +74,19 @@ jobs: - name: Copy war file to remote instance uses: appleboy/scp-action@master with: - host: ${{ secrets.PAYARA_INSTANCE_HOST }} - username: ${{ secrets.PAYARA_INSTANCE_USERNAME }} - key: ${{ secrets.PAYARA_INSTANCE_SSH_PRIVATE_KEY }} + host: ${{ secrets.BETA_PAYARA_INSTANCE_HOST }} + username: ${{ secrets.BETA_PAYARA_INSTANCE_USERNAME }} + key: ${{ secrets.BETA_PAYARA_INSTANCE_SSH_PRIVATE_KEY }} source: './deployment/payara/target/dataverse-frontend.war' - target: '/home/${{ secrets.PAYARA_INSTANCE_USERNAME }}' + target: '/home/${{ secrets.BETA_PAYARA_INSTANCE_USERNAME }}' overwrite: true - name: Execute payara war deployment remotely uses: appleboy/ssh-action@v0.1.8 with: - host: ${{ secrets.PAYARA_INSTANCE_HOST }} - username: ${{ secrets.PAYARA_INSTANCE_USERNAME }} - key: ${{ secrets.PAYARA_INSTANCE_SSH_PRIVATE_KEY }} + host: ${{ secrets.BETA_PAYARA_INSTANCE_HOST }} + username: ${{ secrets.BETA_PAYARA_INSTANCE_USERNAME }} + key: ${{ secrets.BETA_PAYARA_INSTANCE_SSH_PRIVATE_KEY }} script: | APPLICATION_NAME=dataverse-frontend APPLICATION_WAR_PATH=deployment/payara/target/$APPLICATION_NAME.war From 01c969523de64700f851c45210c7dd23a176902f Mon Sep 17 00:00:00 2001 From: GPortas Date: Thu, 17 Aug 2023 16:14:54 +0100 Subject: [PATCH 13/37] Changed: switched from payara5 to payara6 in GitHub actions --- .github/workflows/deploy-beta-testing.yml | 2 +- .github/workflows/deploy.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-beta-testing.yml b/.github/workflows/deploy-beta-testing.yml index 627fae996..cad70ab87 100644 --- a/.github/workflows/deploy-beta-testing.yml +++ b/.github/workflows/deploy-beta-testing.yml @@ -90,7 +90,7 @@ jobs: script: | APPLICATION_NAME=dataverse-frontend APPLICATION_WAR_PATH=deployment/payara/target/$APPLICATION_NAME.war - ASADMIN='/usr/local/payara5/bin/asadmin --user admin' + ASADMIN='/usr/local/payara6/bin/asadmin --user admin' DATAVERSE_FRONTEND=`$ASADMIN list-applications |grep $APPLICATION_NAME |awk '{print $1}'` $ASADMIN undeploy $DATAVERSE_FRONTEND $ASADMIN deploy --name $APPLICATION_NAME --contextroot /spa $APPLICATION_WAR_PATH diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 941e7d8ba..df1e495d7 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -143,7 +143,7 @@ jobs: script: | APPLICATION_NAME=dataverse-frontend APPLICATION_WAR_PATH=deployment/payara/target/$APPLICATION_NAME.war - ASADMIN='/usr/local/payara5/bin/asadmin --user admin' + ASADMIN='/usr/local/payara6/bin/asadmin --user admin' DATAVERSE_FRONTEND=`$ASADMIN list-applications |grep $APPLICATION_NAME |awk '{print $1}'` $ASADMIN undeploy $DATAVERSE_FRONTEND $ASADMIN deploy --name $APPLICATION_NAME --contextroot /${{ github.event.inputs.basepath }} $APPLICATION_WAR_PATH From f662270f8a0d8bc1379b68f0c1e510549f5795fd Mon Sep 17 00:00:00 2001 From: MellyGray Date: Fri, 1 Sep 2023 11:26:44 +0200 Subject: [PATCH 14/37] fix: cast number to string instead of type assertion --- .../dataset-files/files-table/row-selection/useRowSelection.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sections/dataset/dataset-files/files-table/row-selection/useRowSelection.ts b/src/sections/dataset/dataset-files/files-table/row-selection/useRowSelection.ts index 55c0a468e..24e15dc6c 100644 --- a/src/sections/dataset/dataset-files/files-table/row-selection/useRowSelection.ts +++ b/src/sections/dataset/dataset-files/files-table/row-selection/useRowSelection.ts @@ -95,7 +95,7 @@ export function createRowSelection(numberOfRows: number) { const rowSelection: Record = {} for (let i = 0; i < numberOfRows; i++) { - rowSelection[i as unknown as string] = true + rowSelection[String(i)] = true } return rowSelection From d695c0cdf255177ff0434e4d31a119781ae433b6 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Fri, 1 Sep 2023 11:30:02 +0200 Subject: [PATCH 15/37] fix: rename total attribute of FilePaginationInfo for better readability --- src/files/domain/models/FilePaginationInfo.ts | 8 ++++---- .../dataset/dataset-files/files-table/FilesTable.tsx | 2 +- .../files-table/row-selection/useRowSelection.ts | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/files/domain/models/FilePaginationInfo.ts b/src/files/domain/models/FilePaginationInfo.ts index 1d6b2a3d6..5f0e1ddcc 100644 --- a/src/files/domain/models/FilePaginationInfo.ts +++ b/src/files/domain/models/FilePaginationInfo.ts @@ -2,14 +2,14 @@ export class FilePaginationInfo { constructor( public readonly page: number = 1, public readonly pageSize: number = 10, - public readonly total: number = 0 + public readonly totalFiles: number = 0 ) {} withTotal(total: number): FilePaginationInfo { return new FilePaginationInfo(this.page, this.pageSize, total) } goToPage(page: number): FilePaginationInfo { - return new FilePaginationInfo(page, this.pageSize, this.total) + return new FilePaginationInfo(page, this.pageSize, this.totalFiles) } goToPreviousPage(): FilePaginationInfo { @@ -27,11 +27,11 @@ export class FilePaginationInfo { const newPage = Math.ceil((this.page * oldPageSize) / newPageSize) return newPage > 0 ? newPage : 1 } - return new FilePaginationInfo(getNewPage(this.pageSize, pageSize), pageSize, this.total) + return new FilePaginationInfo(getNewPage(this.pageSize, pageSize), pageSize, this.totalFiles) } get totalPages(): number { - return Math.ceil(this.total / this.pageSize) + return Math.ceil(this.totalFiles / this.pageSize) } get hasPreviousPage(): boolean { diff --git a/src/sections/dataset/dataset-files/files-table/FilesTable.tsx b/src/sections/dataset/dataset-files/files-table/FilesTable.tsx index f34bd92ce..129792f8f 100644 --- a/src/sections/dataset/dataset-files/files-table/FilesTable.tsx +++ b/src/sections/dataset/dataset-files/files-table/FilesTable.tsx @@ -28,7 +28,7 @@ export function FilesTable({ files, isLoading, paginationInfo }: FilesTableProps { setCurrentPageRowSelection(createRowSelection(paginationInfo.pageSize)) - setRowSelection(createRowSelection(paginationInfo.total)) + setRowSelection(createRowSelection(paginationInfo.totalFiles)) } const clearRowSelection = () => { setCurrentPageRowSelection({}) @@ -71,7 +71,7 @@ export function useRowSelection( } } const isAllRowsSelected = () => { - return Object.keys(rowSelection).length === paginationInfo.total + return Object.keys(rowSelection).length === paginationInfo.totalFiles } useEffect(() => { From 8aab40e444a65cbc3a6f5cf3021c30f8dba7c763 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Fri, 1 Sep 2023 17:09:58 +0200 Subject: [PATCH 16/37] fix(ZipDownloadLimit): it wasn't being rendered when navigating through pagination --- .../dataset-files/files-table/FilesTable.tsx | 12 +- .../row-selection/RowSelectionMessage.tsx | 8 +- .../row-selection/useFileSelection.ts | 114 ++++++++++++++++++ .../row-selection/useRowSelection.ts | 102 ---------------- .../files-table/useFilesTable.tsx | 30 +++-- .../ZipDownloadLimitMessage.tsx | 17 +-- .../dataset-files/DatasetFiles.spec.tsx | 35 +++++- .../RowSelectionMessage.spec.tsx | 14 +-- .../ZipDownloadLimitMessage.spec.tsx | 47 ++++++-- 9 files changed, 227 insertions(+), 152 deletions(-) create mode 100644 src/sections/dataset/dataset-files/files-table/row-selection/useFileSelection.ts delete mode 100644 src/sections/dataset/dataset-files/files-table/row-selection/useRowSelection.ts diff --git a/src/sections/dataset/dataset-files/files-table/FilesTable.tsx b/src/sections/dataset/dataset-files/files-table/FilesTable.tsx index 129792f8f..908d983ec 100644 --- a/src/sections/dataset/dataset-files/files-table/FilesTable.tsx +++ b/src/sections/dataset/dataset-files/files-table/FilesTable.tsx @@ -15,7 +15,7 @@ interface FilesTableProps { } export function FilesTable({ files, isLoading, paginationInfo }: FilesTableProps) { - const { table, rowSelection, selectAllRows, clearRowSelection } = useFilesTable( + const { table, fileSelection, selectAllFiles, clearFileSelection } = useFilesTable( files, paginationInfo ) @@ -26,14 +26,12 @@ export function FilesTable({ files, isLoading, paginationInfo }: FilesTableProps return ( <> - row.original)} + clearRowSelection={clearFileSelection} /> + diff --git a/src/sections/dataset/dataset-files/files-table/row-selection/RowSelectionMessage.tsx b/src/sections/dataset/dataset-files/files-table/row-selection/RowSelectionMessage.tsx index 26d028ec4..82d0c8791 100644 --- a/src/sections/dataset/dataset-files/files-table/row-selection/RowSelectionMessage.tsx +++ b/src/sections/dataset/dataset-files/files-table/row-selection/RowSelectionMessage.tsx @@ -1,10 +1,10 @@ -import { RowSelection } from './useRowSelection' +import { FileSelection } from './useFileSelection' import { Button } from '@iqss/dataverse-design-system' import { useTranslation } from 'react-i18next' import styles from './RowSelectionMessage.module.scss' interface RowSelectionMessageProps { - rowSelection: RowSelection + fileSelection: FileSelection totalFilesCount: number selectAllRows: () => void clearRowSelection: () => void @@ -14,13 +14,13 @@ const MINIMUM_SELECTED_FILES_TO_SHOW_MESSAGE = 0 const MINIMUM_FILES_TO_SHOW_MESSAGE = 10 export function RowSelectionMessage({ - rowSelection, + fileSelection, totalFilesCount, selectAllRows, clearRowSelection }: RowSelectionMessageProps) { const { t } = useTranslation('files') - const selectedFilesCount = Object.keys(rowSelection).length + const selectedFilesCount = Object.keys(fileSelection).length const showMessage = totalFilesCount > MINIMUM_FILES_TO_SHOW_MESSAGE && selectedFilesCount > MINIMUM_SELECTED_FILES_TO_SHOW_MESSAGE diff --git a/src/sections/dataset/dataset-files/files-table/row-selection/useFileSelection.ts b/src/sections/dataset/dataset-files/files-table/row-selection/useFileSelection.ts new file mode 100644 index 000000000..e8e9fec2c --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/row-selection/useFileSelection.ts @@ -0,0 +1,114 @@ +import { useEffect, useState } from 'react' +import { FilePaginationInfo } from '../../../../../files/domain/models/FilePaginationInfo' +import { File } from '../../../../../files/domain/models/File' +import { Row } from '@tanstack/react-table' +import { RowSelection } from '../useFilesTable' + +export type FileSelection = { + [key: string]: File | undefined +} + +export function useFileSelection( + currentPageSelectedRowModel: Record>, + setCurrentPageRowSelection: (rowSelection: RowSelection) => void, + paginationInfo: FilePaginationInfo +) { + const [fileSelection, setFileSelection] = useState({}) + const updateFileSelection = () => { + const currentPageFileSelection = getCurrentPageFileSelection() + const currentPageIndexes = getCurrentPageIndexes() + + Object.keys(fileSelection).forEach((key) => { + const rowIndex = parseInt(key) + if (currentPageIndexes.includes(rowIndex)) { + if (!currentPageFileSelection[key]) { + delete fileSelection[key] + } + } + }) + + return { ...fileSelection, ...currentPageFileSelection } + } + const getCurrentPageIndexes = () => { + return Array.from( + { length: paginationInfo.pageSize }, + (_, i) => i + (paginationInfo.page - 1) * paginationInfo.pageSize + ) + } + const getCurrentPageFileSelection = () => { + const rowSelectionFixed: FileSelection = {} + const currentPageIndexes = getCurrentPageIndexes() + + Object.entries(currentPageSelectedRowModel).forEach(([string, Row]) => { + const rowIndex = parseInt(string) + rowSelectionFixed[currentPageIndexes[rowIndex]] = Row.original + }) + return rowSelectionFixed + } + const computeCurrentPageRowSelection = () => { + const rowSelectionOfCurrentPage: RowSelection = {} + const currentPageIndexes = getCurrentPageIndexes() + + Object.keys(fileSelection).forEach((key) => { + const rowIndex = parseInt(key) + if (currentPageIndexes.includes(rowIndex)) { + rowSelectionOfCurrentPage[currentPageIndexes.indexOf(rowIndex)] = true + } + }) + + return rowSelectionOfCurrentPage + } + const selectAllFiles = () => { + setCurrentPageRowSelection(createRowSelection(paginationInfo.pageSize)) + setFileSelection(createFileSelection(paginationInfo.totalFiles)) + } + const clearFileSelection = () => { + setCurrentPageRowSelection({}) + setFileSelection({}) + } + const toggleAllFilesSelected = () => { + if (areAllFilesSelected()) { + clearFileSelection() + } else { + selectAllFiles() + } + } + const areAllFilesSelected = () => { + return Object.keys(fileSelection).length === paginationInfo.totalFiles + } + + useEffect(() => { + setFileSelection(updateFileSelection()) + }, [currentPageSelectedRowModel]) + + useEffect(() => { + setCurrentPageRowSelection(computeCurrentPageRowSelection()) + }, [paginationInfo]) + + return { + fileSelection, + selectAllFiles, + clearFileSelection, + toggleAllFilesSelected + } +} + +export function createRowSelection(numberOfRows: number) { + const rowSelection: Record = {} + + for (let i = 0; i < numberOfRows; i++) { + rowSelection[String(i)] = true + } + + return rowSelection +} + +export function createFileSelection(numberOfRows: number) { + const fileSelection: FileSelection = {} + + for (let i = 0; i < numberOfRows; i++) { + fileSelection[String(i)] = undefined + } + + return fileSelection +} diff --git a/src/sections/dataset/dataset-files/files-table/row-selection/useRowSelection.ts b/src/sections/dataset/dataset-files/files-table/row-selection/useRowSelection.ts deleted file mode 100644 index d7aa68b96..000000000 --- a/src/sections/dataset/dataset-files/files-table/row-selection/useRowSelection.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { useEffect, useState } from 'react' -import { FilePaginationInfo } from '../../../../../files/domain/models/FilePaginationInfo' - -export type RowSelection = { - [key: string]: boolean -} - -export function useRowSelection( - currentPageRowSelection: RowSelection, - setCurrentPageRowSelection: (rowSelection: RowSelection) => void, - paginationInfo: FilePaginationInfo -) { - const [rowSelection, setRowSelection] = useState({}) - const updatedRowSelection = () => { - const currentPageRowSelectionFixed = getCurrentPageRowSelectionFixed() - const currentPageIndexes = getCurrentPageIndexes() - - Object.keys(rowSelection).forEach((key) => { - const rowIndex = parseInt(key) - if (currentPageIndexes.includes(rowIndex)) { - if (!currentPageRowSelectionFixed[key]) { - delete rowSelection[key] - } - } - }) - - return { ...rowSelection, ...currentPageRowSelectionFixed } - } - const getCurrentPageIndexes = () => { - return Array.from( - { length: paginationInfo.pageSize }, - (_, i) => i + (paginationInfo.page - 1) * paginationInfo.pageSize - ) - } - const getCurrentPageRowSelectionFixed = () => { - const rowSelectionFixed: RowSelection = {} - const currentPageIndexes = getCurrentPageIndexes() - - Object.keys(currentPageRowSelection).forEach((key) => { - const rowIndex = parseInt(key) - rowSelectionFixed[currentPageIndexes[rowIndex]] = currentPageRowSelection[key] - }) - return rowSelectionFixed - } - const getRowSelectionOfCurrentPage = () => { - const rowSelectionOfCurrentPage: RowSelection = {} - const currentPageIndexes = getCurrentPageIndexes() - - Object.keys(rowSelection).forEach((key) => { - const rowIndex = parseInt(key) - if (currentPageIndexes.includes(rowIndex)) { - rowSelectionOfCurrentPage[currentPageIndexes.indexOf(rowIndex)] = rowSelection[key] - } - }) - - return rowSelectionOfCurrentPage - } - const selectAllRows = () => { - setCurrentPageRowSelection(createRowSelection(paginationInfo.pageSize)) - setRowSelection(createRowSelection(paginationInfo.totalFiles)) - } - const clearRowSelection = () => { - setCurrentPageRowSelection({}) - setRowSelection({}) - } - const toggleAllRowsSelected = () => { - if (isAllRowsSelected()) { - clearRowSelection() - } else { - selectAllRows() - } - } - const isAllRowsSelected = () => { - return Object.keys(rowSelection).length === paginationInfo.totalFiles - } - - useEffect(() => { - setRowSelection(updatedRowSelection()) - }, [currentPageRowSelection]) - - useEffect(() => { - setCurrentPageRowSelection(getRowSelectionOfCurrentPage()) - }, [paginationInfo]) - - return { - rowSelection, - setRowSelection, - selectAllRows, - clearRowSelection, - toggleAllRowsSelected - } -} - -export function createRowSelection(numberOfRows: number) { - const rowSelection: Record = {} - - for (let i = 0; i < numberOfRows; i++) { - rowSelection[String(i)] = true - } - - return rowSelection -} diff --git a/src/sections/dataset/dataset-files/files-table/useFilesTable.tsx b/src/sections/dataset/dataset-files/files-table/useFilesTable.tsx index bb524d4b4..467f76e1b 100644 --- a/src/sections/dataset/dataset-files/files-table/useFilesTable.tsx +++ b/src/sections/dataset/dataset-files/files-table/useFilesTable.tsx @@ -1,20 +1,24 @@ import { useEffect, useState } from 'react' import { File } from '../../../../files/domain/models/File' -import { getCoreRowModel, useReactTable } from '@tanstack/react-table' +import { getCoreRowModel, Row, useReactTable } from '@tanstack/react-table' import { createColumnsDefinition } from './FilesTableColumnsDefinition' import { FilePaginationInfo } from '../../../../files/domain/models/FilePaginationInfo' -import { RowSelection, useRowSelection } from './row-selection/useRowSelection' +import { useFileSelection } from './row-selection/useFileSelection' + +export type RowSelection = { + [key: string]: boolean +} export function useFilesTable(files: File[], paginationInfo: FilePaginationInfo) { const [currentPageRowSelection, setCurrentPageRowSelection] = useState({}) - const { rowSelection, selectAllRows, clearRowSelection, toggleAllRowsSelected } = useRowSelection( - currentPageRowSelection, - setCurrentPageRowSelection, - paginationInfo - ) + const [currentPageSelectedRowModel, setCurrentPageSelectedRowModel] = useState< + Record> + >({}) + const { fileSelection, selectAllFiles, clearFileSelection, toggleAllFilesSelected } = + useFileSelection(currentPageSelectedRowModel, setCurrentPageRowSelection, paginationInfo) const table = useReactTable({ data: files, - columns: createColumnsDefinition(toggleAllRowsSelected), + columns: createColumnsDefinition(toggleAllFilesSelected), state: { rowSelection: currentPageRowSelection }, @@ -30,10 +34,14 @@ export function useFilesTable(files: File[], paginationInfo: FilePaginationInfo) table.setPageIndex(paginationInfo.page - 1) }, [paginationInfo]) + useEffect(() => { + setCurrentPageSelectedRowModel(table.getSelectedRowModel().rowsById) + }, [table.getSelectedRowModel().rowsById]) + return { table, - rowSelection, - selectAllRows, - clearRowSelection + fileSelection, + selectAllFiles, + clearFileSelection } } diff --git a/src/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.tsx b/src/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.tsx index a066dba7a..7e1c474ee 100644 --- a/src/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.tsx +++ b/src/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.tsx @@ -5,19 +5,18 @@ import { useSettings } from '../../../../settings/SettingsContext' import { SettingName } from '../../../../../settings/domain/models/Setting' import { ZipDownloadLimit } from '../../../../../settings/domain/models/ZipDownloadLimit' import { useEffect, useState } from 'react' +import { FileSelection } from '../row-selection/useFileSelection' interface ZipDownloadLimitMessageProps { - selectedFiles: File[] + fileSelection: FileSelection } const MINIMUM_FILES_TO_SHOW_MESSAGE = 1 -export function ZipDownloadLimitMessage({ selectedFiles }: ZipDownloadLimitMessageProps) { +export function ZipDownloadLimitMessage({ fileSelection }: ZipDownloadLimitMessageProps) { const { t } = useTranslation('files') const { getSettingByName } = useSettings() const [zipDownloadLimitInBytes, setZipDownloadLimitInBytes] = useState() - const selectionTotalSizeInBytes = getFilesTotalSizeInBytes(selectedFiles) - useEffect(() => { getSettingByName(SettingName.ZIP_DOWNLOAD_LIMIT) .then((zipDownloadLimit) => { @@ -28,9 +27,11 @@ export function ZipDownloadLimitMessage({ selectedFiles }: ZipDownloadLimitMessa }) }, [getSettingByName]) + // TODO - When selecting all files, the size should come from a call to a use case that returns the total size of the dataset files. Check issue https://github.com/IQSS/dataverse-frontend/issues/170 + const selectionTotalSizeInBytes = getFilesTotalSizeInBytes(Object.values(fileSelection)) const showMessage = zipDownloadLimitInBytes && - selectedFiles.length > MINIMUM_FILES_TO_SHOW_MESSAGE && + Object.values(fileSelection).length > MINIMUM_FILES_TO_SHOW_MESSAGE && selectionTotalSizeInBytes > zipDownloadLimitInBytes if (!showMessage) { @@ -48,8 +49,10 @@ export function ZipDownloadLimitMessage({ selectedFiles }: ZipDownloadLimitMessa ) } -function getFilesTotalSizeInBytes(files: File[]) { - return files.map((file) => file.size).reduce((bytes, size) => bytes + size.toBytes(), 0) +function getFilesTotalSizeInBytes(files: (File | undefined)[]) { + return files + .map((file) => file?.size) + .reduce((bytes, size) => bytes + (size ? size.toBytes() : 0), 0) } function bytesToHumanReadable(bytes: number) { diff --git a/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx b/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx index 25088e757..2049c0c7d 100644 --- a/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx @@ -9,8 +9,11 @@ import { } from '../../../../../src/files/domain/models/FileCriteria' import { FilesCountInfoMother } from '../../../files/domain/models/FilesCountInfoMother' import { FilePaginationInfo } from '../../../../../src/files/domain/models/FilePaginationInfo' -import { FileType } from '../../../../../src/files/domain/models/File' +import { FileSizeUnit, FileType } from '../../../../../src/files/domain/models/File' import styles from '../../../../../src/sections/dataset/dataset-files/files-table/FilesTable.module.scss' +import { SettingMother } from '../../../settings/domain/models/SettingMother' +import { ZipDownloadLimit } from '../../../../../src/settings/domain/models/ZipDownloadLimit' +import { SettingsContext } from '../../../../../src/sections/settings/SettingsContext' const testFiles = FileMother.createMany(10) const datasetPersistentId = 'test-dataset-persistent-id' @@ -161,6 +164,36 @@ describe('DatasetFiles', () => { cy.findByText('1 file is currently selected.').should('exist') }) + + it('renders the zip download limit message when selecting rows from different pages', () => { + const getSettingByName = cy + .stub() + .resolves(SettingMother.createZipDownloadLimit(new ZipDownloadLimit(1, FileSizeUnit.BYTES))) + + cy.customMount( + + + + ) + + cy.get('table > tbody > tr:nth-child(2) > td:nth-child(1) > input[type=checkbox]').click() + cy.findByRole('button', { name: 'Next' }).click() + cy.get('table > tbody > tr:nth-child(3) > td:nth-child(1) > input[type=checkbox]').click() + + cy.findByText( + /exceeds the zip limit of 1.0 B. Please unselect some files to continue./ + ).should('exist') + + cy.get('table > tbody > tr:nth-child(3) > td:nth-child(1) > input[type=checkbox]').click() + + cy.findByText( + /exceeds the zip limit of 1.0 B. Please unselect some files to continue./ + ).should('not.exist') + }) }) describe('Calling use cases', () => { diff --git a/tests/component/sections/dataset/dataset-files/files-table/row-selection/RowSelectionMessage.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/row-selection/RowSelectionMessage.spec.tsx index e5eb4b997..5584bdb76 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/row-selection/RowSelectionMessage.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/row-selection/RowSelectionMessage.spec.tsx @@ -1,5 +1,5 @@ import { RowSelectionMessage } from '../../../../../../../src/sections/dataset/dataset-files/files-table/row-selection/RowSelectionMessage' -import { createRowSelection } from '../../../../../../../src/sections/dataset/dataset-files/files-table/row-selection/useRowSelection' +import { createRowSelection } from '../../../../../../../src/sections/dataset/dataset-files/files-table/row-selection/useFileSelection' let selectAllRows = () => {} let clearRowSelection = () => {} @@ -12,7 +12,7 @@ describe('RowSelectionMessage', () => { it('renders the message when there are more than 10 files and some row is selected', () => { cy.customMount( { it('does not render the message when there are less than 10 files', () => { cy.customMount( { it('does not render the message when there are more than 10 files but no row is selected', () => { cy.customMount( { it('renders the plural form of the message when there is more than 1 row selected', () => { cy.customMount( { it("calls selectAllRows when the 'Select all' button is clicked", () => { cy.customMount( { it("calls clearRowSelection when the 'Clear selection.' button is clicked", () => { cy.customMount( { - it('should render the component with no message if conditions are not met', () => { + it('should not render if there is less than 1 file selected', () => { const getSettingByName = cy .stub() .resolves(SettingMother.createZipDownloadLimit(zipDownloadLimit)) @@ -19,7 +19,9 @@ describe('ZipDownloadLimitMessage', () => { cy.customMount( ) @@ -27,13 +29,32 @@ describe('ZipDownloadLimitMessage', () => { cy.findByText(/The overall size of the files selected/).should('not.exist') }) - it('should render the component with the appropriate message if conditions are met', () => { + it('should not render if the zipDownloadLimit is not exceeded', () => { + const getSettingByName = cy + .stub() + .resolves(SettingMother.createZipDownloadLimit(zipDownloadLimit)) + + cy.customMount( + + + + ) + + cy.findByText(/The overall size of the files selected/).should('not.exist') + }) + + it('should render if there is more than 1 file and they exceed the zipDownloadLimit', () => { const getSettingByName = cy .stub() .resolves(SettingMother.createZipDownloadLimit(zipDownloadLimit)) cy.customMount( - + ) @@ -46,13 +67,13 @@ describe('ZipDownloadLimitMessage', () => { const getSettingByName = cy .stub() .resolves(SettingMother.createZipDownloadLimit(zipDownloadLimit)) - const files = [ - FileMother.create({ size: new FileSize(1000000, FileSizeUnit.PETABYTES) }), - FileMother.create({ size: new FileSize(1000000, FileSizeUnit.PETABYTES) }) - ] + const fileSelection = { + '1': FileMother.create({ size: new FileSize(1000000, FileSizeUnit.PETABYTES) }), + '2': FileMother.create({ size: new FileSize(1000000, FileSizeUnit.PETABYTES) }) + } cy.customMount( - + ) From aa8f39e532cf2cf17cea490b2fb778e74f97ee76 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 4 Sep 2023 10:37:42 +0200 Subject: [PATCH 17/37] fix(tests): add wait for FilesTable initialization --- .../dataset/dataset-files/files-table/FilesTable.spec.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx index 4a0eabdfe..3da28781b 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx @@ -44,6 +44,8 @@ describe('FilesTable', () => { ) + cy.wait(1000) // wait for the table to load + cy.get('table > thead > tr > th > input[type=checkbox]').click() cy.findByText('200 files are currently selected.').should('exist') @@ -56,6 +58,8 @@ describe('FilesTable', () => { ) + cy.wait(1000) // wait for the table to load + cy.get('table > thead > tr > th > input[type=checkbox]').click() cy.findByText('200 files are currently selected.').should('exist') From e93b8e98e8cc504be985012d7143d56a98d85a08 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 5 Sep 2023 12:09:16 +0200 Subject: [PATCH 18/37] fix: citationDate undefined crashes the Dataset page --- src/dataset/infrastructure/mappers/JSDatasetMapper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dataset/infrastructure/mappers/JSDatasetMapper.ts b/src/dataset/infrastructure/mappers/JSDatasetMapper.ts index f63bc52ec..53a3a627a 100644 --- a/src/dataset/infrastructure/mappers/JSDatasetMapper.ts +++ b/src/dataset/infrastructure/mappers/JSDatasetMapper.ts @@ -148,7 +148,7 @@ export class JSDatasetMapper { extraFields.publicationDate = publicationDate } - if (publicationDate && citationDate !== publicationDate) { + if (citationDate && citationDate !== publicationDate) { extraFields.citationDate = citationDate } From e0a41b7f5875e4087de79afe32899a04bdca78e2 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 5 Sep 2023 16:49:54 +0200 Subject: [PATCH 19/37] fix: add tests for dataset summary --- .../integration/DataverseApiHelper.ts | 9 ++++- .../integration/datasets/DatasetHelper.ts | 12 ++++++ .../DatasetJSDataverseRepository.spec.ts | 37 ++++++++++++++++++- 3 files changed, 55 insertions(+), 3 deletions(-) diff --git a/tests/e2e-integration/integration/DataverseApiHelper.ts b/tests/e2e-integration/integration/DataverseApiHelper.ts index 742069b78..745729f85 100644 --- a/tests/e2e-integration/integration/DataverseApiHelper.ts +++ b/tests/e2e-integration/integration/DataverseApiHelper.ts @@ -14,13 +14,18 @@ export class DataverseApiHelper { } // eslint-disable-next-line @typescript-eslint/no-explicit-any - static async request(url: string, method: string, data?: any): Promise { + static async request( + url: string, + method: string, + data?: any, + contentType?: string + ): Promise { const config: AxiosRequestConfig = { url: `${this.API_URL}${url}`, method: method, headers: { 'X-Dataverse-key': this.API_TOKEN, - 'Content-Type': 'application/json' + 'Content-Type': contentType ? contentType : 'application/json' }, // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment data: data diff --git a/tests/e2e-integration/integration/datasets/DatasetHelper.ts b/tests/e2e-integration/integration/datasets/DatasetHelper.ts index 270d57fae..e1699112d 100644 --- a/tests/e2e-integration/integration/datasets/DatasetHelper.ts +++ b/tests/e2e-integration/integration/datasets/DatasetHelper.ts @@ -21,4 +21,16 @@ export class DatasetHelper extends DataverseApiHelper { static async createPrivateUrl(id: string): Promise<{ token: string }> { return this.request<{ token: string }>(`/datasets/${id}/privateUrl`, 'POST') } + + static async setCitationDateFieldType( + persistentId: string, + fieldType: string + ): Promise<{ status: string }> { + return this.request<{ status: string }>( + `/datasets/:persistentId/citationdate?persistentId=${persistentId}`, + 'PUT', + fieldType, + 'text/plain' + ) + } } diff --git a/tests/e2e-integration/integration/datasets/DatasetJSDataverseRepository.spec.ts b/tests/e2e-integration/integration/datasets/DatasetJSDataverseRepository.spec.ts index 0d9dd37ba..2ae873d48 100644 --- a/tests/e2e-integration/integration/datasets/DatasetJSDataverseRepository.spec.ts +++ b/tests/e2e-integration/integration/datasets/DatasetJSDataverseRepository.spec.ts @@ -8,6 +8,13 @@ import { DatasetStatus, DatasetVersion } from '../../../../src/dataset/domain/mo chai.use(chaiAsPromised) const expect = chai.expect +function getCurrentDateInYYYYMMDDFormat() { + const date = new Date() + return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String( + date.getDate() + ).padStart(2, '0')}` +} + const datasetData = (persistentId: string) => { const persistentIdUrl = `https://doi.org/${persistentId.replace('doi:', '')}` return { @@ -86,6 +93,8 @@ describe('Dataset JSDataverse Repository', () => { expect(dataset.metadataBlocks).to.deep.equal(datasetExpected.metadataBlocks) expect(dataset.summaryFields).to.deep.equal(datasetExpected.summaryFields) expect(dataset.version).to.deep.equal(datasetExpected.version) + expect(dataset.metadataBlocks[0].fields.publicationDate).not.to.exist + expect(dataset.metadataBlocks[0].fields.citationDate).not.to.exist }) }) @@ -103,9 +112,13 @@ describe('Dataset JSDataverse Repository', () => { } const datasetExpected = datasetData(dataset.persistentId) const newVersion = new DatasetVersion(1, 0, DatasetStatus.RELEASED) - + const expectedPublicationDate = getCurrentDateInYYYYMMDDFormat() expect(dataset.getTitle()).to.deep.equal(datasetExpected.title) expect(dataset.version).to.deep.equal(newVersion) + expect(dataset.metadataBlocks[0].fields.publicationDate).to.deep.equal( + expectedPublicationDate + ) + expect(dataset.metadataBlocks[0].fields.citationDate).not.to.exist }) }) @@ -139,4 +152,26 @@ describe('Dataset JSDataverse Repository', () => { expect(dataset.version).to.deep.equal(datasetExpected.version) }) }) + + it('gets the dataset after changing the citation date field type', async () => { + const datasetResponse = await DatasetHelper.createDataset() + + await DatasetHelper.publishDataset(datasetResponse.persistentId) + await IntegrationTestsUtils.wait(1500) + + await DatasetHelper.setCitationDateFieldType(datasetResponse.persistentId, 'dateOfDeposit') + + await datasetRepository + .getByPersistentId(datasetResponse.persistentId, '1.0') + .then((dataset) => { + if (!dataset) { + throw new Error('Dataset not found') + } + const expectedPublicationDate = getCurrentDateInYYYYMMDDFormat() + expect(dataset.metadataBlocks[0].fields.publicationDate).to.deep.equal( + expectedPublicationDate + ) + expect(dataset.metadataBlocks[0].fields.citationDate).not.to.exist + }) + }) }) From ded688c65faa6c41d3ecaecb1ca86122dab7e3d9 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Thu, 7 Sep 2023 16:03:38 +0200 Subject: [PATCH 20/37] fix: add JSDatasetMapper unit tests --- .../mappers/JSDatasetMapper.spec.ts | 214 ++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts diff --git a/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts b/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts new file mode 100644 index 000000000..4ad8930f1 --- /dev/null +++ b/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts @@ -0,0 +1,214 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import { JSDatasetMapper } from '../../../../../src/dataset/infrastructure/mappers/JSDatasetMapper' +import { DatasetVersionState } from '@iqss/dataverse-client-javascript' +import { + CitationMetadataBlock, + DatasetMetadataBlock +} from '@iqss/dataverse-client-javascript/dist/datasets/domain/models/Dataset' +import { DatasetStatus, DatasetVersion } from '../../../../../src/dataset/domain/models/Dataset' + +chai.use(chaiAsPromised) +const expect = chai.expect + +const jsDataset = { + id: 505, + persistentId: 'doi:10.5072/FK2/B4B2MJ', + versionId: 101, + versionInfo: { + state: DatasetVersionState.DRAFT, + majorNumber: 0, + minorNumber: 0, + createTime: new Date('2023-09-07T13:40:04.000Z'), + lastUpdateTime: new Date('2023-09-07T13:40:04.000Z'), + releaseTime: undefined + }, + metadataBlocks: [ + { + name: 'citation', + fields: { + title: "Darwin's Finches", + author: [{ authorName: 'Finch, Fiona', authorAffiliation: 'Birds Inc.' }], + datasetContact: [ + { datasetContactName: 'Finch, Fiona', datasetContactEmail: 'finch@mailinator.com' } + ], + dsDescription: [ + { + dsDescriptionValue: + "Darwin's finches (also known as the Galápagos finches) are a group of about fifteen species of passerine birds." + } + ], + subject: ['Medicine, Health and Life Sciences'] + } + } as CitationMetadataBlock + ] as [CitationMetadataBlock, ...DatasetMetadataBlock[]], + license: { + name: 'CC0 1.0', + uri: 'http://creativecommons.org/publicdomain/zero/1.0', + iconUri: 'https://licensebuttons.net/p/zero/1.0/88x31.png' + } +} +const citation = + 'Finch, Fiona, 2023, "Darwin\'s Finches", https://doi.org/10.5072/FK2/B4B2MJ, Root, DRAFT VERSION' +const datasetSummaryFields = ['dsDescription', 'subject', 'keyword', 'publication', 'notesText'] +const expectedDataset = { + persistentId: 'doi:10.5072/FK2/B4B2MJ', + version: new DatasetVersion(0, 0, DatasetStatus.DRAFT), + citation: + 'Finch, Fiona, 2023, "Darwin\'s Finches", https://doi.org/10.5072/FK2/B4B2MJ, Root, DRAFT VERSION', + labels: [ + { semanticMeaning: 'dataset', value: 'Draft' }, + { semanticMeaning: 'warning', value: 'Unpublished' } + ], + summaryFields: [ + { + name: 'citation', + fields: { + dsDescription: [ + { + dsDescriptionValue: + "Darwin's finches (also known as the Galápagos finches) are a group of about fifteen species of passerine birds." + } + ], + subject: ['Medicine, Health and Life Sciences'] + } + } + ], + license: { + name: 'CC0 1.0', + uri: 'http://creativecommons.org/publicdomain/zero/1.0', + iconUri: 'https://licensebuttons.net/p/zero/1.0/88x31.png' + }, + metadataBlocks: [ + { + name: 'citation', + fields: { + title: "Darwin's Finches", + author: [{ authorName: 'Finch, Fiona', authorAffiliation: 'Birds Inc.' }], + datasetContact: [ + { datasetContactName: 'Finch, Fiona', datasetContactEmail: 'finch@mailinator.com' } + ], + dsDescription: [ + { + dsDescriptionValue: + "Darwin's finches (also known as the Galápagos finches) are a group of about fifteen species of passerine birds." + } + ], + subject: ['Medicine, Health and Life Sciences'] + } + } + ] +} + +describe('JS Dataset Mapper', () => { + it('maps jsDataset model to the domain Dataset model', () => { + expect(expectedDataset).to.deep.equal( + JSDatasetMapper.toDataset(jsDataset, citation, datasetSummaryFields) + ) + }) + + it('maps jsDataset model to the domain Dataset model when alternativePersistentId is provided', () => { + const jsDatasetWithAlternativePersistentId = { + ...jsDataset, + alternativePersistentId: 'doi:10.5072/FK2/B4B2MY' + } + const expectedDatasetWithAlternativePersistentId = { + ...expectedDataset, + metadataBlocks: [ + { + name: 'citation', + fields: { + title: "Darwin's Finches", + author: [{ authorName: 'Finch, Fiona', authorAffiliation: 'Birds Inc.' }], + datasetContact: [ + { datasetContactName: 'Finch, Fiona', datasetContactEmail: 'finch@mailinator.com' } + ], + dsDescription: [ + { + dsDescriptionValue: + "Darwin's finches (also known as the Galápagos finches) are a group of about fifteen species of passerine birds." + } + ], + subject: ['Medicine, Health and Life Sciences'], + alternativePersistentId: 'doi:10.5072/FK2/B4B2MY' + } + } + ] + } + + expect(expectedDatasetWithAlternativePersistentId).to.deep.equal( + JSDatasetMapper.toDataset( + jsDatasetWithAlternativePersistentId, + citation, + datasetSummaryFields + ) + ) + }) + + it('maps jsDataset model to the domain Dataset model when citationDate is provided', () => { + const jsDatasetWithCitationDate = { + ...jsDataset, + citationDate: '2023-02-12' + } + const expectedDatasetWithCitationDate = { + ...expectedDataset, + metadataBlocks: [ + { + name: 'citation', + fields: { + title: "Darwin's Finches", + author: [{ authorName: 'Finch, Fiona', authorAffiliation: 'Birds Inc.' }], + datasetContact: [ + { datasetContactName: 'Finch, Fiona', datasetContactEmail: 'finch@mailinator.com' } + ], + dsDescription: [ + { + dsDescriptionValue: + "Darwin's finches (also known as the Galápagos finches) are a group of about fifteen species of passerine birds." + } + ], + subject: ['Medicine, Health and Life Sciences'], + citationDate: '2023-02-12' + } + } + ] + } + + expect(expectedDatasetWithCitationDate).to.deep.equal( + JSDatasetMapper.toDataset(jsDatasetWithCitationDate, citation, datasetSummaryFields) + ) + }) + + it('maps jsDataset model to the domain Dataset model when publicationDate is provided', () => { + const jsDatasetWithPublicationDate = { + ...jsDataset, + publicationDate: '2023-02-12' + } + const expectedDatasetWithPublicationDate = { + ...expectedDataset, + metadataBlocks: [ + { + name: 'citation', + fields: { + title: "Darwin's Finches", + author: [{ authorName: 'Finch, Fiona', authorAffiliation: 'Birds Inc.' }], + datasetContact: [ + { datasetContactName: 'Finch, Fiona', datasetContactEmail: 'finch@mailinator.com' } + ], + dsDescription: [ + { + dsDescriptionValue: + "Darwin's finches (also known as the Galápagos finches) are a group of about fifteen species of passerine birds." + } + ], + subject: ['Medicine, Health and Life Sciences'], + publicationDate: '2023-02-12' + } + } + ] + } + expect(expectedDatasetWithPublicationDate).to.deep.equal( + JSDatasetMapper.toDataset(jsDatasetWithPublicationDate, citation, datasetSummaryFields) + ) + }) +}) From 15e8c67f23614c2d49594dd407489cfa338fde78 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 12 Sep 2023 16:02:42 +0200 Subject: [PATCH 21/37] feat(FileOptionsMenu): add isDeleted property to the File model and show modal --- src/files/domain/models/File.ts | 9 +++--- .../FileAlreadyDeletedModal.module.scss | 5 +++ .../FileAlreadyDeletedModal.tsx | 29 +++++++++++++++++ .../file-options-menu/FileOptionsMenu.tsx | 32 ++++++++++++++++--- .../FileOptionsMenu.stories.tsx | 9 +++--- .../files/domain/models/FileMother.ts | 17 +++++++--- .../FileOptionsMenu.spec.tsx | 20 ++++++++++-- 7 files changed, 102 insertions(+), 19 deletions(-) create mode 100644 src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-action-buttons/file-options-menu/FileAlreadyDeletedModal.module.scss create mode 100644 src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-action-buttons/file-options-menu/FileAlreadyDeletedModal.tsx diff --git a/src/files/domain/models/File.ts b/src/files/domain/models/File.ts index f49cb5947..471760dd3 100644 --- a/src/files/domain/models/File.ts +++ b/src/files/domain/models/File.ts @@ -131,12 +131,13 @@ export class File { readonly date: FileDate, readonly downloads: number, readonly labels: FileLabel[], - readonly checksum?: string, + public readonly isDeleted: boolean, readonly thumbnail?: string, - readonly directory?: string, + readonly checksum?: string, readonly embargo?: FileEmbargo, - readonly tabularData?: FileTabularData, - readonly description?: string + readonly directory?: string, + readonly description?: string, + readonly tabularData?: FileTabularData ) {} getLink(): string { diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-action-buttons/file-options-menu/FileAlreadyDeletedModal.module.scss b/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-action-buttons/file-options-menu/FileAlreadyDeletedModal.module.scss new file mode 100644 index 000000000..97f799fbe --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-action-buttons/file-options-menu/FileAlreadyDeletedModal.module.scss @@ -0,0 +1,5 @@ +@import "node_modules/@iqss/dataverse-design-system/src/lib/assets/styles/design-tokens/colors.module"; + +.paragraph { + color: $dv-danger-color; +} \ No newline at end of file diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-action-buttons/file-options-menu/FileAlreadyDeletedModal.tsx b/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-action-buttons/file-options-menu/FileAlreadyDeletedModal.tsx new file mode 100644 index 000000000..07651d5ed --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-action-buttons/file-options-menu/FileAlreadyDeletedModal.tsx @@ -0,0 +1,29 @@ +import { Button, Modal } from '@iqss/dataverse-design-system' +import { ExclamationCircleFill } from 'react-bootstrap-icons' +import styles from './FileAlreadyDeletedModal.module.scss' + +interface FileAlreadyDeletedModalProps { + show: boolean + handleClose: () => void +} +export function FileAlreadyDeletedModal({ show, handleClose }: FileAlreadyDeletedModalProps) { + return ( + + + Edit File + + +

+ + This file has already been deleted (or replaced) in the current version. It may not be + edited. +

+
+ + + +
+ ) +} diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-action-buttons/file-options-menu/FileOptionsMenu.tsx b/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-action-buttons/file-options-menu/FileOptionsMenu.tsx index 56d11a735..407f92582 100644 --- a/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-action-buttons/file-options-menu/FileOptionsMenu.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-action-buttons/file-options-menu/FileOptionsMenu.tsx @@ -1,9 +1,11 @@ import { File } from '../../../../../../../../files/domain/models/File' -import { DropdownButton, DropdownHeader, Tooltip } from '@iqss/dataverse-design-system' +import { Button, DropdownButton, DropdownHeader, Tooltip } from '@iqss/dataverse-design-system' import { PencilFill, ThreeDotsVertical } from 'react-bootstrap-icons' import { useSession } from '../../../../../../../session/SessionContext' import { EditFilesOptions } from '../../../edit-files-menu/EditFilesOptions' import { useTranslation } from 'react-i18next' +import { useState } from 'react' +import { FileAlreadyDeletedModal } from './FileAlreadyDeletedModal' export function FileOptionsMenu({ file }: { file: File }) { const { t } = useTranslation('files') @@ -11,15 +13,35 @@ export function FileOptionsMenu({ file }: { file: File }) { const userHasDatasetUpdatePermissions = true // TODO - Implement permissions const datasetHasValidTermsOfAccess = true // TODO - Implement terms of access validation const datasetLockedFromEdits = false // TODO - Ask Guillermo if this a dataset property coming from the api - // const isDeleted = false // TODO - Ask Guillermo if this is a file property coming from the api + const [showFileAlreadyDeletedModal, setShowFileAlreadyDeletedModal] = useState(false) if (!user || !userHasDatasetUpdatePermissions || !datasetHasValidTermsOfAccess) { return <> } - // if (isDeleted) { - // return <> // TODO - If the file is already deleted show fileAlreadyDeletedPrevious modal (ask Guillermo if isDeleted is coming from the backend) - // } + if (file.isDeleted) { + return ( + <> + {t('actions.optionsMenu.title')}}> + diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-info-messages/IngestInfoMessage.tsx b/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-info-messages/IngestInfoMessage.tsx index caf7b8f41..3899b191a 100644 --- a/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-info-messages/IngestInfoMessage.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-actions/file-actions-cell/file-info-messages/IngestInfoMessage.tsx @@ -13,7 +13,7 @@ export function IngestInfoMessage({ ingest }: IngestInfoMessageProps) { if (ingest.status === FileIngestStatus.IN_PROGRESS) { return ( - Ingest in progress... + {t('ingest.inProgress')} ) } @@ -22,18 +22,19 @@ export function IngestInfoMessage({ ingest }: IngestInfoMessageProps) { return ( - File available in original format only{' '} + {t('ingest.error.info')}{' '} - - Tabular ingest + + {t('ingest.error.tabularIngest')} {' '} - was unsuccessful.{' '} {ingest.reportMessage - ? ingest.reportMessage - : 'Ingest failed. No further information is available.'} + ? t('ingest.error.reportMessage', { + reportMessage: ingest.reportMessage + }) + : t('ingest.error.reportMessageDefault')}

} /> From e909312adacc2d3795e7ac733c5cdf7224f111ff Mon Sep 17 00:00:00 2001 From: GPortas Date: Fri, 15 Sep 2023 10:29:26 +0100 Subject: [PATCH 26/37] Fixed: dev.Dockerfile to avoid package installation issues --- dev.Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev.Dockerfile b/dev.Dockerfile index 6f2e59663..8cea85333 100644 --- a/dev.Dockerfile +++ b/dev.Dockerfile @@ -1,5 +1,7 @@ FROM node:19.6.1-alpine as BUILD_IMAGE +RUN apk --no-cache add python3 make g++ + WORKDIR /usr/src/app/packages/design-system COPY ./packages/design-system ./ RUN npm install @@ -7,9 +9,7 @@ RUN npm run build WORKDIR /usr/src/app COPY package.json ./ -COPY package-lock.json ./ COPY .npmrc ./ -RUN npm uninstall --save-dev lerna RUN npm install FROM node:19.6.1-alpine From 0be71713d5b7687313385dd4c6c164a1d31d79d9 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 18 Sep 2023 10:52:32 +0200 Subject: [PATCH 27/37] fix: remove debugging log --- src/dataset/infrastructure/mappers/JSDatasetMapper.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/dataset/infrastructure/mappers/JSDatasetMapper.ts b/src/dataset/infrastructure/mappers/JSDatasetMapper.ts index c1277b5a3..878f75d68 100644 --- a/src/dataset/infrastructure/mappers/JSDatasetMapper.ts +++ b/src/dataset/infrastructure/mappers/JSDatasetMapper.ts @@ -18,7 +18,6 @@ import { export class JSDatasetMapper { static toDataset(jsDataset: JSDataset, citation: string, summaryFieldsNames: string[]): Dataset { - console.log('js-dataverse getDataset', jsDataset) return new Dataset.Builder( jsDataset.persistentId, JSDatasetMapper.toVersion(jsDataset.versionId, jsDataset.versionInfo), From 8cdf2bcb2fb00e0110b3dd73d64dfd8ffca5256e Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 18 Sep 2023 10:55:05 +0200 Subject: [PATCH 28/37] fix: remove debugging error log --- src/files/infrastructure/FileJSDataverseRepository.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/files/infrastructure/FileJSDataverseRepository.ts b/src/files/infrastructure/FileJSDataverseRepository.ts index a5897ba3d..f397a19f5 100644 --- a/src/files/infrastructure/FileJSDataverseRepository.ts +++ b/src/files/infrastructure/FileJSDataverseRepository.ts @@ -48,7 +48,6 @@ export class FileJSDataverseRepository implements FileRepository { ) ) .catch((error: WriteError) => { - console.error('Error getting files from Dataverse', error) throw new Error(error.message) }) } @@ -84,7 +83,6 @@ export class FileJSDataverseRepository implements FileRepository { JSFileMapper.toFileUserPermissions(id, jsFileUserPermissions) ) .catch((error: WriteError) => { - console.error('Error getting the file user permissions from Dataverse', error) throw new Error(error.message) }) } From d989455743573bd8b10a391a17fba51c9a1e411a Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 18 Sep 2023 11:21:57 +0200 Subject: [PATCH 29/37] fix: remove outdated TODO --- src/files/infrastructure/mappers/JSFileMapper.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/files/infrastructure/mappers/JSFileMapper.ts b/src/files/infrastructure/mappers/JSFileMapper.ts index 94dcb30ea..d8f92874c 100644 --- a/src/files/infrastructure/mappers/JSFileMapper.ts +++ b/src/files/infrastructure/mappers/JSFileMapper.ts @@ -134,7 +134,6 @@ export class JSFileMapper { }) } - // TODO - Add custom labels when they are added to js-dataverse return fileLabels } From 7eb76382db382d51b3c7bad4c0caa66f13ed221a Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 18 Sep 2023 16:06:34 +0200 Subject: [PATCH 30/37] fix(FileDate): replicate jsf date format --- .../file-info-cell/file-info-data/FileDate.tsx | 8 +++++++- .../file-info-data/FileEmbargoDate.tsx | 6 +++++- tests/component/files/domain/models/FileMother.ts | 5 ++--- .../file-info-data/FileDate.spec.tsx | 4 ++-- .../file-info-data/FileEmbargoDate.spec.tsx | 14 ++++++-------- 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileDate.tsx b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileDate.tsx index 243991cc7..a9483a57b 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileDate.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileDate.tsx @@ -1,12 +1,18 @@ import { FileDate as FileDateModel } from '../../../../../../../files/domain/models/File' import { useTranslation } from 'react-i18next' +import i18n from '../../../../../../../i18n' export function FileDate({ date }: { date: FileDateModel }) { const { t } = useTranslation('files') return (
- {t(`table.date.${date.type}`)} {date.date.toDateString()} + {t(`table.date.${date.type}`)}{' '} + {date.date.toLocaleDateString('en-US', { + year: 'numeric', + month: 'short', + day: 'numeric' + })}
) diff --git a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileEmbargoDate.tsx b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileEmbargoDate.tsx index b34cedd26..e7e5358ba 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileEmbargoDate.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileEmbargoDate.tsx @@ -17,7 +17,11 @@ export function FileEmbargoDate({ embargo, publishingStatus }: FileEmbargoDatePr
{t(embargoTypeOfDate(embargo.isActive, publishingStatus))}{' '} - {embargo.dateAvailable.toDateString()} + {embargo.dateAvailable.toLocaleDateString('en-US', { + year: 'numeric', + month: 'short', + day: 'numeric' + })}
) diff --git a/tests/component/files/domain/models/FileMother.ts b/tests/component/files/domain/models/FileMother.ts index b4a7eeeb1..4aeb8e4f6 100644 --- a/tests/component/files/domain/models/FileMother.ts +++ b/tests/component/files/domain/models/FileMother.ts @@ -23,9 +23,8 @@ const createFakeFileLabel = (): FileLabel => ({ }) export class FileEmbargoMother { - static create(): FileEmbargo { - const dateAvailable = faker.date.future() - return new FileEmbargo(dateAvailable) + static create(dateAvailable?: Date): FileEmbargo { + return new FileEmbargo(dateAvailable ?? faker.date.future()) } static createNotActive(): FileEmbargo { diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileDate.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileDate.spec.tsx index 893d59762..040a5758c 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileDate.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileDate.spec.tsx @@ -2,9 +2,9 @@ import { FileDate } from '../../../../../../../../../src/sections/dataset/datase import { FileDateType } from '../../../../../../../../../src/files/domain/models/File' describe('FileDate', () => { it('renders the date', () => { - const date = { type: FileDateType.PUBLISHED, date: new Date() } + const date = { type: FileDateType.PUBLISHED, date: new Date('2023-09-18') } cy.customMount() - cy.findByText(`Published ${date.date.toDateString()}`).should('exist') + cy.findByText(`Published Sep 18, 2023`).should('exist') }) }) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileEmbargoDate.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileEmbargoDate.spec.tsx index afff9c62f..4ef4fe87b 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileEmbargoDate.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileEmbargoDate.spec.tsx @@ -4,31 +4,29 @@ import { FileEmbargoMother } from '../../../../../../../files/domain/models/File describe('FileEmbargoDate', () => { it('renders the embargo date when embargo exists', () => { - const embargo = FileEmbargoMother.create() + const embargo = FileEmbargoMother.create(new Date('2123-09-18')) const status = FilePublishingStatus.RELEASED cy.customMount() - cy.findByText(`Embargoed until ${embargo.dateAvailable.toDateString()}`).should('exist') + cy.findByText(`Embargoed until Sep 18, 2123`).should('exist') }) it('renders the until embargo date when embargo is not active and the file is not released', () => { - const embargo = FileEmbargoMother.createNotActive() + const embargo = FileEmbargoMother.create(new Date('2023-09-15')) const status = FilePublishingStatus.RELEASED cy.customMount() - cy.findByText(`Was embargoed until ${embargo.dateAvailable.toDateString()}`).should('exist') + cy.findByText(`Was embargoed until Sep 15, 2023`).should('exist') }) it('renders the draft until embargo date when embargo is active and the file is not released', () => { - const embargo = FileEmbargoMother.create() + const embargo = FileEmbargoMother.create(new Date('2123-09-18')) const status = FilePublishingStatus.DRAFT cy.customMount() - cy.findByText(`Draft: will be embargoed until ${embargo.dateAvailable.toDateString()}`).should( - 'exist' - ) + cy.findByText(`Draft: will be embargoed until Sep 18, 2123`).should('exist') }) it('renders an empty fragment when embargo is undefined', () => { From ec26f1c60b0a940c744adc1b26cb1f7941d68058 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 18 Sep 2023 16:55:28 +0200 Subject: [PATCH 31/37] fix(FileChecksum): correctly display the truncated checksum --- .../file-info-data/FileDate.tsx | 1 - .../CopyToClipboardButton.tsx | 21 ++++++++++++++++++- .../files/domain/models/FileMother.ts | 7 ++++--- .../file-info-data/FileChecksum.spec.tsx | 4 ++-- .../file-info-data/FileTabularData.spec.tsx | 4 ++-- .../CopyToClipboardButton.spec.tsx | 14 +++++++++++++ 6 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileDate.tsx b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileDate.tsx index a9483a57b..a219b5017 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileDate.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileDate.tsx @@ -1,6 +1,5 @@ import { FileDate as FileDateModel } from '../../../../../../../files/domain/models/File' import { useTranslation } from 'react-i18next' -import i18n from '../../../../../../../i18n' export function FileDate({ date }: { date: FileDateModel }) { const { t } = useTranslation('files') diff --git a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.tsx b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.tsx index 6d5819bc2..357340090 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.tsx @@ -23,7 +23,7 @@ export function CopyToClipboardButton({ text }: { text: string }) { return ( - {text} + {truncateText(text)} {copied ? ( ) } + +function truncateText(text: string): string { + if (text.length <= 25) { + return text + } + let prefix = text.slice(0, 3) + let suffix = text.slice(-3) + + const secondColonIndex = text.indexOf(':', text.indexOf(':') + 1) + if (secondColonIndex !== -1) { + prefix = text.slice(0, secondColonIndex + 5) + } + + if (text.endsWith('==')) { + suffix = text.slice(-5) + } + + return `${prefix}...${suffix}` +} diff --git a/tests/component/files/domain/models/FileMother.ts b/tests/component/files/domain/models/FileMother.ts index 4aeb8e4f6..af460a101 100644 --- a/tests/component/files/domain/models/FileMother.ts +++ b/tests/component/files/domain/models/FileMother.ts @@ -34,10 +34,11 @@ export class FileEmbargoMother { } export class FileChecksumMother { - static create(): FileChecksum { + static create(props?: Partial): FileChecksum { return { algorithm: faker.lorem.word(), - value: faker.datatype.uuid() + value: faker.datatype.uuid(), + ...props } } } @@ -87,7 +88,7 @@ export class FileMother { ? { variablesCount: faker.datatype.number(100), observationsCount: faker.datatype.number(100), - unf: `UNF:${faker.datatype.uuid()}==` + unf: `UNF:6:${faker.datatype.uuid()}==` } : undefined, description: valueOrUndefined(faker.lorem.paragraph()), diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileChecksum.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileChecksum.spec.tsx index f2888878a..8367973d0 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileChecksum.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileChecksum.spec.tsx @@ -4,11 +4,11 @@ import { FileChecksumMother } from '../../../../../../../files/domain/models/Fil describe('FileChecksum', () => { it('renders the checksum and CopyToClipboardButton when checksum is provided', () => { - const checksum = FileChecksumMother.create() + const checksum = FileChecksumMother.create({ value: '0187a54071542738aa47939e8218e5f2' }) cy.customMount() cy.findByText(`${checksum.algorithm}:`).should('exist') - cy.findByText(checksum.value).should('exist') + cy.findByText('018...5f2').should('exist') cy.findByRole('button', { name: /Copy to clipboard icon/ }).should('exist') }) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileTabularData.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileTabularData.spec.tsx index 3c1d046dc..f30b9386d 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileTabularData.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileTabularData.spec.tsx @@ -6,12 +6,12 @@ describe('FileTabularData', () => { const tabularData = { variablesCount: 10, observationsCount: 100, - unf: 'ABC123' + unf: 'UNF:6:xXw6cIZnwHWvmRdwhYCQZA==' } cy.customMount() cy.findByText(/10 Variables, 100 Observations/).should('exist') - cy.findByText(tabularData.unf).should('exist') + cy.findByText('UNF:6:xXw6...QZA==').should('exist') cy.findByRole('button', { name: /Copy to clipboard icon/ }).should('exist') }) diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx index 9c94b34c6..6d855e0d9 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton.spec.tsx @@ -26,4 +26,18 @@ describe('CopyToClipboardButton', () => { cy.findByRole('button', { name: /Copy to clipboard icon/ }).trigger('mouseover') cy.findByText('Click to copy Sample text to copy').should('exist') }) + + it('truncates text when it is too long', () => { + const textToCopy = '0187a54071542738aa47939e8218e5f2' + cy.customMount() + + cy.findByText('018...5f2').should('exist') + }) + + it('truncates text when it is too long and it is UNF', () => { + const textToCopy = 'UNF:6:xXw6cIZnwHWvmRdwhYCQZA==' + cy.customMount() + + cy.findByText('UNF:6:xXw6...QZA==').should('exist') + }) }) From b0cbf6e3defee81efe1326b506e9df1099bbdedd Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 18 Sep 2023 17:41:06 +0200 Subject: [PATCH 32/37] fix(FileSize): should return only 1 decimal place --- src/files/domain/models/File.ts | 4 +++- .../file-info-data/FileType.spec.tsx | 24 ++++++++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/files/domain/models/File.ts b/src/files/domain/models/File.ts index 76ae9d305..7a2acb075 100644 --- a/src/files/domain/models/File.ts +++ b/src/files/domain/models/File.ts @@ -22,7 +22,9 @@ export class FileSize { } toString(): string { - return `${this.value} ${this.unit}` + const formattedValue = + this.value % 1 === 0 ? this.value.toFixed(0) : (Math.round(this.value * 10) / 10).toString() + return `${formattedValue} ${this.unit}` } toBytes(): number { diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileType.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileType.spec.tsx index 3686cbe69..aaa1d6730 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileType.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileType.spec.tsx @@ -1,11 +1,29 @@ import { FileMother } from '../../../../../../../files/domain/models/FileMother' import { FileType } from '../../../../../../../../../src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileType' +import { + FileSize, + FileSizeUnit, + FileType as FileTypeModel +} from '../../../../../../../../../src/files/domain/models/File' describe('FileType', () => { - it('renders the type and size correctly', () => { - const file = FileMother.create() + it('renders the type and size correctly when there are no decimals', () => { + const file = FileMother.create({ + type: new FileTypeModel('text/plain'), + size: new FileSize(123.03932894722, FileSizeUnit.BYTES) + }) cy.customMount() - cy.findByText(`${file.type.toDisplayFormat()} - ${file.size.toString()}`).should('exist') + cy.findByText(`Text/plain - 123 B`).should('exist') + }) + + it('renders the type and size correctly when there are decimals', () => { + const file = FileMother.create({ + type: new FileTypeModel('text/plain'), + size: new FileSize(123.932894722, FileSizeUnit.MEGABYTES) + }) + cy.customMount() + + cy.findByText(`Text/plain - 123.9 MB`).should('exist') }) }) From 4f890350ddcc98b8e8c946c63f8df216c8ae2348 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 18 Sep 2023 17:53:20 +0200 Subject: [PATCH 33/37] fix(SortByButton): bold selected option --- .../file-criteria-form/FileCriteriaSortBy.tsx | 12 +++++- .../FileCriteriaSortBy.spec.tsx | 39 +++++++++++++++---- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/sections/dataset/dataset-files/file-criteria-form/FileCriteriaSortBy.tsx b/src/sections/dataset/dataset-files/file-criteria-form/FileCriteriaSortBy.tsx index 89d0f7726..3573e281d 100644 --- a/src/sections/dataset/dataset-files/file-criteria-form/FileCriteriaSortBy.tsx +++ b/src/sections/dataset/dataset-files/file-criteria-form/FileCriteriaSortBy.tsx @@ -3,6 +3,7 @@ import styles from './FileCriteriaForm.module.scss' import { FileCriteria, FileSortByOption } from '../../../../files/domain/models/FileCriteria' import { DropdownButton, DropdownButtonItem } from '@iqss/dataverse-design-system' import { useTranslation } from 'react-i18next' +import { useState } from 'react' export function FileCriteriaSortBy({ criteria, @@ -12,8 +13,12 @@ export function FileCriteriaSortBy({ onCriteriaChange: (criteria: FileCriteria) => void }) { const { t } = useTranslation('files') + const [selectedOption, setSelectedOption] = useState(criteria.sortBy) const handleSortChange = (eventKey: string | null) => { - onCriteriaChange(criteria.withSortBy(eventKey as FileSortByOption)) + if (selectedOption !== eventKey) { + setSelectedOption(eventKey as FileSortByOption) + onCriteriaChange(criteria.withSortBy(eventKey as FileSortByOption)) + } } return ( @@ -27,7 +32,10 @@ export function FileCriteriaSortBy({ withSpacing onSelect={handleSortChange}> {Object.values(FileSortByOption).map((sortByOption) => ( - + {t(`criteria.sortBy.options.${sortByOption}`)} ))} diff --git a/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaSortBy.spec.tsx b/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaSortBy.spec.tsx index 50437e287..a4a8c1f1e 100644 --- a/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaSortBy.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/file-criteria-form/FileCriteriaSortBy.spec.tsx @@ -3,6 +3,7 @@ import { FileCriteria, FileSortByOption } from '../../../../../../src/files/domain/models/FileCriteria' +import styles from '../../../../../../src/sections/dataset/dataset-files/file-criteria-form/FileCriteriaForm.module.scss' const defaultCriteria = new FileCriteria() describe('FilesCriteriaSortBy', () => { @@ -13,13 +14,6 @@ describe('FilesCriteriaSortBy', () => { ) - cy.findByRole('button', { name: /Sort/ }).click() - cy.findByText('Name (A-Z)').should('exist').click() - cy.wrap(onCriteriaChange).should( - 'be.calledWith', - defaultCriteria.withSortBy(FileSortByOption.NAME_AZ) - ) - cy.findByRole('button', { name: /Sort/ }).click() cy.findByText('Name (Z-A)').click() cy.wrap(onCriteriaChange).should( @@ -55,4 +49,35 @@ describe('FilesCriteriaSortBy', () => { defaultCriteria.withSortBy(FileSortByOption.TYPE) ) }) + + it('does not call the onCriteriaChange callback when the same option is selected', () => { + const onCriteriaChange = cy.stub().as('onCriteriaChange') + + cy.customMount( + + ) + + cy.findByRole('button', { name: /Sort/ }).click() + cy.findByText('Name (A-Z)').should('exist').click() + cy.wrap(onCriteriaChange).should( + 'not.be.calledWith', + defaultCriteria.withSortBy(FileSortByOption.NAME_AZ) + ) + }) + + it('changes the sort by option to bold when selected', () => { + const onCriteriaChange = cy.stub().as('onCriteriaChange') + + cy.customMount( + + ) + + cy.findByRole('button', { name: /Sort/ }).click() + cy.findByText('Name (A-Z)').should('have.class', styles['selected-option']) + + cy.findByRole('button', { name: 'Name (Z-A)' }).click() + + cy.findByRole('button', { name: /Sort/ }).click() + cy.findByText('Name (Z-A)').should('have.class', styles['selected-option']) + }) }) From cb5cc72dc65106abc9ff585162606f9d67564a7c Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 19 Sep 2023 09:49:02 +0200 Subject: [PATCH 34/37] fix: embargo e2e test --- tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx b/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx index cbd76c35a..8f36d3437 100644 --- a/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx +++ b/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx @@ -276,7 +276,7 @@ describe('Dataset', () => { cy.findByText('Files').should('exist') cy.findByText(/Deposited/).should('exist') - cy.findByText('Draft: will be embargoed until Wed Oct 20 2100').should('exist') + cy.findByText('Draft: will be embargoed until Oct 20, 2100').should('exist') cy.findByRole('button', { name: 'Access File' }).should('exist').click() cy.findByText('Embargoed').should('exist') From ee46d318c88faf6ab240fe55f6e1e95e5af388bc Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 19 Sep 2023 10:52:31 +0200 Subject: [PATCH 35/37] fix(Storybook): remove duplicated story after merge --- .../edit-files-menu/EditFilesMenu.stories.tsx | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 src/stories/dataset/dataset-files/files-table/file-actions/file-action-buttons/edit-files-menu/EditFilesMenu.stories.tsx diff --git a/src/stories/dataset/dataset-files/files-table/file-actions/file-action-buttons/edit-files-menu/EditFilesMenu.stories.tsx b/src/stories/dataset/dataset-files/files-table/file-actions/file-action-buttons/edit-files-menu/EditFilesMenu.stories.tsx deleted file mode 100644 index d633dc6e3..000000000 --- a/src/stories/dataset/dataset-files/files-table/file-actions/file-action-buttons/edit-files-menu/EditFilesMenu.stories.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react' -import { WithI18next } from '../../../../../../WithI18next' -import { WithSettings } from '../../../../../../WithSettings' -import { FileMother } from '../../../../../../../../tests/component/files/domain/models/FileMother' -import { EditFilesMenu } from '../../../../../../../sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu' -import { WithLoggedInUser } from '../../../../../../WithLoggedInUser' - -const meta: Meta = { - title: 'Sections/Dataset Page/DatasetFiles/FilesTable/EditFilesMenu', - component: EditFilesMenu, - decorators: [WithI18next, WithSettings, WithLoggedInUser] -} - -export default meta -type Story = StoryObj - -export const Default: Story = { - render: () => -} From baff74d236a0b7cd64e6438a0037d71d91c75d94 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 19 Sep 2023 16:47:28 +0200 Subject: [PATCH 36/37] fix(Storybook): upgrade to v7.4.2 --- .storybook/main.ts | 15 +- package-lock.json | 4567 +++++++++++++++++++++++++++++++++++++------- package.json | 22 +- 3 files changed, 3935 insertions(+), 669 deletions(-) diff --git a/.storybook/main.ts b/.storybook/main.ts index c9625b02c..f7066d01f 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -1,15 +1,16 @@ +import { dirname, join } from "path"; import type { StorybookConfig } from '@storybook/react-vite' const config: StorybookConfig = { stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'], addons: [ - '@storybook/addon-links', - '@storybook/addon-essentials', - '@storybook/addon-interactions', - '@storybook/addon-a11y' + getAbsolutePath("@storybook/addon-links"), + getAbsolutePath("@storybook/addon-essentials"), + getAbsolutePath("@storybook/addon-interactions"), + getAbsolutePath("@storybook/addon-a11y") ], framework: { - name: '@storybook/react-vite', + name: getAbsolutePath("@storybook/react-vite"), options: {} }, docs: { @@ -18,3 +19,7 @@ const config: StorybookConfig = { staticDirs: ['../public'] } export default config + +function getAbsolutePath(value: string): any { + return dirname(require.resolve(join(value, "package.json"))); +} diff --git a/package-lock.json b/package-lock.json index 8332f0596..8996279a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,15 +43,15 @@ "@auto-it/released": "10.46.0", "@csstools/postcss-cascade-layers": "3.0.1", "@cypress/code-coverage": "3.10.7", - "@storybook/addon-a11y": "7.1.0", - "@storybook/addon-essentials": "7.1.0", - "@storybook/addon-interactions": "7.1.0", - "@storybook/addon-links": "7.1.0", - "@storybook/blocks": "7.1.0", - "@storybook/react": "7.1.0", - "@storybook/react-vite": "7.1.0", - "@storybook/test-runner": "0.11.0", - "@storybook/testing-library": "0.2.0", + "@storybook/addon-a11y": "7.4.2", + "@storybook/addon-essentials": "7.4.2", + "@storybook/addon-interactions": "7.4.2", + "@storybook/addon-links": "7.4.2", + "@storybook/blocks": "7.4.2", + "@storybook/react": "7.4.2", + "@storybook/react-vite": "7.4.2", + "@storybook/test-runner": "0.13.0", + "@storybook/testing-library": "0.2.1", "@testing-library/cypress": "9.0.0", "@types/chai-as-promised": "7.1.5", "@types/node-sass": "4.11.3", @@ -75,7 +75,7 @@ "eslint-plugin-prettier": "4.2.1", "eslint-plugin-react": "7.32.2", "eslint-plugin-simple-import-sort": "10.0.0", - "eslint-plugin-storybook": "0.6.12", + "eslint-plugin-storybook": "0.6.13", "eslint-plugin-unused-imports": "2.0.0", "jsdom": "21.1.0", "lcov-result-merger": "3.3.0", @@ -88,7 +88,7 @@ "react-dom": "18.2.0", "react-loading-skeleton": "3.3.1", "sinon": "15.0.3", - "storybook": "7.1.0", + "storybook": "7.4.2", "stylelint": "15.7.0", "stylelint-config-rational-order": "0.1.2", "stylelint-config-standard": "30.0.1", @@ -475,11 +475,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", - "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dependencies": { - "@babel/highlight": "^7.22.10", + "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" }, "engines": { @@ -551,9 +551,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", + "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", "engines": { "node": ">=6.9.0" } @@ -612,24 +612,24 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", - "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, "dependencies": { - "@babel/types": "^7.22.10" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -639,15 +639,15 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz", - "integrity": "sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -662,9 +662,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -695,9 +695,9 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } @@ -726,37 +726,38 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", + "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "license": "MIT", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz", + "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -785,14 +786,14 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -802,13 +803,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -860,29 +861,30 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "license": "MIT", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", - "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.10" + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" }, "engines": { "node": ">=6.9.0" @@ -902,11 +904,11 @@ } }, "node_modules/@babel/highlight": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", - "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -979,9 +981,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", - "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -990,9 +992,9 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1005,14 +1007,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" + "@babel/plugin-transform-optional-chaining": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1025,6 +1027,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -1041,6 +1044,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -1057,6 +1061,7 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", @@ -1376,9 +1381,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", - "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", + "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", @@ -1426,9 +1431,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", - "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", + "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1457,12 +1462,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", + "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -1474,18 +1479,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -1513,9 +1518,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", - "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", + "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1559,9 +1564,9 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", + "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1591,9 +1596,9 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", + "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1623,9 +1628,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1655,9 +1660,9 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", + "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1686,9 +1691,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", + "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1733,12 +1738,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", + "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -1750,13 +1755,13 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", + "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.5" }, @@ -1815,9 +1820,9 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", + "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1831,9 +1836,9 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", + "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1847,16 +1852,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" + "@babel/plugin-transform-parameters": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1882,9 +1887,9 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", + "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1898,9 +1903,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", - "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", + "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1915,9 +1920,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1946,13 +1951,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", + "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, @@ -2114,13 +2119,13 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.10.tgz", - "integrity": "sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz", + "integrity": "sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.10", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-typescript": "^7.22.5" }, @@ -2195,17 +2200,17 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", - "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.20.tgz", + "integrity": "sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.10", + "@babel/compat-data": "^7.22.20", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -2226,41 +2231,41 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.10", + "@babel/plugin-transform-async-generator-functions": "^7.22.15", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.10", + "@babel/plugin-transform-block-scoping": "^7.22.15", "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.10", + "@babel/plugin-transform-destructuring": "^7.22.15", "@babel/plugin-transform-dotall-regex": "^7.22.5", "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", "@babel/plugin-transform-member-expression-literals": "^7.22.5", "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-modules-systemjs": "^7.22.11", "@babel/plugin-transform-modules-umd": "^7.22.5", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.10", - "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.22.15", + "@babel/plugin-transform-parameters": "^7.22.15", "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", "@babel/plugin-transform-property-literals": "^7.22.5", "@babel/plugin-transform-regenerator": "^7.22.10", "@babel/plugin-transform-reserved-words": "^7.22.5", @@ -2274,7 +2279,7 @@ "@babel/plugin-transform-unicode-regex": "^7.22.5", "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.10", + "@babel/types": "^7.22.19", "babel-plugin-polyfill-corejs2": "^0.4.5", "babel-plugin-polyfill-corejs3": "^0.8.3", "babel-plugin-polyfill-regenerator": "^0.5.2", @@ -2289,13 +2294,13 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.5.tgz", - "integrity": "sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.15.tgz", + "integrity": "sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "@babel/plugin-transform-flow-strip-types": "^7.22.5" }, "engines": { @@ -2320,16 +2325,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", - "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz", + "integrity": "sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-typescript": "^7.22.5" + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-typescript": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -2339,9 +2344,9 @@ } }, "node_modules/@babel/register": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz", - "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", + "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", @@ -2502,13 +2507,13 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -2535,12 +2540,12 @@ } }, "node_modules/@babel/types": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", - "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "version": "7.22.19", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", + "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.19", "to-fast-properties": "^2.0.0" }, "engines": { @@ -3312,6 +3317,44 @@ "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==", "dev": true }, + "node_modules/@floating-ui/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", + "dev": true, + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "dev": true, + "dependencies": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.2.tgz", + "integrity": "sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==", + "dev": true, + "dependencies": { + "@floating-ui/dom": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.4.tgz", + "integrity": "sha512-qprfWkn82Iw821mcKofJ5Pk9wgioHicxcQMxx+5zt5GSKoqdWvgG5AxVmpmUUjzTLPVSH5auBrhI93Deayn/DA==", + "dev": true + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "dev": true, @@ -4555,8 +4598,9 @@ "license": "MIT" }, "node_modules/@jest/schemas": { - "version": "29.6.0", - "license": "MIT", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -4718,22 +4762,22 @@ } }, "node_modules/@jest/transform": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", - "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", + "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.1", + "@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.6.2", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", + "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", @@ -4750,10 +4794,11 @@ "dev": true }, "node_modules/@jest/types": { - "version": "29.6.1", - "license": "MIT", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dependencies": { - "@jest/schemas": "^29.6.0", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -5664,6 +5709,669 @@ "url": "https://opencollective.com/popperjs" } }, + "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, + "dependencies": { + "@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": { + "@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-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, + "dependencies": { + "@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": { + "@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-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, + "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-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/@react-aria/ssr": { "version": "3.6.0", "license": "Apache-2.0", @@ -6039,21 +6747,21 @@ } }, "node_modules/@storybook/addon-a11y": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-7.1.0.tgz", - "integrity": "sha512-omKNbkE5m2KglFD8HLBmmpLP7ZdiDDPwb29vkBBkNRAWw4xqwMN/TEAavTTdQdmGr3zvbANZc+LgIlnS5oiwLg==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-7.4.2.tgz", + "integrity": "sha512-M8cj1NYM8oqntAsJdSZwXnngX8nHtWCBYyD9Zgt5qbjwzk5Ha56CBri8oS03dISNV2TPHREULiTTp0tzvql7IQ==", "dev": true, "dependencies": { - "@storybook/addon-highlight": "7.1.0", - "@storybook/channels": "7.1.0", - "@storybook/client-logger": "7.1.0", - "@storybook/components": "7.1.0", - "@storybook/core-events": "7.1.0", + "@storybook/addon-highlight": "7.4.2", + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/components": "7.4.2", + "@storybook/core-events": "7.4.2", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/theming": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/manager-api": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/theming": "7.4.2", + "@storybook/types": "7.4.2", "axe-core": "^4.2.0", "lodash": "^4.17.21", "react-resize-detector": "^7.1.2" @@ -6075,26 +6783,112 @@ } } }, + "node_modules/@storybook/addon-a11y/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/addon-a11y/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-a11y/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-a11y/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/addon-a11y/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/addon-actions": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.1.0.tgz", - "integrity": "sha512-JQfcR1AjVWE/M4ayxfyCU/qSj5Jf5djKgvan0YaxTjtQr9tzIgTc93jeF+IPJMnv7ZoaeDW6BS/6n+zSDqJeTg==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.4.2.tgz", + "integrity": "sha512-aKHyYjxcWaOTf/7B8x4EmUNkDAiYJZyJfGTYg2TDEDs89x7/9slujAA01qIgOp74C9nWkHDUVdm7/J+h3kWJWw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.1.0", - "@storybook/components": "7.1.0", - "@storybook/core-events": "7.1.0", + "@storybook/client-logger": "7.4.2", + "@storybook/components": "7.4.2", + "@storybook/core-events": "7.4.2", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/theming": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/manager-api": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/theming": "7.4.2", + "@storybook/types": "7.4.2", "dequal": "^2.0.2", "lodash": "^4.17.21", "polished": "^4.2.2", "prop-types": "^15.7.2", "react-inspector": "^6.0.0", - "telejson": "^7.0.3", + "telejson": "^7.2.0", "ts-dedent": "^2.0.0", "uuid": "^9.0.0" }, @@ -6115,20 +6909,106 @@ } } }, + "node_modules/@storybook/addon-actions/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/addon-actions/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-actions/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-actions/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/addon-actions/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/addon-backgrounds": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.1.0.tgz", - "integrity": "sha512-6hSzERmm4z1j/CGSsjefa18qSgX/GnkIZ+2lA0Ju5M478UL60/m0C7fBkL5xDbNKMpuSPhO5oBSYevWbLrMX5g==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.4.2.tgz", + "integrity": "sha512-Vl6Vw1NzO5jRqlAEpG017z6N79Drlp7Wpw8O9+69/dKtTNmuLqLnPxWrn4nL2CNvghHToLMpToSAFpRo2fBZBg==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.1.0", - "@storybook/components": "7.1.0", - "@storybook/core-events": "7.1.0", + "@storybook/client-logger": "7.4.2", + "@storybook/components": "7.4.2", + "@storybook/core-events": "7.4.2", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/theming": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/manager-api": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/theming": "7.4.2", + "@storybook/types": "7.4.2", "memoizerific": "^1.11.3", "ts-dedent": "^2.0.0" }, @@ -6149,21 +7029,108 @@ } } }, - "node_modules/@storybook/addon-controls": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.1.0.tgz", - "integrity": "sha512-uw1ynZTFM+ABdd5Dj6iTT3r+fTIY1ljZ09jITszlPENNM9SphCX8lAT0w+8wRVQlbn0mVY0amm2/GtV1sgt+Nw==", + "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", "dev": true, "dependencies": { - "@storybook/blocks": "7.1.0", - "@storybook/client-logger": "7.1.0", - "@storybook/components": "7.1.0", - "@storybook/core-common": "7.1.0", - "@storybook/manager-api": "7.1.0", - "@storybook/node-logger": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/theming": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/addon-backgrounds/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/addon-backgrounds/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-controls": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.4.2.tgz", + "integrity": "sha512-qzSac1bulSa7mqkfBfyAqbP9PbIio5CjGJ5VyT055ab50e13gj1eS3I9EJHCupYb19E3f465QatrGhoaTsE4hg==", + "dev": true, + "dependencies": { + "@storybook/blocks": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/components": "7.4.2", + "@storybook/core-common": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/manager-api": "7.4.2", + "@storybook/node-logger": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/theming": "7.4.2", + "@storybook/types": "7.4.2", "lodash": "^4.17.21", "ts-dedent": "^2.0.0" }, @@ -6184,27 +7151,113 @@ } } }, + "node_modules/@storybook/addon-controls/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/addon-controls/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-controls/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-controls/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/addon-controls/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/addon-docs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.1.0.tgz", - "integrity": "sha512-WH8oODVMr56Zxso6nnbikyph10jNKWyttuSxjksNClogaOPVAIWzglGa8TiGygzurzwZYkMsNWliUKsG4X32nw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.4.2.tgz", + "integrity": "sha512-MV49/bGTibk2kvufk1+JEkDe2Ii/wfh5s+zO6a7p/FRy9zK0hQy3nEc56VpQ3+KzgDr0uyZI+mYq26OPwBuKRg==", "dev": true, "dependencies": { "@jest/transform": "^29.3.1", "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.1.0", - "@storybook/client-logger": "7.1.0", - "@storybook/components": "7.1.0", - "@storybook/csf-plugin": "7.1.0", - "@storybook/csf-tools": "7.1.0", + "@storybook/blocks": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/components": "7.4.2", + "@storybook/csf-plugin": "7.4.2", + "@storybook/csf-tools": "7.4.2", "@storybook/global": "^5.0.0", "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.1.0", - "@storybook/postinstall": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/react-dom-shim": "7.1.0", - "@storybook/theming": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/node-logger": "7.4.2", + "@storybook/postinstall": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/react-dom-shim": "7.4.2", + "@storybook/theming": "7.4.2", + "@storybook/types": "7.4.2", "fs-extra": "^11.1.0", "remark-external-links": "^8.0.0", "remark-slug": "^6.0.0", @@ -6219,25 +7272,111 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/addon-docs/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/addon-docs/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/addon-essentials": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.1.0.tgz", - "integrity": "sha512-KCNSQIPC5g1EJLqKQx0Ink91PytbL2YAv7DPXCkfmWyXKilK+u00cZeViqCt2EF9Q5LPzrTkw2wRvAv85UrHZQ==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "7.1.0", - "@storybook/addon-backgrounds": "7.1.0", - "@storybook/addon-controls": "7.1.0", - "@storybook/addon-docs": "7.1.0", - "@storybook/addon-highlight": "7.1.0", - "@storybook/addon-measure": "7.1.0", - "@storybook/addon-outline": "7.1.0", - "@storybook/addon-toolbars": "7.1.0", - "@storybook/addon-viewport": "7.1.0", - "@storybook/core-common": "7.1.0", - "@storybook/manager-api": "7.1.0", - "@storybook/node-logger": "7.1.0", - "@storybook/preview-api": "7.1.0", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.4.2.tgz", + "integrity": "sha512-9VqVe8pUogA9TIAl9xxNSdqU1zfXXdZW6J3BfT3r0DolU4nLusejs2xIu6smhEjZ1KYD6V30Uy9HDft/GRCSnw==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "7.4.2", + "@storybook/addon-backgrounds": "7.4.2", + "@storybook/addon-controls": "7.4.2", + "@storybook/addon-docs": "7.4.2", + "@storybook/addon-highlight": "7.4.2", + "@storybook/addon-measure": "7.4.2", + "@storybook/addon-outline": "7.4.2", + "@storybook/addon-toolbars": "7.4.2", + "@storybook/addon-viewport": "7.4.2", + "@storybook/core-common": "7.4.2", + "@storybook/manager-api": "7.4.2", + "@storybook/node-logger": "7.4.2", + "@storybook/preview-api": "7.4.2", "ts-dedent": "^2.0.0" }, "funding": { @@ -6249,15 +7388,187 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@storybook/addon-essentials/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/addon-essentials/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/addon-essentials/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/addon-highlight": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.1.0.tgz", - "integrity": "sha512-h7kSFq4AZt+Y8ULCi76En3B2T9LZTba1zq1Om7EhmUQMzhCOhwnWqd5syxAwbmfCv7brQRvFaC1RP4DY9YtRLA==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.4.2.tgz", + "integrity": "sha512-HpwQiYil9RlMz303wQ9+ElW6W+Z0baqBUemlQ1JJZ6Wm47mgVVy8vLPcdH3JQkv7E34f51apPKVKFqq49xDqaA==", "dev": true, "dependencies": { - "@storybook/core-events": "7.1.0", + "@storybook/core-events": "7.4.2", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.1.0" + "@storybook/preview-api": "7.4.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-highlight/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/addon-highlight/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-highlight/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-highlight/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/addon-highlight/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { "type": "opencollective", @@ -6265,22 +7576,22 @@ } }, "node_modules/@storybook/addon-interactions": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.1.0.tgz", - "integrity": "sha512-/szt1p22FIi96krgNGDe7YQQAjIo/Xfr6WJNiIBNEHz5Qh8uycFPn16k3YJBHIi0FLFVBdqBmrdp6IX+9TCxgQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.4.2.tgz", + "integrity": "sha512-Gr3UbrPRgtBmwYctFiIxYlg4pfe07sC5gvMJmMdzHSJo0yAmcw2fSzKe4aEPX4trdAIb+diQKi3TDqIBrOfCLQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.1.0", - "@storybook/components": "7.1.0", - "@storybook/core-common": "7.1.0", - "@storybook/core-events": "7.1.0", + "@storybook/client-logger": "7.4.2", + "@storybook/components": "7.4.2", + "@storybook/core-common": "7.4.2", + "@storybook/core-events": "7.4.2", "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "7.1.0", - "@storybook/manager-api": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/theming": "7.1.0", - "@storybook/types": "7.1.0", - "jest-mock": "^29.5.0", + "@storybook/instrumenter": "7.4.2", + "@storybook/manager-api": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/theming": "7.4.2", + "@storybook/types": "7.4.2", + "jest-mock": "^27.0.6", "polished": "^4.2.2", "ts-dedent": "^2.2.0" }, @@ -6301,20 +7612,106 @@ } } }, + "node_modules/@storybook/addon-interactions/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/addon-interactions/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-interactions/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-interactions/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/addon-interactions/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/addon-links": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.1.0.tgz", - "integrity": "sha512-1cEALwRfev7s/NDTJYwn6tg3JZv8zSwd12NMRWhc/PZdCMQf/X1TtOPqz/l3jqTkjANMQA+hxCNRNl4otPD1XQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.4.2.tgz", + "integrity": "sha512-XAspek8kkfiGq3NVt8SD108m54/dJWo+iDSmW3t/BQj2+sDPW8EpOg93X08YGoGMD8FSLOToeVC2Qi+kmAV0iw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.1.0", - "@storybook/core-events": "7.1.0", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/router": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/manager-api": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/router": "7.4.2", + "@storybook/types": "7.4.2", "prop-types": "^15.7.2", "ts-dedent": "^2.0.0" }, @@ -6335,19 +7732,105 @@ } } }, + "node_modules/@storybook/addon-links/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/addon-links/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-links/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-links/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/addon-links/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/addon-measure": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.1.0.tgz", - "integrity": "sha512-GUqsjU/TyrTyt+U0XkEJ3esEzfwxq9VtQi+HpIwUSVxJJmkyPX+LQROLWL8g+07YeytniWpyWAcfsk1jDbV8eQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.4.2.tgz", + "integrity": "sha512-fewNqI3mDAGAhFOFh/rdDS3dJ3e1QDmSVMB0KDJ7K22HOF2To/H9QfXHV24osnBRu6QemSIqObry1leF+u5BmQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.1.0", - "@storybook/components": "7.1.0", - "@storybook/core-events": "7.1.0", + "@storybook/client-logger": "7.4.2", + "@storybook/components": "7.4.2", + "@storybook/core-events": "7.4.2", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/manager-api": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/types": "7.4.2", "tiny-invariant": "^1.3.1" }, "funding": { @@ -6367,19 +7850,105 @@ } } }, + "node_modules/@storybook/addon-measure/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/addon-measure/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-measure/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-measure/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/addon-measure/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/addon-outline": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.1.0.tgz", - "integrity": "sha512-cOcyxcc80oGOm53xFInCQW1kJjX/jcrS3VQXoVUkIXf2NmwnOTp7MbkDqjCiiE0h/Za9QIqkbsTk/DrJvl905Q==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.4.2.tgz", + "integrity": "sha512-C6Zfoa6k2ef55O16GKV29T0wIYaDyiBtyd/fuTzz7hkpusSqKGFNeQyfG6hRmPv5yAib7+Pzl86cH3wGz85oTw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.1.0", - "@storybook/components": "7.1.0", - "@storybook/core-events": "7.1.0", + "@storybook/client-logger": "7.4.2", + "@storybook/components": "7.4.2", + "@storybook/core-events": "7.4.2", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/manager-api": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/types": "7.4.2", "ts-dedent": "^2.0.0" }, "funding": { @@ -6399,17 +7968,103 @@ } } }, + "node_modules/@storybook/addon-outline/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/addon-outline/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-outline/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-outline/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/addon-outline/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/addon-toolbars": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.1.0.tgz", - "integrity": "sha512-OUbmddPNWy8RN/PNdwpXJDkYKzaV9W1amRpEQM6esG8/yI/2P/v4gL6eLSeeH2V8+nL26kD7BZ0Gh9r+xORzJQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.4.2.tgz", + "integrity": "sha512-zSU8GpyMKo3vGxR7LQdvw5jV/6QUOfUepS3HEYGB88vlIPK7UriV8k9HB0FObEyYZKYU7wuPYBYhXApK4ZBVUA==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.1.0", - "@storybook/components": "7.1.0", - "@storybook/manager-api": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/theming": "7.1.0" + "@storybook/client-logger": "7.4.2", + "@storybook/components": "7.4.2", + "@storybook/manager-api": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/theming": "7.4.2" }, "funding": { "type": "opencollective", @@ -6428,19 +8083,105 @@ } } }, + "node_modules/@storybook/addon-toolbars/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/addon-toolbars/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-toolbars/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-toolbars/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/addon-toolbars/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/addon-viewport": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.1.0.tgz", - "integrity": "sha512-dvaD11qp2AG8xc9LubkYqp0yW+5ybaqTOn2uwK4qDDbwypkL+uE9K8G+8tQGIvfQPFye3ggpuqRzStZHr/JbsQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.4.2.tgz", + "integrity": "sha512-0mlqJmHezyZG9lLpj2LKN6HTZI015T3hYuFP4MwZRj579e246DvcBTw/h3n3bjLRGglapmFqkCw9PRVMhsQ/CA==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.1.0", - "@storybook/components": "7.1.0", - "@storybook/core-events": "7.1.0", + "@storybook/client-logger": "7.4.2", + "@storybook/components": "7.4.2", + "@storybook/core-events": "7.4.2", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/theming": "7.1.0", + "@storybook/manager-api": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/theming": "7.4.2", "memoizerific": "^1.11.3", "prop-types": "^15.7.2" }, @@ -6461,23 +8202,109 @@ } } }, + "node_modules/@storybook/addon-viewport/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/addon-viewport/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-viewport/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-viewport/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/addon-viewport/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/blocks": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.1.0.tgz", - "integrity": "sha512-DWK3+l+OycPx4QNPobTxWzQUy3Q+D2DNbzTUX1ndew6cuzfi87O7k1hmn//dZQoFzV0BZzx02kVljNQY56w/Bw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.4.2.tgz", + "integrity": "sha512-ijuZBsYfQBuwMA8Lb1dT6t2PzqhkOtIdc+G5iQ/IgWLX5HT1br+Wq8o3TUWrqACM9VKIASnJk13FMAOeGggD/w==", "dev": true, "dependencies": { - "@storybook/channels": "7.1.0", - "@storybook/client-logger": "7.1.0", - "@storybook/components": "7.1.0", - "@storybook/core-events": "7.1.0", + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/components": "7.4.2", + "@storybook/core-events": "7.4.2", "@storybook/csf": "^0.1.0", - "@storybook/docs-tools": "7.1.0", + "@storybook/docs-tools": "7.4.2", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/theming": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/manager-api": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/theming": "7.4.2", + "@storybook/types": "7.4.2", "@types/lodash": "^4.14.167", "color-convert": "^2.0.1", "dequal": "^2.0.2", @@ -6486,7 +8313,7 @@ "memoizerific": "^1.11.3", "polished": "^4.2.2", "react-colorful": "^5.1.2", - "telejson": "^7.0.3", + "telejson": "^7.2.0", "tocbot": "^4.20.1", "ts-dedent": "^2.0.0", "util-deprecate": "^1.0.2" @@ -6500,16 +8327,102 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@storybook/blocks/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/blocks/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/blocks/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/blocks/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/blocks/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/builder-manager": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.1.0.tgz", - "integrity": "sha512-7uwpy+zPF+MIWeG1w8hflwJm0eo4q4G3n/KDbB5OhaU+oApL3SrTFzmy3f2eOIQ3fbbGfZ+P48DjkeyAbRFCIg==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.4.2.tgz", + "integrity": "sha512-MgdXr9QJ2sNk0fUshQ7hk4Ec9IkbPWR6alrmDByIOEU9bThx0j4OxU9uTLBy8r5uZsSL6nNtRyCvSP8YSKaQHQ==", "dev": true, "dependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "7.1.0", - "@storybook/manager": "7.1.0", - "@storybook/node-logger": "7.1.0", + "@storybook/core-common": "7.4.2", + "@storybook/manager": "7.4.2", + "@storybook/node-logger": "7.4.2", "@types/ejs": "^3.1.1", "@types/find-cache-dir": "^3.2.1", "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", @@ -6529,20 +8442,20 @@ } }, "node_modules/@storybook/builder-vite": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.1.0.tgz", - "integrity": "sha512-4fYsapT5q6op63fBZ4mkZAzA8srObmQqUnydVW4M5v0UCoqKBdZtRMkibLJ2M9FoLJZxDnDO1HydaV7nPwN+zg==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.4.2.tgz", + "integrity": "sha512-FAAq0lSCUoD+oP+aCIEuLdDr4DEgMn7RDuJrgRoFcDa3y4wWeMxsxTchCaz0Zfz7vwELwegL7KDQl2XT1uLBzQ==", "dev": true, "dependencies": { - "@storybook/channels": "7.1.0", - "@storybook/client-logger": "7.1.0", - "@storybook/core-common": "7.1.0", - "@storybook/csf-plugin": "7.1.0", + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-common": "7.4.2", + "@storybook/csf-plugin": "7.4.2", "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.1.0", - "@storybook/preview": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/node-logger": "7.4.2", + "@storybook/preview": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/types": "7.4.2", "@types/find-cache-dir": "^3.2.1", "browser-assert": "^1.2.1", "es-module-lexer": "^0.9.3", @@ -6576,10 +8489,96 @@ } } }, + "node_modules/@storybook/builder-vite/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/builder-vite/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/builder-vite/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/builder-vite/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/builder-vite/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/builder-vite/node_modules/magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", + "version": "0.30.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", + "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -6622,21 +8621,23 @@ } }, "node_modules/@storybook/cli": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.1.0.tgz", - "integrity": "sha512-HYHPQJ59fcHlW3tljuxtL/zN/+iJHWvS0XC9vIk/s+SzY4foy0T+OId8tmUgU0w93UznkoX6f/3y47rZ2d3ozQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.4.2.tgz", + "integrity": "sha512-WleObtC7OU2lT+pI2vTdXZPFMKDGbg3bkUJ+PG8+yqGg53ea5ZkwKWg9qHpXuiMkYDztqhbA8kYrny1GqFuVdg==", "dev": true, "dependencies": { - "@babel/core": "^7.22.0", - "@babel/preset-env": "^7.22.0", + "@babel/core": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "@babel/types": "^7.22.5", "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.1.0", - "@storybook/core-common": "7.1.0", - "@storybook/core-server": "7.1.0", - "@storybook/csf-tools": "7.1.0", - "@storybook/node-logger": "7.1.0", - "@storybook/telemetry": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/codemod": "7.4.2", + "@storybook/core-common": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/core-server": "7.4.2", + "@storybook/csf-tools": "7.4.2", + "@storybook/node-logger": "7.4.2", + "@storybook/telemetry": "7.4.2", + "@storybook/types": "7.4.2", "@types/semver": "^7.3.4", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", @@ -6661,7 +8662,7 @@ "puppeteer-core": "^2.1.1", "read-pkg-up": "^7.0.1", "semver": "^7.3.7", - "simple-update-notifier": "^1.0.0", + "simple-update-notifier": "^2.0.0", "strip-json-comments": "^3.0.1", "tempy": "^1.0.1", "ts-dedent": "^2.0.0", @@ -6676,6 +8677,66 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/cli/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/cli/node_modules/commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", @@ -6776,18 +8837,18 @@ } }, "node_modules/@storybook/codemod": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.1.0.tgz", - "integrity": "sha512-ZDoJo1hqHbqR1arPwmm5n2qxROfTiigYDBpQCAEjVehFgT1eF1qAjiEjG/MBD0cpgj2pJ1GZTEIs52DU8sm3OQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.4.2.tgz", + "integrity": "sha512-wU+SLHG/PpLptI0aWEhPxwFPcX7uYe+Id21DKNPg/HvYaLG3N+/DPDef+lm3Vaov9w4OD74iuQ3knT67SSkvmw==", "dev": true, "dependencies": { - "@babel/core": "^7.22.0", - "@babel/preset-env": "^7.22.0", - "@babel/types": "^7.22.0", + "@babel/core": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "@babel/types": "^7.22.5", "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.1.0", - "@storybook/node-logger": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/csf-tools": "7.4.2", + "@storybook/node-logger": "7.4.2", + "@storybook/types": "7.4.2", "@types/cross-spawn": "^6.0.2", "cross-spawn": "^7.0.3", "globby": "^11.0.2", @@ -6801,17 +8862,79 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/codemod/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/codemod/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/components": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.1.0.tgz", - "integrity": "sha512-o8Z5L7cxxNCUhbEA+vGwoVrZ0vWhuZJb/AUc+347RIlH1QZF4Cu6fmgA49pKBsrJWPbtOmlLCbN/9LshszH0Zw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.4.2.tgz", + "integrity": "sha512-ecbDzSUd74vf6IwHsbQr+9mVRxKWLmwd9zJ8RHMcR8UejTRAAR/eVvYoCG331TQ8TrhTmHTy5xCVv47pm6ORkQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.1.0", + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.2", "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/theming": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/theming": "7.4.2", + "@storybook/types": "7.4.2", "memoizerific": "^1.11.3", "use-resize-observer": "^9.1.0", "util-deprecate": "^1.0.2" @@ -6825,14 +8948,160 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@storybook/components/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/components/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/components/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/components/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/core-client": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.1.0.tgz", - "integrity": "sha512-lFgrez7OPr5Eol6/+dSHtPOgGg7WmE+qIMpMt9MHUhawjuX4UqWcs8unhjG+I30nBcC4J9Lxygf5yqZLm7Wt0A==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.4.2.tgz", + "integrity": "sha512-2K4g8ZaqBUv6oC+1/Bd6XSQ/F7hNyy8OLqnnxjoYsjUQc8DaN5wUckEEgT9WSvLQg88B/FYFtNAX5m17aySWrg==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.1.0", - "@storybook/preview-api": "7.1.0" + "@storybook/client-logger": "7.4.2", + "@storybook/preview-api": "7.4.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-client/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/core-client/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-client/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-client/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/core-client/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { "type": "opencollective", @@ -6840,13 +9109,14 @@ } }, "node_modules/@storybook/core-common": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.1.0.tgz", - "integrity": "sha512-6jrL1RUA/Vgy+zXzeno12k6CKFIqRh3I5W7XgN2nNZJc98PRl2etDdhFL3LkBn8lWddDeKpnmlI4SWjb2HYtcA==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.4.2.tgz", + "integrity": "sha512-Qj9S97TYO+jSNdC2+LrMFtZRvTnELeFnRtn/MDWhkM6mpZgRglxlZuXi5enJjqTh0dISAUxPpTtXNAJDfX99JA==", "dev": true, "dependencies": { - "@storybook/node-logger": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/core-events": "7.4.2", + "@storybook/node-logger": "7.4.2", + "@storybook/types": "7.4.2", "@types/find-cache-dir": "^3.2.1", "@types/node": "^16.0.0", "@types/node-fetch": "^2.6.4", @@ -6873,6 +9143,66 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/core-common/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/core-common/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-common/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-common/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/core-common/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -6958,26 +9288,26 @@ } }, "node_modules/@storybook/core-server": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.1.0.tgz", - "integrity": "sha512-CELvm5RAAvBtXVnxLpF9n6VD4HXsf+f/5KKcojMVq5zh0WSeF4lOokPAXYqmflcToVP1SNWBKtQgVPaMI6y1Nw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.4.2.tgz", + "integrity": "sha512-4aaFQTjb8jsbzJeCs+VTo3gdyK3r3VhQN2sxn6k/lcKjQFeO84+iqGgGmb+oWUVz2TJL+JrNh7SUXkVsMZBXVQ==", "dev": true, "dependencies": { "@aw-web-design/x-default-browser": "1.4.126", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.1.0", - "@storybook/channels": "7.1.0", - "@storybook/core-common": "7.1.0", - "@storybook/core-events": "7.1.0", + "@storybook/builder-manager": "7.4.2", + "@storybook/channels": "7.4.2", + "@storybook/core-common": "7.4.2", + "@storybook/core-events": "7.4.2", "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.1.0", + "@storybook/csf-tools": "7.4.2", "@storybook/docs-mdx": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "7.1.0", - "@storybook/node-logger": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/telemetry": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/manager": "7.4.2", + "@storybook/node-logger": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/telemetry": "7.4.2", + "@storybook/types": "7.4.2", "@types/detect-port": "^1.3.0", "@types/node": "^16.0.0", "@types/pretty-hrtime": "^1.0.0", @@ -6998,7 +9328,7 @@ "read-pkg-up": "^7.0.1", "semver": "^7.3.7", "serve-favicon": "^2.5.0", - "telejson": "^7.0.3", + "telejson": "^7.2.0", "tiny-invariant": "^1.3.1", "ts-dedent": "^2.0.0", "util": "^0.12.4", @@ -7011,6 +9341,92 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/core-server/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/core-server/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/core-server/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/core-server/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -7054,12 +9470,12 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.1.0.tgz", - "integrity": "sha512-CXr+Erj/rIrDzrVDrF9sSpvkptNaWNjJed/nP1bRV/tuEDDVaTY5CR+T8fPoTLd1qkNNE5RkmiPXhJlNk+4njA==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.4.2.tgz", + "integrity": "sha512-b0yQ8oXEH0s3SGgjhOVrbjkc3C8IYGyTSnDtPwx/Dgmru/rC6LT7ZOdBegmGqBN1+6Ho0+AxFrmAmuuYK8p2rA==", "dev": true, "dependencies": { - "@storybook/csf-tools": "7.1.0", + "@storybook/csf-tools": "7.4.2", "unplugin": "^1.3.1" }, "funding": { @@ -7068,17 +9484,17 @@ } }, "node_modules/@storybook/csf-tools": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.1.0.tgz", - "integrity": "sha512-KC2H3IU302juWxChevEbzvr7axBrf0SQI7DQg116KwxChmMvUrO1Z50pnT7i+s9rnYN461OYNj5A7gCoc6cOCQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.4.2.tgz", + "integrity": "sha512-5AvF2YRcYHIqQqskb3R8JvsmSWnNwkP0CGmP8Zq7zIfK/C+npKb/onv5YQlbSgh+2UrVxVdIDLc9AepBeXC3uQ==", "dev": true, "dependencies": { - "@babel/generator": "^7.22.0", - "@babel/parser": "^7.22.0", - "@babel/traverse": "^7.22.0", - "@babel/types": "^7.22.0", + "@babel/generator": "^7.22.9", + "@babel/parser": "^7.22.7", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", "@storybook/csf": "^0.1.0", - "@storybook/types": "7.1.0", + "@storybook/types": "7.4.2", "fs-extra": "^11.1.0", "recast": "^0.23.1", "ts-dedent": "^2.0.0" @@ -7088,6 +9504,66 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/csf-tools/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/csf-tools/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf-tools/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf-tools/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/docs-mdx": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz", @@ -7095,14 +9571,14 @@ "dev": true }, "node_modules/@storybook/docs-tools": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.1.0.tgz", - "integrity": "sha512-tXZiN+6fJCZHXR3Sg+Qek066Ed8W8qvqmrdihgudkktCkxMT0kywb06p+u8YXEFxbYP0X7L+2mZpGZnLX+bWUw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.4.2.tgz", + "integrity": "sha512-MXW+xaxah+C+aqJ5178oOILqX7dCSwJMKJefIJHHwr9w6UuGRaiPG1NDYK/0N0IEv9H8pNnXPnw3R8S6x7COhQ==", "dev": true, "dependencies": { - "@storybook/core-common": "7.1.0", - "@storybook/preview-api": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/core-common": "7.4.2", + "@storybook/preview-api": "7.4.2", + "@storybook/types": "7.4.2", "@types/doctrine": "^0.0.3", "doctrine": "^3.0.0", "lodash": "^4.17.21" @@ -7112,22 +9588,194 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/docs-tools/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/docs-tools/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/docs-tools/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/docs-tools/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/docs-tools/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/global": { "version": "5.0.0", "dev": true, "license": "MIT" }, "node_modules/@storybook/instrumenter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.1.0.tgz", - "integrity": "sha512-vsJzxGo6IN0iS0Ro/8b2qA0x+uRLZ5JIhoN+n9fwTkHDxil/u5t7HPuNMXKkgXFKQYxVX9VlehQEu2DRz3mORQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.4.2.tgz", + "integrity": "sha512-g0tYjfv8q6RLl7PK3cyZGcdhad+4BspT1TXHl5Z4DFSo+bqFyHkP6X9tXzrpfQk+3abNrh5EjPaeec4+YHAOEw==", "dev": true, "dependencies": { - "@storybook/channels": "7.1.0", - "@storybook/client-logger": "7.1.0", - "@storybook/core-events": "7.1.0", + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.1.0" + "@storybook/preview-api": "7.4.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/instrumenter/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/instrumenter/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/instrumenter/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/instrumenter/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/instrumenter/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { "type": "opencollective", @@ -7135,9 +9783,9 @@ } }, "node_modules/@storybook/manager": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.1.0.tgz", - "integrity": "sha512-YOuP7YICIcLVWC4QjpFK/AK5MXVzoAodneMmVFZ0+6qXxdaxHyz/hiu34s//lG/KAQZLz2m4z0GjwtJQafey+Q==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.4.2.tgz", + "integrity": "sha512-MtjmbAaf4hUObAa2ETQkm0+SzESoPeNm+TyzwZU5qq3Ouj4IOj2Ugd8EJPO3isdHxYt26A255tW/G9mb9v20fQ==", "dev": true, "funding": { "type": "opencollective", @@ -7145,25 +9793,25 @@ } }, "node_modules/@storybook/manager-api": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.1.0.tgz", - "integrity": "sha512-a4UtzWcN/a12Kr4Z5B0KO05t3w3BtXapLRUERxiwB769ab/XJ6MmIyFY7mybKty3RZhmBWaO/oSfgrOwCeP/Gw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.4.2.tgz", + "integrity": "sha512-gKPG0At9AGhF32iwjiba+ILqswc3ZFj9ZIu5HjGEmaoiOfqI6TayuHoptup0QxkI/Hx8f9mNkHCwR9COrmb69w==", "dev": true, "dependencies": { - "@storybook/channels": "7.1.0", - "@storybook/client-logger": "7.1.0", - "@storybook/core-events": "7.1.0", + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/router": "7.1.0", - "@storybook/theming": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/router": "7.4.2", + "@storybook/theming": "7.4.2", + "@storybook/types": "7.4.2", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", "semver": "^7.3.7", "store2": "^2.14.2", - "telejson": "^7.0.3", + "telejson": "^7.2.0", "ts-dedent": "^2.0.0" }, "funding": { @@ -7175,6 +9823,66 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@storybook/manager-api/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@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/manager-api/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/manager-api/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/manager-api/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/manager-api/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -7215,9 +9923,9 @@ "dev": true }, "node_modules/@storybook/node-logger": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.1.0.tgz", - "integrity": "sha512-Mw5kfcqfW1YI4pqW4+Y/SgnjitEMoqVZdTBQxxA9lS6YOlkQqwmtIFu7or4W/ZCFaPX9dwgd171o870vsA2DlA==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.4.2.tgz", + "integrity": "sha512-iSBjhnMpWY9Hs5KGnf/xfHjGtGl740LUg4Gce874DuL773Mdc4hdppSKr4X/Pp1/AD67mNuifSXYx3V7d6XzTQ==", "dev": true, "funding": { "type": "opencollective", @@ -7225,9 +9933,9 @@ } }, "node_modules/@storybook/postinstall": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.1.0.tgz", - "integrity": "sha512-TsPCqe/2s1chhZoU2eOvjXFteZ00ALVKsTP03FMDOAVc1EkH3dIMAQE1j3ZCt0RnDW1lWfN+QMxgqrgQ/f3mMw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.4.2.tgz", + "integrity": "sha512-L9r14KqS87HPyXw0S3pK2X29ckel/4sdBSmy9nVF8n/ADafKE0pSLKB935VL0+88eMx06aT32SMcQoqjubGKWw==", "dev": true, "funding": { "type": "opencollective", @@ -7235,9 +9943,9 @@ } }, "node_modules/@storybook/preview": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.1.0.tgz", - "integrity": "sha512-Jw5VhtxL45aw4DBGwFmGoRcqUxSaWc/OexvF8LnCZct8MIL2FKdzMwjQZfqD0GN52KqRo7yMU5V43bZcXKqP6w==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.4.2.tgz", + "integrity": "sha512-T7rAV6qQ7tBeSvgi0RuA5EU8tm1OMhU8PcCqosWGaLhMCR0VMzw1/WGKuR11g1XmzvaAm2xGgMp82nqi4G0i7A==", "dev": true, "funding": { "type": "opencollective", @@ -7272,31 +9980,31 @@ } }, "node_modules/@storybook/react": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.1.0.tgz", - "integrity": "sha512-yTxuc9RucWTfFxU2emoO0/KPwUkRvEUE6jUrnCDaYR6lsq9RhiZjs072t8sCyUM+9KPwQQrt96cNmKyYN7Yg5w==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.4.2.tgz", + "integrity": "sha512-8bAnSOpDTiE1c9pSkIKRipvqbuZP6Hu1CYaG1RXWF8AIBsjiV9+SsR919Flj1UiCmcw4BLO/ZIvIDGny4ktHhA==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.1.0", - "@storybook/core-client": "7.1.0", - "@storybook/docs-tools": "7.1.0", + "@storybook/client-logger": "7.4.2", + "@storybook/core-client": "7.4.2", + "@storybook/docs-tools": "7.4.2", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.1.0", - "@storybook/react-dom-shim": "7.1.0", - "@storybook/types": "7.1.0", + "@storybook/preview-api": "7.4.2", + "@storybook/react-dom-shim": "7.4.2", + "@storybook/types": "7.4.2", "@types/escodegen": "^0.0.6", "@types/estree": "^0.0.51", "@types/node": "^16.0.0", "acorn": "^7.4.1", "acorn-jsx": "^5.3.1", "acorn-walk": "^7.2.0", - "escodegen": "^2.0.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": "^3.11.0", + "type-fest": "~2.19", "util-deprecate": "^1.0.2" }, "engines": { @@ -7318,9 +10026,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.1.0.tgz", - "integrity": "sha512-KPHbvwVu8iA0G8FkCbxuRwDGJPquiONgtYJn6ChHyL/ZjC/9+sUaUWEThbsFEnqdRzXKLgwHqZjF1UieT+TW6Q==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.4.2.tgz", + "integrity": "sha512-9Ae2As3Hf//mdFEAv58VgDbi9R5JRGne8Ai6Vspc5FZMCJIjr5kullckBi3n9uKRg2L8V7wjDRK8Cql2tEr0Yg==", "dev": true, "funding": { "type": "opencollective", @@ -7332,15 +10040,15 @@ } }, "node_modules/@storybook/react-vite": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-7.1.0.tgz", - "integrity": "sha512-lMgUDcBpW2BE4PqPt+FmOnv6ocIBkBxo//n3g+CFidrF40ERmxtFa7gZdEvnPjAS6Jms8162mIWb6uZuh2fAqw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-7.4.2.tgz", + "integrity": "sha512-DIfInR1VOinI+qjrMLcVdelFTfDppZXhjbrNpXt209ZY6nPGHjvr+4FpgKh+y/ClUBmOqkMsR7/kj4rMzGL5yw==", "dev": true, "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "0.2.1", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "7.1.0", - "@storybook/react": "7.1.0", + "@storybook/builder-vite": "7.4.2", + "@storybook/react": "7.4.2", "@vitejs/plugin-react": "^3.0.1", "ast-types": "^0.14.2", "magic-string": "^0.30.0", @@ -7371,25 +10079,99 @@ "node": ">=12" } }, - "node_modules/@storybook/react/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "node_modules/@storybook/react/node_modules/@storybook/channels": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.2.tgz", + "integrity": "sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==", "dev": true, - "engines": { - "node": ">=14.16" + "dependencies": { + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/react/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/react/node_modules/@storybook/core-events": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.2.tgz", + "integrity": "sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/react/node_modules/@storybook/preview-api": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.2.tgz", + "integrity": "sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@storybook/client-logger": "7.4.2", + "@storybook/core-events": "7.4.2", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.2", + "@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/node_modules/@storybook/types": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.2.tgz", + "integrity": "sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.4.2", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, "node_modules/@storybook/router": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.1.0.tgz", - "integrity": "sha512-zZUFV84bIjhKADrV7ZzHPOBtxumeonUU1Nbq7X+k6AWsurpUAdlpQrM+H+37eWIeFONX8Rfc0EUTrx+WUAq1hA==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.4.2.tgz", + "integrity": "sha512-TFpMrmliklWNSrF84kGnh3WcLZciqIvaAjhxahqD+kx070KLqjxrsiny7UC6PUUYZdjLkbR9m8n3SFdXAVKgLw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.1.0", + "@storybook/client-logger": "7.4.2", "memoizerific": "^1.11.3", "qs": "^6.10.0" }, @@ -7402,15 +10184,28 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@storybook/router/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/telemetry": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.1.0.tgz", - "integrity": "sha512-Vy4MvaBzD1pu+eRLHUswd3buFYzr5eUjgpFWwXF6vNGN9WHuceVr/430sFwWRzhrqKnbu4tY8CwekqKeE1uaSg==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.4.2.tgz", + "integrity": "sha512-ZAh1Bjk9JVpL5j0Aj3PHr3XEDZcOrFeugVyRuuul2gAyu6SbpPhl8Dd2Wr9YJS0ZDWs3u0CgKRCeFPPAi3QosA==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.1.0", - "@storybook/core-common": "7.1.0", - "@storybook/csf-tools": "7.1.0", + "@storybook/client-logger": "7.4.2", + "@storybook/core-common": "7.4.2", + "@storybook/csf-tools": "7.4.2", "chalk": "^4.1.0", "detect-package-manager": "^2.0.1", "fetch-retry": "^5.0.2", @@ -7422,10 +10217,23 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/telemetry/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/test-runner": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@storybook/test-runner/-/test-runner-0.11.0.tgz", - "integrity": "sha512-US2MFJWU4903yvTv1pQRkaBiBWsQ0Bp62TcJy6Th0tWoLrLHzW5oXiLYugZIZk9Ed//UM+avhq07P5JHsO14eg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@storybook/test-runner/-/test-runner-0.13.0.tgz", + "integrity": "sha512-QIbfgia/iBy7PeUIwCYtPcyeZCHd21ebaPoMNIsRfwUW+VC12J4iG8cGDfOE7MGbMVz1Uu0elAEBB8NGP/YBtQ==", "dev": true, "dependencies": { "@babel/core": "^7.22.5", @@ -7535,13 +10343,13 @@ } }, "node_modules/@storybook/testing-library": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.2.0.tgz", - "integrity": "sha512-Ff6jNnrsosmDshgCf0Eb5Cz7IA34p/1Ps5N3Kp3598kfXpBSccSkQQvVFUXC3kIHw/isIXWPqntZuKqnWUz7Gw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.2.1.tgz", + "integrity": "sha512-AdbfLCm1C2nEFrhA3ScdicfW6Fjcorehr6RlGwECMiWwaXisnP971Wd4psqtWxlAqQo4tYBZ0f6rJ3J78JLtsg==", "dev": true, "dependencies": { "@testing-library/dom": "^9.0.0", - "@testing-library/user-event": "^14.0.0", + "@testing-library/user-event": "~14.4.0", "ts-dedent": "^2.2.0" } }, @@ -7578,13 +10386,13 @@ } }, "node_modules/@storybook/theming": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.1.0.tgz", - "integrity": "sha512-bO56c7NFlK7sfjsCbV56VLU59HHvQTW/HVu8RxUuoY+0WutyGAq6uZCmtQnMMGORzxh0p/uU2dSBVYEfW8QoTQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.2.tgz", + "integrity": "sha512-wVmxZHVCqDoZgUOXTS4HRV4UClLtCydRNOEuUZ7X08QIPSA1FVL3gEpTQJfgCsyBX/cwSSofAMUbzAGEVNo+9g==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.1.0", + "@storybook/client-logger": "7.4.2", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -7597,6 +10405,19 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@storybook/theming/node_modules/@storybook/client-logger": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.2.tgz", + "integrity": "sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/types": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.1.0.tgz", @@ -8179,9 +11000,9 @@ } }, "node_modules/@types/cross-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.2.tgz", - "integrity": "sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.3.tgz", + "integrity": "sha512-BDAkU7WHHRHnvBf5z89lcvACsvkz/n7Tv+HyD/uW76O29HoH1Tk/W6iQrepaZVbisvlEek4ygwT8IW7ow9XLAA==", "dev": true, "dependencies": { "@types/node": "*" @@ -8346,9 +11167,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.14.196", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.196.tgz", - "integrity": "sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==", + "version": "4.14.198", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", + "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", "dev": true }, "node_modules/@types/mdast": { @@ -8359,9 +11180,9 @@ } }, "node_modules/@types/mdx": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.5.tgz", - "integrity": "sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.7.tgz", + "integrity": "sha512-BG4tyr+4amr3WsSEmHn/fXPqaCba/AYZ7dsaQTiavihQunHSIxk+uAtqsjvicNpyHN6cm+B9RVrUOtW9VzIKHw==", "dev": true }, "node_modules/@types/mime": { @@ -10052,6 +12873,18 @@ "dev": 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.1.3", "license": "Apache-2.0", @@ -13102,12 +15935,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.0.tgz", - "integrity": "sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==", + "version": "3.32.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", + "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", "dev": true, "dependencies": { - "browserslist": "^4.21.9" + "browserslist": "^4.21.10" }, "funding": { "type": "opencollective", @@ -13850,6 +16683,12 @@ "node": ">=8" } }, + "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", @@ -14596,14 +17435,14 @@ } }, "node_modules/escodegen": { - "version": "2.0.0", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "esutils": "^2.0.2" }, "bin": { "escodegen": "bin/escodegen.js", @@ -14855,9 +17694,9 @@ } }, "node_modules/eslint-plugin-storybook": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.12.tgz", - "integrity": "sha512-XbIvrq6hNVG6rpdBr+eBw63QhOMLpZneQVSooEDow8aQCWGCk/5vqtap1yxpVydNfSxi3S/3mBBRLQqKUqQRww==", + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.13.tgz", + "integrity": "sha512-smd+CS0WH1jBqUEJ3znGS7DU4ayBE9z6lkQAK2yrSUv1+rq8BT/tiI5C/rKE7rmiqiAfojtNYZRhzo5HrulccQ==", "dev": true, "dependencies": { "@storybook/csf": "^0.0.1", @@ -15916,9 +18755,9 @@ "license": "ISC" }, "node_modules/flow-parser": { - "version": "0.214.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.214.0.tgz", - "integrity": "sha512-RW1Dh6BuT14DA7+gtNRKzgzvG3GTPdrceHCi4ddZ9VFGQ9HtO5L8wzxMGsor7XtInIrbWZZCSak0oxnBF7tApw==", + "version": "0.216.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.216.1.tgz", + "integrity": "sha512-wstw46/C/8bRv/8RySCl15lK376j8DHxm41xFjD9eVL+jSS1UmVpbdLdA0LzGuS2v5uGgQiBLEj6mgSJQwW+MA==", "dev": true, "engines": { "node": ">=0.4.0" @@ -16309,6 +19148,15 @@ "node": ">=0.10.0" } }, + "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.0.3", "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.0.3.tgz", @@ -16511,9 +19359,9 @@ } }, "node_modules/giget/node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "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", @@ -19564,20 +22412,20 @@ } }, "node_modules/jest-haste-map": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", - "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", + "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.1", + "@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.4.3", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -19589,13 +22437,13 @@ } }, "node_modules/jest-haste-map/node_modules/jest-worker": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", - "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.6.2", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -19790,17 +22638,41 @@ "license": "MIT" }, "node_modules/jest-mock": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", - "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", + "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": "^29.6.1", + "@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": "*", - "jest-util": "^29.6.2" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-playwright-preset": { @@ -19864,9 +22736,10 @@ } }, "node_modules/jest-regex-util": { - "version": "29.4.3", + "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, - "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -20729,10 +23602,11 @@ "license": "ISC" }, "node_modules/jest-util": { - "version": "29.6.2", - "license": "MIT", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -24293,9 +27167,9 @@ } }, "node_modules/node-fetch-native": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.2.0.tgz", - "integrity": "sha512-5IAMBTl9p6PaAjYCnMv5FmqIF6GcZnawAVnzaCG0rX2aYZJ4CxEkZNtVPuTRug7fL7wyM5BQYTlAzcyMPi6oTQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.4.0.tgz", + "integrity": "sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA==", "dev": true }, "node_modules/node-fetch/node_modules/tr46": { @@ -25592,52 +28466,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { - "version": "0.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/optionator/node_modules/levn": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/optionator/node_modules/prelude-ls": { - "version": "1.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/optionator/node_modules/type-check": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/ora": { "version": "5.4.1", "dev": true, @@ -27692,6 +30520,53 @@ "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.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", + "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "dev": true, + "dependencies": { + "react-style-singleton": "^2.2.1", + "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-resize-detector": { "version": "7.1.2", "dev": true, @@ -27732,6 +30607,29 @@ "react-dom": ">=16.8" } }, + "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-topbar-progress-indicator": { "version": "4.1.1", "license": "MIT", @@ -28142,9 +31040,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -29284,26 +32182,50 @@ } }, "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, "dependencies": { - "semver": "~7.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8.10.0" + "node": ">=10" + } + }, + "node_modules/simple-update-notifier/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, + "node_modules/simple-update-notifier/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/sinon": { "version": "15.0.3", "dev": true, @@ -30046,12 +32968,12 @@ "dev": true }, "node_modules/storybook": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.1.0.tgz", - "integrity": "sha512-3fnLTeHzK+6cbo3sfanAvVFpi4pauvEaODbHo8I8ui/RNxENQSYHxgCK6ULWets9Zay0cXxCwe3n3G/zeVoCNg==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.4.2.tgz", + "integrity": "sha512-UuYmdxEWEQAepfjgQFbbHTq47Xxpw16naAvJ9n/nsjMnOhYupm1ZIdWYaeNjz4LOfz+1WzgU7us0IvaBrxzl4g==", "dev": true, "dependencies": { - "@storybook/cli": "7.1.0" + "@storybook/cli": "7.4.2" }, "bin": { "sb": "index.js", @@ -31868,9 +34790,10 @@ "license": "ISC" }, "node_modules/telejson": { - "version": "7.1.0", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", + "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", "dev": true, - "license": "MIT", "dependencies": { "memoizerific": "^1.11.3" } @@ -32900,12 +35823,12 @@ } }, "node_modules/unplugin": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.4.0.tgz", - "integrity": "sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.0.tgz", + "integrity": "sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==", "dev": true, "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.10.0", "chokidar": "^3.5.3", "webpack-sources": "^3.2.3", "webpack-virtual-modules": "^0.5.0" @@ -33052,6 +35975,27 @@ "node": ">=0.10.0" } }, + "node_modules/use-callback-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", + "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", + "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-resize-observer": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", @@ -33065,6 +36009,28 @@ "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/user-home": { "version": "2.0.0", "dev": true, @@ -34550,6 +37516,215 @@ "vite-plugin-libcss": "1.0.6" } }, + "packages/design-system/node_modules/@storybook/core-client": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.1.0.tgz", + "integrity": "sha512-lFgrez7OPr5Eol6/+dSHtPOgGg7WmE+qIMpMt9MHUhawjuX4UqWcs8unhjG+I30nBcC4J9Lxygf5yqZLm7Wt0A==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.1.0", + "@storybook/preview-api": "7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "packages/design-system/node_modules/@storybook/core-common": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.1.0.tgz", + "integrity": "sha512-6jrL1RUA/Vgy+zXzeno12k6CKFIqRh3I5W7XgN2nNZJc98PRl2etDdhFL3LkBn8lWddDeKpnmlI4SWjb2HYtcA==", + "dev": true, + "dependencies": { + "@storybook/node-logger": "7.1.0", + "@storybook/types": "7.1.0", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.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.4.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" + } + }, + "packages/design-system/node_modules/@storybook/core-common/node_modules/@types/node": { + "version": "16.18.52", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.52.tgz", + "integrity": "sha512-sm2aph6cRSsTMFYFgI+RpPLunXO9ClJkpizUVdT7KmGeyfQ14xnjTMT/f3MHcfKqevXqGT6BgVFzW8wcEoDUtA==", + "dev": true + }, + "packages/design-system/node_modules/@storybook/core-common/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" + } + }, + "packages/design-system/node_modules/@storybook/docs-tools": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.1.0.tgz", + "integrity": "sha512-tXZiN+6fJCZHXR3Sg+Qek066Ed8W8qvqmrdihgudkktCkxMT0kywb06p+u8YXEFxbYP0X7L+2mZpGZnLX+bWUw==", + "dev": true, + "dependencies": { + "@storybook/core-common": "7.1.0", + "@storybook/preview-api": "7.1.0", + "@storybook/types": "7.1.0", + "@types/doctrine": "^0.0.3", + "doctrine": "^3.0.0", + "lodash": "^4.17.21" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "packages/design-system/node_modules/@storybook/node-logger": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.1.0.tgz", + "integrity": "sha512-Mw5kfcqfW1YI4pqW4+Y/SgnjitEMoqVZdTBQxxA9lS6YOlkQqwmtIFu7or4W/ZCFaPX9dwgd171o870vsA2DlA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "packages/design-system/node_modules/@storybook/react": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.1.0.tgz", + "integrity": "sha512-yTxuc9RucWTfFxU2emoO0/KPwUkRvEUE6jUrnCDaYR6lsq9RhiZjs072t8sCyUM+9KPwQQrt96cNmKyYN7Yg5w==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.1.0", + "@storybook/core-client": "7.1.0", + "@storybook/docs-tools": "7.1.0", + "@storybook/global": "^5.0.0", + "@storybook/preview-api": "7.1.0", + "@storybook/react-dom-shim": "7.1.0", + "@storybook/types": "7.1.0", + "@types/escodegen": "^0.0.6", + "@types/estree": "^0.0.51", + "@types/node": "^16.0.0", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "escodegen": "^2.0.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": "^3.11.0", + "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 + } + } + }, + "packages/design-system/node_modules/@storybook/react-dom-shim": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.1.0.tgz", + "integrity": "sha512-KPHbvwVu8iA0G8FkCbxuRwDGJPquiONgtYJn6ChHyL/ZjC/9+sUaUWEThbsFEnqdRzXKLgwHqZjF1UieT+TW6Q==", + "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" + } + }, + "packages/design-system/node_modules/@storybook/react/node_modules/@types/node": { + "version": "16.18.52", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.52.tgz", + "integrity": "sha512-sm2aph6cRSsTMFYFgI+RpPLunXO9ClJkpizUVdT7KmGeyfQ14xnjTMT/f3MHcfKqevXqGT6BgVFzW8wcEoDUtA==", + "dev": true + }, + "packages/design-system/node_modules/@storybook/test-runner": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@storybook/test-runner/-/test-runner-0.11.0.tgz", + "integrity": "sha512-US2MFJWU4903yvTv1pQRkaBiBWsQ0Bp62TcJy6Th0tWoLrLHzW5oXiLYugZIZk9Ed//UM+avhq07P5JHsO14eg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5", + "@storybook/core-common": "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0", + "@storybook/csf": "^0.1.1", + "@storybook/csf-tools": "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0", + "@storybook/preview-api": "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0", + "@swc/core": "^1.3.18", + "@swc/jest": "^0.2.23", + "can-bind-to-host": "^1.1.1", + "commander": "^9.0.0", + "expect-playwright": "^0.8.0", + "glob": "^10.2.2", + "jest": "^28.0.0", + "jest-circus": "^28.0.0", + "jest-environment-node": "^28.0.0", + "jest-junit": "^14.0.0", + "jest-playwright-preset": "^2.0.0", + "jest-runner": "^28.0.0", + "jest-serializer-html": "^7.1.0", + "jest-watch-typeahead": "^2.0.0", + "node-fetch": "^2", + "playwright": "^1.14.0", + "read-pkg-up": "^7.0.1", + "tempy": "^1.0.1", + "ts-dedent": "^2.0.0" + }, + "bin": { + "test-storybook": "dist/test-storybook.js" + } + }, + "packages/design-system/node_modules/@storybook/test-runner/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, "packages/design-system/node_modules/@types/node": { "version": "14.18.54", "dev": true, @@ -34565,6 +37740,15 @@ "dev": true, "license": "MIT" }, + "packages/design-system/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "packages/design-system/node_modules/commander": { "version": "5.1.0", "dev": true, @@ -34629,6 +37813,22 @@ "node": "^14.0.0 || ^16.0.0 || >=18.0.0" } }, + "packages/design-system/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "packages/design-system/node_modules/fs-extra": { "version": "9.1.0", "dev": true, @@ -34643,6 +37843,28 @@ "node": ">=10" } }, + "packages/design-system/node_modules/glob": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "packages/design-system/node_modules/lru-cache": { "version": "6.0.0", "dev": true, @@ -34654,6 +37876,21 @@ "node": ">=10" } }, + "packages/design-system/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "packages/design-system/node_modules/proxy-from-env": { "version": "1.0.0", "dev": true, @@ -34673,6 +37910,18 @@ "node": ">=10" } }, + "packages/design-system/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, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "packages/design-system/node_modules/supports-color": { "version": "8.1.1", "dev": true, @@ -34687,6 +37936,18 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "packages/design-system/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/design-system/node_modules/yallist": { "version": "4.0.0", "dev": true, diff --git a/package.json b/package.json index 315837fe7..fca69e954 100644 --- a/package.json +++ b/package.json @@ -104,15 +104,15 @@ "@auto-it/released": "10.46.0", "@csstools/postcss-cascade-layers": "3.0.1", "@cypress/code-coverage": "3.10.7", - "@storybook/addon-a11y": "7.1.0", - "@storybook/addon-essentials": "7.1.0", - "@storybook/addon-interactions": "7.1.0", - "@storybook/addon-links": "7.1.0", - "@storybook/blocks": "7.1.0", - "@storybook/react": "7.1.0", - "@storybook/react-vite": "7.1.0", - "@storybook/test-runner": "0.11.0", - "@storybook/testing-library": "0.2.0", + "@storybook/addon-a11y": "7.4.2", + "@storybook/addon-essentials": "7.4.2", + "@storybook/addon-interactions": "7.4.2", + "@storybook/addon-links": "7.4.2", + "@storybook/blocks": "7.4.2", + "@storybook/react": "7.4.2", + "@storybook/react-vite": "7.4.2", + "@storybook/test-runner": "0.13.0", + "@storybook/testing-library": "0.2.1", "@testing-library/cypress": "9.0.0", "@types/chai-as-promised": "7.1.5", "@types/node-sass": "4.11.3", @@ -136,7 +136,7 @@ "eslint-plugin-prettier": "4.2.1", "eslint-plugin-react": "7.32.2", "eslint-plugin-simple-import-sort": "10.0.0", - "eslint-plugin-storybook": "0.6.12", + "eslint-plugin-storybook": "0.6.13", "eslint-plugin-unused-imports": "2.0.0", "jsdom": "21.1.0", "lcov-result-merger": "3.3.0", @@ -149,7 +149,7 @@ "react-dom": "18.2.0", "react-loading-skeleton": "3.3.1", "sinon": "15.0.3", - "storybook": "7.1.0", + "storybook": "7.4.2", "stylelint": "15.7.0", "stylelint-config-rational-order": "0.1.2", "stylelint-config-standard": "30.0.1", From ec7e914c53ae34917d1c1b2f21d936af595dae0e Mon Sep 17 00:00:00 2001 From: MellyGray Date: Wed, 20 Sep 2023 13:47:22 +0200 Subject: [PATCH 37/37] fix(Checksum): add spacing to the button --- .../copy-to-clipboard-button/CopyToClipboard.module.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboard.module.scss b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboard.module.scss index 7b074a5ac..621a9a2aa 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboard.module.scss +++ b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboard.module.scss @@ -1,7 +1,8 @@ @import "node_modules/@iqss/dataverse-design-system/src/lib/assets/styles/design-tokens/colors.module"; .container { - cursor: pointer; + margin: 0 3px; + cursor: pointer } %icon {