From ef8be16fdb19c5a53bcb1b3e51507b8c9a2ce99f Mon Sep 17 00:00:00 2001 From: "Daniel A.C. Martin" Date: Wed, 26 Apr 2023 17:55:24 +0100 Subject: [PATCH 1/2] Add ErrorSummary component --- .../src/common/pages/components.tsx | 1 + components/error-summary/.gitignore | 5 + components/error-summary/README.md | 77 ++++++ .../error-summary/assets/ErrorSummary.scss | 2 + components/error-summary/jest.config.js | 15 ++ components/error-summary/package.json | 58 +++++ .../spec/ErrorSummary.stories.mdx | 232 ++++++++++++++++++ components/error-summary/spec/ErrorSummary.ts | 30 +++ components/error-summary/src/ErrorSummary.tsx | 39 +++ components/error-summary/tsconfig.json | 1 + packages/components/package.json | 1 + packages/components/src/components/index.ts | 1 + 12 files changed, 462 insertions(+) create mode 100644 components/error-summary/.gitignore create mode 100644 components/error-summary/README.md create mode 100644 components/error-summary/assets/ErrorSummary.scss create mode 100644 components/error-summary/jest.config.js create mode 100644 components/error-summary/package.json create mode 100644 components/error-summary/spec/ErrorSummary.stories.mdx create mode 100644 components/error-summary/spec/ErrorSummary.ts create mode 100644 components/error-summary/src/ErrorSummary.tsx create mode 120000 components/error-summary/tsconfig.json diff --git a/apps/govuk-docs/src/common/pages/components.tsx b/apps/govuk-docs/src/common/pages/components.tsx index 93a654c6e..fc5fc7086 100644 --- a/apps/govuk-docs/src/common/pages/components.tsx +++ b/apps/govuk-docs/src/common/pages/components.tsx @@ -16,6 +16,7 @@ const mainStories = [ require('../../../../../components/date-input/spec/DateInput.stories.mdx'), require('../../../../../components/details/spec/Details.stories.mdx'), require('../../../../../components/error-message/spec/ErrorMessage.stories.mdx'), + require('../../../../../components/error-summary/spec/ErrorSummary.stories.mdx'), require('../../../../../components/fieldset/spec/FieldSet.stories.mdx'), require('../../../../../components/file-upload/spec/FileUpload.stories.mdx'), require('../../../../../components/footer/spec/Footer.stories.mdx'), diff --git a/components/error-summary/.gitignore b/components/error-summary/.gitignore new file mode 100644 index 000000000..aa49ac15e --- /dev/null +++ b/components/error-summary/.gitignore @@ -0,0 +1,5 @@ +dist/ +node_modules/ +package-lock.json +pnpm-lock.yaml +tsconfig.tsbuildinfo diff --git a/components/error-summary/README.md b/components/error-summary/README.md new file mode 100644 index 000000000..64bdcc45f --- /dev/null +++ b/components/error-summary/README.md @@ -0,0 +1,77 @@ +NotGovUK - Error Summary +======================== + +A component to summarise any errors a user has made. + + +Using this package +------------------ + +First install the package into your project: + +```shell +npm install -S @not-govuk/error-summary +``` + +Then use it in your code as follows: + +```js +import React, { createElement as h } from 'react'; +import ErrorSummary from '@not-govuk/error-summary'; + +export const MyComponent = props => ( + +); + +export default MyComponent; +``` + + +Working on this package +----------------------- + +Before working on this package you must install its dependencies using +the following command: + +```shell +pnpm install +``` + + +### Testing + +Run the unit tests. + +```shell +npm test +``` + + +### Building + +Build the package by compiling the TypeScript source code. + +```shell +npm run build +``` + + +### Clean-up + +Remove any previously built files. + +```shell +npm run clean +``` diff --git a/components/error-summary/assets/ErrorSummary.scss b/components/error-summary/assets/ErrorSummary.scss new file mode 100644 index 000000000..9eb46ebad --- /dev/null +++ b/components/error-summary/assets/ErrorSummary.scss @@ -0,0 +1,2 @@ +@import "@not-govuk/sass-base"; +@import "govuk-frontend/govuk/components/error-summary"; diff --git a/components/error-summary/jest.config.js b/components/error-summary/jest.config.js new file mode 100644 index 000000000..116a1cfbe --- /dev/null +++ b/components/error-summary/jest.config.js @@ -0,0 +1,15 @@ +'use strict'; + +const baseConfig = require('../../jest.config.base'); + +const config = { + ...baseConfig, + collectCoverageFrom: [ + '/src/**.{ts,tsx}', + ], + testMatch: [ + '/spec/**.{ts,tsx}' + ] +}; + +module.exports = config; diff --git a/components/error-summary/package.json b/components/error-summary/package.json new file mode 100644 index 000000000..6a1a0031c --- /dev/null +++ b/components/error-summary/package.json @@ -0,0 +1,58 @@ +{ + "name": "@not-govuk/error-summary", + "version": "0.7.2", + "description": "A component to summarise any errors a user has made.", + "main": "src/ErrorSummary.tsx", + "sass": "assets/ErrorSummary.scss", + "publishConfig": { + "main": "dist/ErrorSummary.js", + "typings": "dist/ErrorSummary.d.ts" + }, + "files": [ + "/assets", + "/dist" + ], + "scripts": { + "test": "NODE_OPTIONS=--experimental-vm-modules jest", + "prepublishOnly": "npm run clean && npm run build", + "build": "tsc", + "clean": "rm -rf dist tsconfig.tsbuildinfo" + }, + "author": "Daniel A.C. Martin (http://daniel-martin.co.uk/)", + "license": "MIT", + "keywords": [ + "react-components" + ], + "dependencies": { + "@not-govuk/anchor-list": "workspace:^0.7.2", + "@not-govuk/component-helpers": "workspace:^0.7.2", + "@not-govuk/sass-base": "workspace:^0.7.2", + "govuk-frontend": "4.6.0" + }, + "peerDependencies": { + "@not-govuk/docs-components": "^0.7.2", + "@storybook/addon-docs": "^6.4.0", + "react": "^16.9.55" + }, + "peerDependenciesMeta": { + "@not-govuk/docs-components": { + "optional": true + }, + "@storybook/addon-docs": { + "optional": true + } + }, + "devDependencies": { + "@mdx-js/react": "1.6.22", + "@not-govuk/checkboxes": "workspace:^0.7.2", + "@not-govuk/component-test-helpers": "workspace:^0.7.2", + "@not-govuk/date-input": "workspace:^0.7.2", + "@not-govuk/page": "workspace:^0.7.2", + "@not-govuk/text-input": "workspace:^0.7.2", + "@types/react": "16.14.32", + "jest": "29.2.2", + "jest-environment-jsdom": "29.2.2", + "ts-jest": "29.0.3", + "typescript": "4.8.4" + } +} diff --git a/components/error-summary/spec/ErrorSummary.stories.mdx b/components/error-summary/spec/ErrorSummary.stories.mdx new file mode 100644 index 000000000..bce18c066 --- /dev/null +++ b/components/error-summary/spec/ErrorSummary.stories.mdx @@ -0,0 +1,232 @@ +import { Meta, Preview, Props, Story } from '@storybook/addon-docs'; +import { Checkboxes } from '@not-govuk/checkboxes'; +import { DateInput } from '@not-govuk/date-input'; +import { GovUKPage } from '@not-govuk/page'; +import { TextInput } from '@not-govuk/text-input'; +import { ErrorSummary } from '../src/ErrorSummary'; +import readMe from '../README.md'; + + + +# Error summary + +Use this component at the top of a page to summarise any errors a user has made. + +When a user makes an error, you must show both an error summary and an [error message] next to each answer that contains an error. + + + + + + + + + +## When to use this component + +Always show an error summary when there is a validation error, even if there’s only one. + +## How it works + +You must: + +- move keyboard focus to the error summary +- include the heading ‘There is a problem’ +- link to each of the answers that have validation errors +- make sure the error messages in the error summary are worded the same as those which appear next to the inputs with errors + +As well as showing an error summary, follow the [validation pattern] - for example, by adding ‘Error: ’ to the beginning of the page `` so screen readers read it out as soon as possible. + +And make your [error messages] clear and concise. + +<Preview> + <Story name="Standard"> + <ErrorSummary + title="There is a problem" + items={[ + { + text: "The date your passport was issued must be in the past", + href: "#" + }, + { + text: "Enter a postcode, like AA1 1AA", + href: "#" + } + ]} + /> + </Story> +</Preview> + +### Linking from the error summary to each answer + +You must link the errors in the error summary to the answer they relate to. + +For questions that require a user to answer using a single field, like a file upload, select, textarea, text input or character count, link to the field. + +<Preview> + <Story name="Linking"> + <Fragment> + <ErrorSummary + title="There is a problem" + items={[ + { + text: "Enter your full name", + href: "#full-name-input" + } + ]} + /> + <h1>Your details</h1> + <TextInput + id="full-name" + label="Full name" + name="name" + autoComplete="name" + error="Enter your full name" + /> + </Fragment> + </Story> +</Preview> + +When a user has to enter their answer into multiple fields, such as the day, month and year fields in the date input component, link to the first field that contains an error. + +If you do not know which field contains an error, link to the first field. + +<Preview> + <Story name="LinkingToDateInput"> + <Fragment> + <ErrorSummary + title="There is a problem" + items={[ + { + text: "The date your passport was issued must include a year", + href: "#passport-issued-year" + } + ]} + /> + <DateInput + id="passport-issued" + label={ + <h1 className="govuk-heading-l"> + When was your passport issued? + </h1> + } + name="passport-issued" + hint="For example, 12 11 2007" + error={{ + year: "The date your passport was issued must include a year", + }} + /> + </Fragment> + </Story> +</Preview> + +For questions that require a user to select one or more options from a list using radios or checkboxes, link to the first radio or checkbox. + +<Preview> + <Story name="LinkingToCheckboxes"> + <Fragment> + <ErrorSummary + title="There is a problem" + items={[ + { + text: "Select if you are British, Irish or a citizen of a different country", + href: "#nationality-checkbox-0" + } + ]} + /> + <Checkboxes + label={ + <h1 className="govuk-heading-l"> + What is your nationality? + </h1> + } + name="nationality" + options={[ + { + value: "british", + label: "British", + hint: "including English, Scottish, Welsh and Northern Irish", + }, + { + value: "irish", + label: "Irish", + }, + { + value: "other", + label: "Citizen of another country", + }, + ]} + hint="Select all that apply." + error="Select if you are British, Irish or a citizen of a different country" + /> + </Fragment> + </Story> +</Preview> + + +### Where to put the error summary + +Put the error summary at the top of the `main` container. If your page includes breadcrumbs or a back link, place it below these, but above the `<h1>`. + +<Preview> + <Story name="WhereToPut"> + <GovUKPage + maxContentsWidth="690" + serviceName="Service name" + serviceHref="#" + backHref="#" + > + <div className="govuk-grid-row"> + <div className="govuk-grid-column-two-thirds"> + <ErrorSummary + title="There is a problem" + items={[ + { + text: "The date your passport was issued must include a year", + href: "#passport-issued-year" + } + ]} + /> + <DateInput + id="passport-issued" + label={ + <h1 className="govuk-heading-l"> + When was your passport issued? + </h1> + } + name="passport-issued" + hint="For example, 12 11 2007" + error={{ + year: "The date your passport was issued must include a year", + }} + /> + </div> + </div> + </GovUKPage> + </Story> +</Preview> + +[error message]: https://design-system.service.gov.uk/components/error-message/ +[validation pattern]: https://design-system.service.gov.uk/patterns/validation/ +[error messages]: https://design-system.service.gov.uk/components/error-message/#be-clear-and-concise diff --git a/components/error-summary/spec/ErrorSummary.ts b/components/error-summary/spec/ErrorSummary.ts new file mode 100644 index 000000000..ff2693d81 --- /dev/null +++ b/components/error-summary/spec/ErrorSummary.ts @@ -0,0 +1,30 @@ +import { createElement as h } from 'react'; +import { render, screen } from '@not-govuk/component-test-helpers'; +import ErrorSummary from '../src/ErrorSummary'; + +describe('ErrorSummary', () => { + describe('when given valid props', () => { + beforeEach(async () => { + render(h(ErrorSummary, { + title: 'There were errors', + items: [ + { text: 'One', href: '/one' }, + { text: 'Two', href: '/two' }, + { text: 'Three', href: '/three' } + ] + })); + }); + + it('renders an alert', async () => expect(screen.getByRole('alert')).toBeInTheDocument()); + it('has a heading with the text provided', async () => expect(screen.getByRole('heading')).toHaveTextContent('There were errors')); + it('renders a list', async () => expect(screen.getByRole('list')).toBeInTheDocument()); + it('contains the same number of items as were given to it', async () => expect(screen.getAllByRole('listitem')).toHaveLength(3)); + it('represents all the items as links', async () => expect(screen.getAllByRole('link')).toHaveLength(3)); + it('contains the text of the 1st item', async () => expect(screen.getAllByRole('link')[0]).toHaveTextContent('One')); + it('contains the text of the 2nd item', async () => expect(screen.getAllByRole('link')[1]).toHaveTextContent('Two')); + it('contains the text of the 3rd item', async () => expect(screen.getAllByRole('link')[2]).toHaveTextContent('Three')); + it('links to the href of the 1st item', async () => expect(screen.getAllByRole('link')[0]).toHaveAttribute('href', '/one')); + it('links to the href of the 2nd item', async () => expect(screen.getAllByRole('link')[1]).toHaveAttribute('href', '/two')); + it('links to the href of the 3rd item', async () => expect(screen.getAllByRole('link')[2]).toHaveAttribute('href', '/three')); + }); +}); diff --git a/components/error-summary/src/ErrorSummary.tsx b/components/error-summary/src/ErrorSummary.tsx new file mode 100644 index 000000000..9e8541ff7 --- /dev/null +++ b/components/error-summary/src/ErrorSummary.tsx @@ -0,0 +1,39 @@ +import { FC, ReactNode, createElement as h } from 'react'; +import { Anchor, AnchorList, AnchorListProps } from '@not-govuk/anchor-list'; +import { StandardProps, classBuilder } from '@not-govuk/component-helpers'; + +import '../assets/ErrorSummary.scss'; + +export type Error = Anchor; + +export type ErrorSummaryProps = StandardProps & Pick<AnchorListProps, 'items'> & { + /** The heading of the error summary block. */ + title?: ReactNode[] | string +}; + +export const ErrorSummary: FC<ErrorSummaryProps> = ({ + children, + classBlock, + classModifiers, + className, + items, + title = 'There is a problem ', + ...attrs +}) => { + const classes = classBuilder('govuk-error-summary', classBlock, classModifiers, className); + + return ( + <div {...attrs} className={classes()} data-module="govuk-error-summary"> + <div role="alert"> + <h2 className={classes('title')}>{title}</h2> + <div className={classes('body')}> + <AnchorList as="ul" items={items} classBlock={classes('list')} className="govuk-list" /> + </div> + </div> + </div> + ); +}; + +ErrorSummary.displayName = 'ErrorSummary'; + +export default ErrorSummary; diff --git a/components/error-summary/tsconfig.json b/components/error-summary/tsconfig.json new file mode 120000 index 000000000..f23066030 --- /dev/null +++ b/components/error-summary/tsconfig.json @@ -0,0 +1 @@ +../../lib/plop-pack/skel/component/tsconfig.json \ No newline at end of file diff --git a/packages/components/package.json b/packages/components/package.json index f30bbd2fb..ac1cc5cb4 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -41,6 +41,7 @@ "@not-govuk/date-input": "workspace:^0.7.2", "@not-govuk/details": "workspace:^0.7.2", "@not-govuk/error-message": "workspace:^0.7.2", + "@not-govuk/error-summary": "workspace:^0.7.2", "@not-govuk/fieldset": "workspace:^0.7.2", "@not-govuk/file-upload": "workspace:^0.7.2", "@not-govuk/footer": "workspace:^0.7.2", diff --git a/packages/components/src/components/index.ts b/packages/components/src/components/index.ts index 2e219cc6b..e030c6b49 100644 --- a/packages/components/src/components/index.ts +++ b/packages/components/src/components/index.ts @@ -9,6 +9,7 @@ export { default as CookieBanner } from '@not-govuk/cookie-banner'; export { default as DateInput } from '@not-govuk/date-input'; export { default as Details } from '@not-govuk/details'; export { default as ErrorMessage } from '@not-govuk/error-message'; +export { default as ErrorSummary } from '@not-govuk/error-summary'; export { default as Fieldset } from '@not-govuk/fieldset'; export { default as FileUpload } from '@not-govuk/file-upload'; export { default as FormField } from '@not-govuk/form-field'; From 268e677c0855aee1ea272cecba232aa94d46e29f Mon Sep 17 00:00:00 2001 From: "Daniel A.C. Martin" <github@daniel-martin.co.uk> Date: Wed, 26 Apr 2023 17:55:54 +0100 Subject: [PATCH 2/2] Update package lock-file --- pnpm-lock.yaml | 316 +++++++++++++++++++++++++++++-------------------- 1 file changed, 187 insertions(+), 129 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1f24b6bfb..c3853db9c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -634,6 +634,41 @@ importers: ts-jest: 29.1.0_79f08d1891adcc432593f59ab088dd16 typescript: 4.9.5 + components/error-summary: + specifiers: + '@mdx-js/react': 1.6.22 + '@not-govuk/anchor-list': workspace:^0.7.2 + '@not-govuk/checkboxes': workspace:^0.7.2 + '@not-govuk/component-helpers': workspace:^0.7.2 + '@not-govuk/component-test-helpers': workspace:^0.7.2 + '@not-govuk/date-input': workspace:^0.7.2 + '@not-govuk/page': workspace:^0.7.2 + '@not-govuk/sass-base': workspace:^0.7.2 + '@not-govuk/text-input': workspace:^0.7.2 + '@types/react': 16.14.32 + govuk-frontend: 4.6.0 + jest: 29.2.2 + jest-environment-jsdom: 29.2.2 + ts-jest: 29.0.3 + typescript: 4.8.4 + dependencies: + '@not-govuk/anchor-list': link:../../components-internal/anchor-list + '@not-govuk/component-helpers': link:../../lib/component-helpers + '@not-govuk/sass-base': link:../../lib-govuk/sass-base + govuk-frontend: 4.6.0 + devDependencies: + '@mdx-js/react': 1.6.22_react@16.14.0 + '@not-govuk/checkboxes': link:../checkboxes + '@not-govuk/component-test-helpers': link:../../lib/component-test-helpers + '@not-govuk/date-input': link:../date-input + '@not-govuk/page': link:../page + '@not-govuk/text-input': link:../text-input + '@types/react': 16.14.32 + jest: 29.2.2 + jest-environment-jsdom: 29.2.2 + ts-jest: 29.0.3_c4bd34c05ca076d4606ff12f2ff2df81 + typescript: 4.8.4 + components/fieldset: specifiers: '@mdx-js/react': 1.6.22 @@ -1904,6 +1939,7 @@ importers: '@not-govuk/date-input': workspace:^0.7.2 '@not-govuk/details': workspace:^0.7.2 '@not-govuk/error-message': workspace:^0.7.2 + '@not-govuk/error-summary': workspace:^0.7.2 '@not-govuk/fieldset': workspace:^0.7.2 '@not-govuk/file-upload': workspace:^0.7.2 '@not-govuk/footer': workspace:^0.7.2 @@ -1950,6 +1986,7 @@ importers: '@not-govuk/date-input': link:../../components/date-input '@not-govuk/details': link:../../components/details '@not-govuk/error-message': link:../../components/error-message + '@not-govuk/error-summary': link:../../components/error-summary '@not-govuk/fieldset': link:../../components/fieldset '@not-govuk/file-upload': link:../../components/file-upload '@not-govuk/footer': link:../../components/footer @@ -2162,6 +2199,7 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: true /@babel/generator/7.21.1: resolution: {integrity: sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==} @@ -2246,6 +2284,7 @@ packages: browserslist: 4.21.5 lru-cache: 5.1.1 semver: 6.3.0 + dev: true /@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.21.0: resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} @@ -4116,6 +4155,7 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 + dev: true /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.0: resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} @@ -4630,6 +4670,7 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: true /@babel/types/7.21.2: resolution: {integrity: sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==} @@ -4692,13 +4733,11 @@ packages: uuid: 8.3.2 dev: true - /@cypress/xvfb/1.2.4_supports-color@8.1.1: + /@cypress/xvfb/1.2.4: resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} dependencies: - debug: 3.2.7_supports-color@8.1.1 + debug: 3.2.7 lodash.once: 4.1.1 - transitivePeerDependencies: - - supports-color dev: true /@discoveryjs/json-ext/0.5.7: @@ -5225,7 +5264,7 @@ packages: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.5 + '@types/node': 18.16.1 '@types/yargs': 17.0.22 chalk: 4.1.2 @@ -5913,7 +5952,7 @@ packages: css-loader: 3.6.0_webpack@4.46.0 file-loader: 6.2.0_webpack@4.46.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 4.1.6_typescript@4.9.5+webpack@4.46.0 + fork-ts-checker-webpack-plugin: 4.1.6 glob: 7.2.3 glob-promise: 3.4.0_glob@7.2.3 global: 4.4.0 @@ -5938,7 +5977,6 @@ packages: webpack-hot-middleware: 2.25.3 webpack-virtual-modules: 0.2.2 transitivePeerDependencies: - - bluebird - eslint - supports-color - vue-template-compiler @@ -6005,6 +6043,7 @@ packages: - vue-template-compiler - webpack-cli - webpack-command + dev: true /@storybook/channel-postmessage/6.5.16: resolution: {integrity: sha512-fZZSN29dsUArWOx7e7lTdMA9+7zijVwCwbvi2Fo4fqhRLh1DsTb/VXfz1FKMCWAjNlcX7QQvV25tnxbqsD6lyw==} @@ -6120,6 +6159,7 @@ packages: unfetch: 4.2.0 util-deprecate: 1.0.2 webpack: 5.76.3_webpack-cli@5.0.1 + dev: true /@storybook/core-client/6.5.16_7bd3d49abef497962458a82cdb89d447: resolution: {integrity: sha512-14IRaDrVtKrQ+gNWC0wPwkCNfkZOKghYV/swCUnQX3rP99defsZK8Hc7xHIYoAiOP5+sc3sweRAxgmFiJeQ1Ig==} @@ -6336,7 +6376,6 @@ packages: x-default-browser: 0.4.0 transitivePeerDependencies: - '@storybook/mdx2-csf' - - bluebird - bufferutil - encoding - eslint @@ -6373,7 +6412,6 @@ packages: webpack: 5.75.0_webpack-cli@5.0.1 transitivePeerDependencies: - '@storybook/mdx2-csf' - - bluebird - bufferutil - encoding - eslint @@ -6477,7 +6515,6 @@ packages: webpack-dev-middleware: 3.7.3_webpack@4.46.0 webpack-virtual-modules: 0.2.2 transitivePeerDependencies: - - bluebird - encoding - eslint - supports-color @@ -6540,6 +6577,7 @@ packages: - vue-template-compiler - webpack-cli - webpack-command + dev: true /@storybook/mdx1-csf/0.0.1_@babel+core@7.21.0: resolution: {integrity: sha512-4biZIWWzoWlCarMZmTpqcJNgo/RBesYZwGFbQeXiGYsswuvfWARZnW9RE9aUEMZ4XPn7B1N3EKkWcdcWe/K2tg==} @@ -6728,7 +6766,6 @@ packages: - '@storybook/mdx2-csf' - '@swc/core' - '@types/webpack' - - bluebird - bufferutil - encoding - esbuild @@ -7219,6 +7256,7 @@ packages: /@types/html-minifier-terser/6.1.0: resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} + dev: true /@types/http-cache-semantics/4.0.1: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} @@ -7342,12 +7380,8 @@ packages: /@types/node/18.15.11: resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} - /@types/node/18.15.5: - resolution: {integrity: sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==} - /@types/node/18.16.1: resolution: {integrity: sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA==} - dev: true /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -7419,6 +7453,14 @@ packages: '@types/react': 17.0.53 dev: true + /@types/react/16.14.32: + resolution: {integrity: sha512-hvEy4vGVADbtj/U6+CA5SRC5QFIjdxD7JslAie8EuAYZwhYY9bgforpXNyF1VFzhnkEOesDy1278t1wdjN74cw==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 + dev: true + /@types/react/16.14.38: resolution: {integrity: sha512-PbEjuhwkdH6IB5Sak6BFAqpVMHY/wJxa0EG3bKkr0vWA2hSDIq3iEMhHyqjXrDFMqRzkiQkdyNXOnoELrh/9aQ==} dependencies: @@ -7814,6 +7856,7 @@ packages: dependencies: webpack: 5.76.3_webpack-cli@5.0.1 webpack-cli: 5.0.1_webpack@5.76.3 + dev: true /@webpack-cli/info/2.0.1_webpack-cli@5.0.1+webpack@5.76.3: resolution: {integrity: sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA==} @@ -7824,6 +7867,7 @@ packages: dependencies: webpack: 5.76.3_webpack-cli@5.0.1 webpack-cli: 5.0.1_webpack@5.76.3 + dev: true /@webpack-cli/serve/2.0.1_webpack-cli@5.0.1+webpack@5.76.3: resolution: {integrity: sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==} @@ -7838,6 +7882,7 @@ packages: dependencies: webpack: 5.76.3_webpack-cli@5.0.1 webpack-cli: 5.0.1_webpack@5.76.3 + dev: true /@wry/context/0.6.1: resolution: {integrity: sha512-LOmVnY1iTU2D8tv4Xf6MVMZZ+juIJ87Kt/plMijjN20NMAXGmH4u8bS1t0uT74cZ5gwpocYueV58YwyI8y+GKw==} @@ -8218,8 +8263,6 @@ packages: dependencies: micromatch: 3.1.10 normalize-path: 2.1.1 - transitivePeerDependencies: - - supports-color /anymatch/3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -8594,8 +8637,6 @@ packages: babel-template: 6.26.0 babel-traverse: 6.26.0 babel-types: 6.26.0 - transitivePeerDependencies: - - supports-color dev: true /babel-helper-get-function-arity/6.24.1: @@ -8668,6 +8709,7 @@ packages: make-dir: 3.1.0 schema-utils: 2.7.1 webpack: 5.76.3_webpack-cli@5.0.1 + dev: true /babel-loader/9.1.2_e5daca5881a874082e64b27e8bc53b4e: resolution: {integrity: sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==} @@ -8738,6 +8780,7 @@ packages: /babel-plugin-named-exports-order/0.0.2: resolution: {integrity: sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==} + dev: true /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.0: resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} @@ -8839,8 +8882,6 @@ packages: babel-plugin-syntax-class-properties: 6.13.0 babel-runtime: 6.26.0 babel-template: 6.26.0 - transitivePeerDependencies: - - supports-color dev: true /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.0: @@ -8920,8 +8961,6 @@ packages: babel-types: 6.26.0 babylon: 6.18.0 lodash: 4.17.21 - transitivePeerDependencies: - - supports-color dev: true /babel-traverse/6.26.0: @@ -8936,8 +8975,6 @@ packages: globals: 9.18.0 invariant: 2.2.4 lodash: 4.17.21 - transitivePeerDependencies: - - supports-color dev: true /babel-types/6.26.0: @@ -9074,8 +9111,6 @@ packages: raw-body: 2.5.1 type-is: 1.6.18 unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color /boolbase/1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -9124,8 +9159,6 @@ packages: snapdragon-node: 2.1.1 split-string: 3.1.0 to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -9138,6 +9171,7 @@ packages: /browser-assert/1.2.1: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} + dev: true /browserify-aes/1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} @@ -9316,7 +9350,7 @@ packages: mississippi: 3.0.0 mkdirp: 0.5.6 move-concurrently: 1.0.1 - promise-inflight: 1.0.1_bluebird@3.7.2 + promise-inflight: 1.0.1 rimraf: 2.7.1 ssri: 6.0.2 unique-filename: 1.1.1 @@ -9344,8 +9378,6 @@ packages: ssri: 8.0.1 tar: 6.1.13 unique-filename: 1.1.1 - transitivePeerDependencies: - - bluebird /cache-base/1.0.1: resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} @@ -9558,8 +9590,6 @@ packages: upath: 1.2.0 optionalDependencies: fsevents: 1.2.13 - transitivePeerDependencies: - - supports-color optional: true /chokidar/3.5.3: @@ -9643,6 +9673,7 @@ packages: engines: {node: '>= 10.0'} dependencies: source-map: 0.6.1 + dev: true /clean-stack/2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} @@ -9812,9 +9843,11 @@ packages: /colorette/1.4.0: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + dev: true /colorette/2.0.19: resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + dev: true /combined-stream/1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} @@ -9849,6 +9882,7 @@ packages: /commander/8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} + dev: true /commander/9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} @@ -9895,8 +9929,6 @@ packages: on-headers: 1.0.2 safe-buffer: 5.1.2 vary: 1.1.2 - transitivePeerDependencies: - - supports-color /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -10041,8 +10073,6 @@ packages: p-all: 2.1.0 p-filter: 2.1.0 p-map: 3.0.0 - transitivePeerDependencies: - - supports-color /crc-32/1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} @@ -10159,6 +10189,7 @@ packages: schema-utils: 3.1.1 semver: 7.3.8 webpack: 5.76.3_webpack-cli@5.0.1 + dev: true /css-loader/6.7.3_webpack@5.76.3: resolution: {integrity: sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==} @@ -10256,7 +10287,7 @@ packages: requiresBuild: true dependencies: '@cypress/request': 2.88.11 - '@cypress/xvfb': 1.2.4_supports-color@8.1.1 + '@cypress/xvfb': 1.2.4 '@types/node': 14.18.36 '@types/sinonjs__fake-timers': 8.1.1 '@types/sizzle': 2.3.3 @@ -10327,35 +10358,13 @@ packages: /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true dependencies: ms: 2.0.0 /debug/3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - - /debug/3.2.7_supports-color@8.1.1: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true dependencies: ms: 2.1.3 - supports-color: 8.1.1 - dev: true /debug/4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -10874,6 +10883,7 @@ packages: resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} engines: {node: '>=4'} hasBin: true + dev: true /errno/0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} @@ -11275,8 +11285,6 @@ packages: regex-not: 1.0.2 snapdragon: 0.8.2 to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color /expand-tilde/2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} @@ -11341,8 +11349,6 @@ packages: type-is: 1.6.18 utils-merge: 1.0.1 vary: 1.1.2 - transitivePeerDependencies: - - supports-color /ext-list/2.2.2: resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} @@ -11401,8 +11407,6 @@ packages: regex-not: 1.0.2 snapdragon: 0.8.2 to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color /extract-zip/2.0.1_supports-color@8.1.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} @@ -11443,8 +11447,6 @@ packages: is-glob: 4.0.3 merge2: 1.4.1 micromatch: 3.1.10 - transitivePeerDependencies: - - supports-color /fast-glob/3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} @@ -11483,6 +11485,7 @@ packages: /fastest-levenshtein/1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} + dev: true /fastq/1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} @@ -11614,8 +11617,6 @@ packages: parseurl: 1.3.3 statuses: 2.0.1 unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color /find-cache-dir/2.1.0: resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} @@ -11769,19 +11770,9 @@ packages: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} dev: true - /fork-ts-checker-webpack-plugin/4.1.6_typescript@4.9.5+webpack@4.46.0: + /fork-ts-checker-webpack-plugin/4.1.6: resolution: {integrity: sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==} engines: {node: '>=6.11.5', yarn: '>=1.0.0'} - peerDependencies: - eslint: '>= 6' - typescript: '>= 2.7' - vue-template-compiler: '*' - webpack: '>= 4' - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true dependencies: '@babel/code-frame': 7.18.6 chalk: 2.4.2 @@ -11789,11 +11780,7 @@ packages: minimatch: 3.1.2 semver: 5.7.1 tapable: 1.1.3 - typescript: 4.9.5 - webpack: 4.46.0_webpack-cli@5.0.1 worker-rpc: 0.1.1 - transitivePeerDependencies: - - supports-color /fork-ts-checker-webpack-plugin/6.5.2_typescript@4.9.5+webpack@4.46.0: resolution: {integrity: sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==} @@ -11854,6 +11841,7 @@ packages: tapable: 1.1.3 typescript: 4.9.5 webpack: 5.76.3_webpack-cli@5.0.1 + dev: true /fork-ts-checker-webpack-plugin/8.0.0_typescript@4.9.5+webpack@5.76.3: resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} @@ -12302,8 +12290,6 @@ packages: ignore: 4.0.6 pify: 4.0.1 slash: 2.0.0 - transitivePeerDependencies: - - supports-color /gopd/1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} @@ -12381,6 +12367,7 @@ packages: /graphql/15.8.0: resolution: {integrity: sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==} engines: {node: '>= 10.x'} + dev: true /gzip-size/6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} @@ -12662,6 +12649,7 @@ packages: param-case: 3.0.4 relateurl: 0.2.7 terser: 5.16.5 + dev: true /html-minifier-terser/7.1.0: resolution: {integrity: sha512-BvPO2S7Ip0Q5qt+Y8j/27Vclj6uHC6av0TMoDn7/bJPhMWHI2UtR2e/zEgJn3/qYAmxumrGp9q4UHurL6mtW9Q==} @@ -12713,6 +12701,7 @@ packages: pretty-error: 4.0.0 tapable: 2.2.1 webpack: 5.76.3_webpack-cli@5.0.1 + dev: true /htmlparser2/6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} @@ -12898,6 +12887,7 @@ packages: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 + dev: true /imurmurhash/0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -12983,6 +12973,7 @@ packages: /interpret/3.1.1: resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} engines: {node: '>=10.13.0'} + dev: true /invariant/2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -13425,6 +13416,7 @@ packages: /isarray/0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: true /isarray/1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -13704,6 +13696,29 @@ packages: pretty-format: 29.5.0 dev: true + /jest-environment-jsdom/29.2.2: + resolution: {integrity: sha512-5mNtTcky1+RYv9kxkwMwt7fkzyX4EJUarV7iI+NQLigpV4Hz4sgfOdP4kOpCHXbkRWErV7tgXoXLm2CKtucr+A==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/types': 29.5.0 + '@types/jsdom': 20.0.1 + '@types/node': 18.16.1 + jest-mock: 29.5.0 + jest-util: 29.5.0 + jsdom: 20.0.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /jest-environment-jsdom/29.5.0: resolution: {integrity: sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13762,8 +13777,6 @@ packages: walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 - transitivePeerDependencies: - - supports-color dev: true /jest-haste-map/29.5.0: @@ -14085,6 +14098,26 @@ packages: supports-color: 8.1.1 dev: true + /jest/29.2.2: + resolution: {integrity: sha512-r+0zCN9kUqoON6IjDdjbrsWobXM/09Nd45kIPRD8kloaRh1z5ZCMdVsgLXGxmlL7UpAJsvCYOQNO+NjvG/gqiQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.5.0 + '@jest/types': 29.5.0 + import-local: 3.1.0 + jest-cli: 29.5.0 + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true + /jest/29.5.0: resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14777,6 +14810,7 @@ packages: engines: {node: '>=6'} dependencies: p-defer: 1.0.0 + dev: true /map-cache/0.2.2: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} @@ -14849,6 +14883,7 @@ packages: dependencies: map-age-cleaner: 0.1.3 mimic-fn: 3.1.0 + dev: true /memfs/3.4.13: resolution: {integrity: sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==} @@ -14937,8 +14972,6 @@ packages: regex-not: 1.0.2 snapdragon: 0.8.2 to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color /micromatch/4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} @@ -14987,6 +15020,7 @@ packages: /mimic-fn/3.1.0: resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} engines: {node: '>=8'} + dev: true /mimic-response/1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} @@ -15174,8 +15208,6 @@ packages: regex-not: 1.0.2 snapdragon: 0.8.2 to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color /native-promise-only/0.8.1: resolution: {integrity: sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==} @@ -15671,6 +15703,7 @@ packages: /p-defer/1.0.0: resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} engines: {node: '>=4'} + dev: true /p-event/4.2.0: resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} @@ -15865,6 +15898,7 @@ packages: /path-browserify/1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: true /path-case/3.0.4: resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} @@ -15936,6 +15970,7 @@ packages: resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==} dependencies: isarray: 0.0.1 + dev: true /path-type/1.1.0: resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==} @@ -16261,6 +16296,7 @@ packages: dependencies: lodash: 4.17.21 renderkid: 3.0.0 + dev: true /pretty-format/27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} @@ -16336,21 +16372,6 @@ packages: /promise-inflight/1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - - /promise-inflight/1.0.1_bluebird@3.7.2: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - dependencies: - bluebird: 3.7.2 /promise-queue/2.2.5: resolution: {integrity: sha512-p/iXrPSVfnqPft24ZdNNLECw/UrtLTpT3jpAAMzl/o5/rDsGCPo3/CQS2611flL6LkoEJ3oQZw7C8Q80ZISXRQ==} @@ -16601,6 +16622,7 @@ packages: prop-types: 15.8.1 react: 16.14.0 scheduler: 0.19.1 + dev: true /react-element-to-jsx-string/14.3.4_react-dom@16.14.0+react@16.14.0: resolution: {integrity: sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==} @@ -16674,6 +16696,7 @@ packages: react-router: 5.3.4_react@16.14.0 tiny-invariant: 1.3.1 tiny-warning: 1.0.3 + dev: true /react-router-hash-link/2.4.3_4b858a23c9b508019e053f75d81978cc: resolution: {integrity: sha512-NU7GWc265m92xh/aYD79Vr1W+zAIXDWp3L2YZOYP4rCqPnJ6LI6vh3+rKgkidtYijozHclaEQTAHaAaMWPVI4A==} @@ -16701,6 +16724,7 @@ packages: react-is: 16.13.1 tiny-invariant: 1.3.1 tiny-warning: 1.0.3 + dev: true /react-sizeme/3.0.2: resolution: {integrity: sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==} @@ -16731,6 +16755,7 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 prop-types: 15.8.1 + dev: true /read-pkg-up/1.0.1: resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==} @@ -16815,8 +16840,6 @@ packages: graceful-fs: 4.2.10 micromatch: 3.1.10 readable-stream: 2.3.8 - transitivePeerDependencies: - - supports-color optional: true /readdirp/3.6.0: @@ -17008,6 +17031,7 @@ packages: htmlparser2: 6.1.0 lodash: 4.17.21 strip-ansi: 6.0.1 + dev: true /repeat-element/1.1.4: resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} @@ -17050,6 +17074,7 @@ packages: engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 + dev: true /resolve-dir/1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} @@ -17294,8 +17319,6 @@ packages: micromatch: 3.1.10 minimist: 1.2.8 walker: 1.0.8 - transitivePeerDependencies: - - supports-color dev: true /sass-loader/13.2.0_sass@1.62.1+webpack@5.76.3: @@ -17349,6 +17372,7 @@ packages: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 + dev: true /schema-utils/1.0.0: resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} @@ -17434,8 +17458,6 @@ packages: on-finished: 2.4.1 range-parser: 1.2.1 statuses: 2.0.1 - transitivePeerDependencies: - - supports-color /sentence-case/3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} @@ -17477,8 +17499,6 @@ packages: escape-html: 1.0.3 parseurl: 1.3.3 send: 0.18.0 - transitivePeerDependencies: - - supports-color /serverless-http/3.1.1: resolution: {integrity: sha512-apCJb/xsB/E2IVT23bG9lBGoPv7kTgwhi6b/Reshc181vJv7Df4hCOj0WNQQRpPoKMEZAuGBEzhdIHUaL3pCLQ==} @@ -17719,8 +17739,6 @@ packages: source-map: 0.5.7 source-map-resolve: 0.5.3 use: 3.1.1 - transitivePeerDependencies: - - supports-color /snyk-config/5.1.0: resolution: {integrity: sha512-wqVMxUGqjjHX+MJrz0WHa/pJTDWU17aRv6cnI/6i7cq93J3TkkJZ8sjgvwCgP8cWX5wTHIlRuMV+IAd59K4X/g==} @@ -18225,6 +18243,7 @@ packages: loader-utils: 2.0.4 schema-utils: 3.1.1 webpack: 5.76.3_webpack-cli@5.0.1 + dev: true /style-to-object/0.3.0: resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} @@ -18394,8 +18413,6 @@ packages: terser: 5.16.5 webpack: 4.46.0_webpack-cli@5.0.1 webpack-sources: 1.4.3 - transitivePeerDependencies: - - bluebird /terser-webpack-plugin/5.3.6_webpack@5.75.0: resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} @@ -18442,6 +18459,7 @@ packages: serialize-javascript: 6.0.1 terser: 5.16.5 webpack: 5.76.3_webpack-cli@5.0.1 + dev: true /terser/4.8.1: resolution: {integrity: sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==} @@ -18671,6 +18689,41 @@ packages: tslib: 2.5.0 dev: true + /ts-jest/29.0.3_c4bd34c05ca076d4606ff12f2ff2df81: + resolution: {integrity: sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.21.4 + babel-jest: 29.5.0_@babel+core@7.21.4 + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 29.2.2 + jest-util: 29.5.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.3.8 + typescript: 4.8.4 + yargs-parser: 21.1.1 + dev: true + /ts-jest/29.1.0_79f08d1891adcc432593f59ab088dd16: resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -18798,10 +18851,17 @@ packages: /typedarray/0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + /typescript/4.8.4: + resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + /typescript/4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true + dev: true /uglify-js/3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} @@ -19207,8 +19267,6 @@ packages: requiresBuild: true dependencies: chokidar: 2.1.8 - transitivePeerDependencies: - - supports-color optional: true /watchpack/1.7.5: @@ -19219,8 +19277,6 @@ packages: optionalDependencies: chokidar: 3.5.3 watchpack-chokidar2: 2.0.1 - transitivePeerDependencies: - - supports-color /watchpack/2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} @@ -19302,6 +19358,7 @@ packages: rechoir: 0.8.0 webpack: 5.76.3_webpack-cli@5.0.1 webpack-merge: 5.8.0 + dev: true /webpack-dev-middleware/3.7.3_webpack@4.46.0: resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} @@ -19329,6 +19386,7 @@ packages: range-parser: 1.2.1 schema-utils: 3.1.1 webpack: 5.76.3_webpack-cli@5.0.1 + dev: true /webpack-dev-middleware/6.0.2_webpack@5.76.3: resolution: {integrity: sha512-iOddiJzPcQC6lwOIu60vscbGWth8PCRcWRCwoQcTQf9RMoOWBHg5EyzpGdtSmGMrSPd5vHEfFXmVErQEmkRngQ==} @@ -19386,6 +19444,7 @@ packages: dependencies: clone-deep: 4.0.1 wildcard: 2.0.0 + dev: true /webpack-node-externals/3.0.0: resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} @@ -19414,11 +19473,10 @@ packages: resolution: {integrity: sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==} dependencies: debug: 3.2.7 - transitivePeerDependencies: - - supports-color /webpack-virtual-modules/0.4.6: resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==} + dev: true /webpack/4.46.0_webpack-cli@5.0.1: resolution: {integrity: sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==} @@ -19457,8 +19515,6 @@ packages: watchpack: 1.7.5 webpack-cli: 5.0.1_webpack@5.76.3 webpack-sources: 1.4.3 - transitivePeerDependencies: - - supports-color /webpack/5.75.0_webpack-cli@5.0.1: resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} @@ -19539,6 +19595,7 @@ packages: - '@swc/core' - esbuild - uglify-js + dev: true /whatwg-encoding/2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} @@ -19621,6 +19678,7 @@ packages: /wildcard/2.0.0: resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} + dev: true /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}