From 52d9ca04dd2ecf9b0c492e4b541e787cf8fd9860 Mon Sep 17 00:00:00 2001 From: Andrew Holloway Date: Fri, 5 Jul 2024 13:10:38 -0500 Subject: [PATCH 01/13] feat(InputField): add show/hide button for password field type (#2006) - toggle button label and icon based on current state - implement show/hide button to appear after any inputWithin elements - add tests and snapshots --- .../InputField/InputField.stories.tsx | 40 ++++++- src/components/InputField/InputField.tsx | 21 +++- .../__snapshots__/InputField.test.tsx.snap | 113 ++++++++++++++++-- 3 files changed, 159 insertions(+), 15 deletions(-) diff --git a/src/components/InputField/InputField.stories.tsx b/src/components/InputField/InputField.stories.tsx index 7fe40f1d6..26184536d 100644 --- a/src/components/InputField/InputField.stories.tsx +++ b/src/components/InputField/InputField.stories.tsx @@ -1,4 +1,5 @@ import type { StoryObj, Meta } from '@storybook/react'; +import { userEvent, within } from '@storybook/testing-library'; import React from 'react'; import { InputField } from './InputField'; @@ -19,6 +20,26 @@ const meta: Meta = { args: { className: 'w-96', }, + argTypes: { + type: { + control: 'select', + options: [ + 'text', + 'password', + 'datetime', + 'datetime-local', + 'date', + 'month', + 'time', + 'week', + 'number', + 'email', + 'url', + 'search', + 'tel', + ], + }, + }, decorators: [(Story) =>
{Story()}
], }; @@ -147,12 +168,29 @@ export const NoVisibleLabel: Story = { }; /** - * Password fields show dots instead of characters, to help with security. + * Password fields show dots instead of characters, to help with security. They allow for show/hide of the field + * contents. */ export const Password: Story = { args: { label: 'Password', type: 'password', + defaultValue: 'secret123', + }, +}; + +/** + * Password fields show dots instead of characters, to help with security. They allow for show/hide of the field + * contents, and resetting. + */ +export const PasswordWithShownText: Story = { + args: { + ...Password.args, + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const showHideButton = await canvas.findByRole('button'); + await userEvent.click(showHideButton); }, }; diff --git a/src/components/InputField/InputField.tsx b/src/components/InputField/InputField.tsx index d63f1fcf3..40f8b1544 100644 --- a/src/components/InputField/InputField.tsx +++ b/src/components/InputField/InputField.tsx @@ -8,6 +8,7 @@ import type { ForwardedRefComponent, } from '../../util/utility-types'; import type { Status } from '../../util/variant-types'; +import Button from '../Button'; import FieldLabel from '../FieldLabel'; import FieldNote from '../FieldNote'; import Icon, { type IconName } from '../Icon'; @@ -180,6 +181,10 @@ export const InputField: InputFieldType = forwardRef( const shouldRenderOverline = !!(label || required); const [fieldText, setFieldText] = useState(other.defaultValue); + // Handling of behavior when field type is password. Show/hide button + const revealShowHideButton = type === 'password'; + const [isPasswordVisible, setIsPasswordVisible] = useState(false); + const overlineClassName = clsx( styles['input-field__overline'], !label && styles['input-field__overline--no-label'], @@ -292,12 +297,24 @@ export const InputField: InputFieldType = forwardRef( ref={ref} required={required} status={shouldRenderError ? 'critical' : status} - type={type} + type={isPasswordVisible ? 'text' : type} {...other} /> - {inputWithin && ( + {(inputWithin || type === 'password') && (
{inputWithin} + {revealShowHideButton && fieldText && ( +
)} {leadingIcon && ( diff --git a/src/components/InputField/__snapshots__/InputField.test.tsx.snap b/src/components/InputField/__snapshots__/InputField.test.tsx.snap index 6171cfe35..39cddb328 100644 --- a/src/components/InputField/__snapshots__/InputField.test.tsx.snap +++ b/src/components/InputField/__snapshots__/InputField.test.tsx.snap @@ -145,7 +145,7 @@ exports[` InputWithin story renders snapshot 1`] = ` > @@ -156,7 +156,7 @@ exports[` InputWithin story renders snapshot 1`] = `
Password story renders snapshot 1`] = ` class="input" id=":rm:" type="password" + value="secret123" + /> +
+ +
+
+ + +`; + +exports[` PasswordWithShownText story renders snapshot 1`] = ` +
+
+
+ +
+
+ +
+ +
@@ -458,7 +547,7 @@ exports[` ShowHint story renders snapshot 1`] = ` > @@ -474,7 +563,7 @@ exports[` ShowHint story renders snapshot 1`] = ` @@ -621,7 +710,7 @@ exports[` WithAMaxLength story renders snapshot 1`] = ` > @@ -644,7 +733,7 @@ exports[` WithAMaxLength story renders snapshot 1`] = ` WithARecommendedLength story renders snapshot 1`] = ` > @@ -693,7 +782,7 @@ exports[` WithARecommendedLength story renders snapshot 1`] = ` WithBothMaxAndRecommendedLength story renders snapshot 1 > @@ -739,10 +828,10 @@ exports[` WithBothMaxAndRecommendedLength story renders snapshot 1 class="input-field__body input-field--has-fieldNote" > WithBothMaxAndRecommendedLength story renders snapshot 1 >
Date: Mon, 8 Jul 2024 08:09:22 -0700 Subject: [PATCH 02/13] chore(deps): update all non-major dependencies (#2004) Co-authored-by: Renovate Bot --- package.json | 30 +- yarn.lock | 864 ++++++++++++++++++++++++++------------------------- 2 files changed, 460 insertions(+), 434 deletions(-) diff --git a/package.json b/package.json index 521f4811a..8c2a121e9 100644 --- a/package.json +++ b/package.json @@ -125,30 +125,30 @@ "@commitlint/cli": "^18.6.1", "@commitlint/config-conventional": "^18.6.3", "@geometricpanda/storybook-addon-badges": "^2.0.2", - "@omlet/cli": "^1.7.0", + "@omlet/cli": "^1.8.1", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-typescript": "^11.1.6", "@size-limit/file": "^8.2.6", - "@storybook/addon-a11y": "^8.1.10", - "@storybook/addon-essentials": "^8.1.10", - "@storybook/addon-interactions": "^8.1.10", - "@storybook/addon-links": "^8.1.10", - "@storybook/addon-mdx-gfm": "^8.1.10", + "@storybook/addon-a11y": "^8.1.11", + "@storybook/addon-essentials": "^8.1.11", + "@storybook/addon-interactions": "^8.1.11", + "@storybook/addon-links": "^8.1.11", + "@storybook/addon-mdx-gfm": "^8.1.11", "@storybook/addon-styling": "^1.3.7", "@storybook/addon-webpack5-compiler-babel": "^3.0.3", - "@storybook/manager-api": "^8.1.10", - "@storybook/react": "^8.1.10", - "@storybook/react-webpack5": "^8.1.10", - "@storybook/test": "^8.1.10", + "@storybook/manager-api": "^8.1.11", + "@storybook/react": "^8.1.11", + "@storybook/react-webpack5": "^8.1.11", + "@storybook/test": "^8.1.11", "@storybook/testing-library": "^0.2.2", - "@storybook/theming": "^8.1.10", + "@storybook/theming": "^8.1.11", "@testing-library/jest-dom": "^6.4.6", "@testing-library/react": "^16.0.0", "@testing-library/user-event": "^14.5.2", "@types/jest": "^29.5.12", "@types/jsonfile": "^6", - "@types/lodash": "^4.17.5", - "@types/node": "^20.14.7", + "@types/lodash": "^4.17.6", + "@types/node": "^20.14.9", "@types/react": "^18.3.3", "@types/react-beautiful-dnd": "^13.1.8", "@types/react-dom": "^18.3.0", @@ -171,7 +171,7 @@ "jest-preset-stylelint": "^6.3.2", "lint-staged": "^13.3.0", "plop": "^4.0.1", - "postcss": "^8.4.38", + "postcss": "^8.4.39", "postcss-cli": "^10.1.0", "postcss-import": "^15.1.0", "postcss-mixins": "^9.0.4", @@ -185,7 +185,7 @@ "rollup-plugin-postcss": "^4.0.2", "size-limit": "^8.2.6", "standard-version": "^9.5.0", - "storybook": "^8.1.10", + "storybook": "^8.1.11", "style-dictionary": "^3.9.2", "stylelint": "^15.11.0", "stylelint-config-recommended": "^13.0.0", diff --git a/yarn.lock b/yarn.lock index 75ecfa03e..7d878d60c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,7 +12,7 @@ __metadata: languageName: node linkType: hard -"@adobe/css-tools@npm:^4.4.0": +"@adobe/css-tools@npm:^4.3.2, @adobe/css-tools@npm:^4.4.0": version: 4.4.0 resolution: "@adobe/css-tools@npm:4.4.0" checksum: 10/9c6315fe9efa5075d6ddb6ded7a1424bc9c41a01f2314b6bdcc368723985fe161008d03ddcc2b27b2da50cb9c14190fbce965d15cefe5f9a31bdd43f35b52115 @@ -2143,32 +2143,32 @@ __metadata: "@commitlint/config-conventional": "npm:^18.6.3" "@geometricpanda/storybook-addon-badges": "npm:^2.0.2" "@headlessui/react": "npm:^1.7.19" - "@omlet/cli": "npm:^1.7.0" + "@omlet/cli": "npm:^1.8.1" "@popperjs/core": "npm:^2.11.8" "@rollup/plugin-node-resolve": "npm:^15.2.3" "@rollup/plugin-typescript": "npm:^11.1.6" "@size-limit/file": "npm:^8.2.6" - "@storybook/addon-a11y": "npm:^8.1.10" - "@storybook/addon-essentials": "npm:^8.1.10" - "@storybook/addon-interactions": "npm:^8.1.10" - "@storybook/addon-links": "npm:^8.1.10" - "@storybook/addon-mdx-gfm": "npm:^8.1.10" + "@storybook/addon-a11y": "npm:^8.1.11" + "@storybook/addon-essentials": "npm:^8.1.11" + "@storybook/addon-interactions": "npm:^8.1.11" + "@storybook/addon-links": "npm:^8.1.11" + "@storybook/addon-mdx-gfm": "npm:^8.1.11" "@storybook/addon-styling": "npm:^1.3.7" "@storybook/addon-webpack5-compiler-babel": "npm:^3.0.3" - "@storybook/manager-api": "npm:^8.1.10" - "@storybook/react": "npm:^8.1.10" - "@storybook/react-webpack5": "npm:^8.1.10" - "@storybook/test": "npm:^8.1.10" + "@storybook/manager-api": "npm:^8.1.11" + "@storybook/react": "npm:^8.1.11" + "@storybook/react-webpack5": "npm:^8.1.11" + "@storybook/test": "npm:^8.1.11" "@storybook/testing-library": "npm:^0.2.2" - "@storybook/theming": "npm:^8.1.10" + "@storybook/theming": "npm:^8.1.11" "@testing-library/jest-dom": "npm:^6.4.6" "@testing-library/react": "npm:^16.0.0" "@testing-library/user-event": "npm:^14.5.2" "@tippyjs/react": "npm:^4.2.6" "@types/jest": "npm:^29.5.12" "@types/jsonfile": "npm:^6" - "@types/lodash": "npm:^4.17.5" - "@types/node": "npm:^20.14.7" + "@types/lodash": "npm:^4.17.6" + "@types/node": "npm:^20.14.9" "@types/react": "npm:^18.3.3" "@types/react-beautiful-dnd": "npm:^13.1.8" "@types/react-dom": "npm:^18.3.0" @@ -2199,7 +2199,7 @@ __metadata: lodash: "npm:^4.17.21" ora: "npm:^8.0.1" plop: "npm:^4.0.1" - postcss: "npm:^8.4.38" + postcss: "npm:^8.4.39" postcss-cli: "npm:^10.1.0" postcss-import: "npm:^15.1.0" postcss-mixins: "npm:^9.0.4" @@ -2219,7 +2219,7 @@ __metadata: rollup-plugin-postcss: "npm:^4.0.2" size-limit: "npm:^8.2.6" standard-version: "npm:^9.5.0" - storybook: "npm:^8.1.10" + storybook: "npm:^8.1.11" style-dictionary: "npm:^3.9.2" stylelint: "npm:^15.11.0" stylelint-config-recommended: "npm:^13.0.0" @@ -3481,66 +3481,58 @@ __metadata: languageName: node linkType: hard -"@omlet/cli-darwin-arm64@npm:1.7.0": - version: 1.7.0 - resolution: "@omlet/cli-darwin-arm64@npm:1.7.0" +"@omlet/cli-darwin-arm64@npm:1.8.1": + version: 1.8.1 + resolution: "@omlet/cli-darwin-arm64@npm:1.8.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@omlet/cli-darwin-x64@npm:1.7.0": - version: 1.7.0 - resolution: "@omlet/cli-darwin-x64@npm:1.7.0" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@omlet/cli-linux-arm64-gnu@npm:1.7.0": - version: 1.7.0 - resolution: "@omlet/cli-linux-arm64-gnu@npm:1.7.0" +"@omlet/cli-linux-arm64-gnu@npm:1.8.1": + version: 1.8.1 + resolution: "@omlet/cli-linux-arm64-gnu@npm:1.8.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@omlet/cli-linux-arm64-musl@npm:1.7.0": - version: 1.7.0 - resolution: "@omlet/cli-linux-arm64-musl@npm:1.7.0" +"@omlet/cli-linux-arm64-musl@npm:1.8.1": + version: 1.8.1 + resolution: "@omlet/cli-linux-arm64-musl@npm:1.8.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@omlet/cli-linux-x64-gnu@npm:1.7.0": - version: 1.7.0 - resolution: "@omlet/cli-linux-x64-gnu@npm:1.7.0" +"@omlet/cli-linux-x64-gnu@npm:1.8.1": + version: 1.8.1 + resolution: "@omlet/cli-linux-x64-gnu@npm:1.8.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@omlet/cli-linux-x64-musl@npm:1.7.0": - version: 1.7.0 - resolution: "@omlet/cli-linux-x64-musl@npm:1.7.0" +"@omlet/cli-linux-x64-musl@npm:1.8.1": + version: 1.8.1 + resolution: "@omlet/cli-linux-x64-musl@npm:1.8.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@omlet/cli-win32-x64-msvc@npm:1.7.0": - version: 1.7.0 - resolution: "@omlet/cli-win32-x64-msvc@npm:1.7.0" +"@omlet/cli-win32-x64-msvc@npm:1.8.1": + version: 1.8.1 + resolution: "@omlet/cli-win32-x64-msvc@npm:1.8.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@omlet/cli@npm:^1.7.0": - version: 1.7.0 - resolution: "@omlet/cli@npm:1.7.0" - dependencies: - "@omlet/cli-darwin-arm64": "npm:1.7.0" - "@omlet/cli-darwin-x64": "npm:1.7.0" - "@omlet/cli-linux-arm64-gnu": "npm:1.7.0" - "@omlet/cli-linux-arm64-musl": "npm:1.7.0" - "@omlet/cli-linux-x64-gnu": "npm:1.7.0" - "@omlet/cli-linux-x64-musl": "npm:1.7.0" - "@omlet/cli-win32-x64-msvc": "npm:1.7.0" +"@omlet/cli@npm:^1.8.1": + version: 1.8.1 + resolution: "@omlet/cli@npm:1.8.1" + dependencies: + "@omlet/cli-darwin-arm64": "npm:1.8.1" + "@omlet/cli-linux-arm64-gnu": "npm:1.8.1" + "@omlet/cli-linux-arm64-musl": "npm:1.8.1" + "@omlet/cli-linux-x64-gnu": "npm:1.8.1" + "@omlet/cli-linux-x64-musl": "npm:1.8.1" + "@omlet/cli-win32-x64-msvc": "npm:1.8.1" "@sentry/node": "npm:^7.108.0" ajv: "npm:^8.13.0" ci-info: "npm:^4.0.0" @@ -3559,6 +3551,7 @@ __metadata: http-status-codes: "npm:^2.2.0" https-proxy-agent: "npm:^5.0.1" inquirer: "npm:^8.2.2" + is-docker: "npm:^2.2.1" js-yaml: "npm:^4.1.0" json-stream-stringify: "npm:^3.1.4" json5: "npm:^2.2.1" @@ -3578,8 +3571,6 @@ __metadata: dependenciesMeta: "@omlet/cli-darwin-arm64": optional: true - "@omlet/cli-darwin-x64": - optional: true "@omlet/cli-linux-arm64-gnu": optional: true "@omlet/cli-linux-arm64-musl": @@ -3592,7 +3583,7 @@ __metadata: optional: true bin: omlet: bin/omlet - checksum: 10/6f0d96262c2b5d9933a41db10d1c5555564233006b0dfb2988163241c8cfa53f75624edc7b71a7fcc476d166d2b94f0fa51c24741546f376799648e96cbef5b1 + checksum: 10/4f9b67f9a90c5f96c0e94c0eec92e4340b3f4075feb62172545157b37a936424b3e4319b7ecfaf31cbb98278702a8d77d51f0a1abb58e6c6ebb6304c8a21338e languageName: node linkType: hard @@ -4749,70 +4740,70 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-a11y@npm:^8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-a11y@npm:8.1.10" +"@storybook/addon-a11y@npm:^8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-a11y@npm:8.1.11" dependencies: - "@storybook/addon-highlight": "npm:8.1.10" + "@storybook/addon-highlight": "npm:8.1.11" axe-core: "npm:^4.2.0" - checksum: 10/aed1951efcee114469d953f712c9c6f2975e0cdf183c481cebe64e07006646b74d7b7049f23782f2367575d8d4714de7d6de84b2fcef72344a26aacfa80c4e02 + checksum: 10/3fd6ef36a915dedffab5add41ab72a4b439e93fcd3bafb368d273caf30aa1a064bd0e3d1d9484f71d5c48d50049cfe067c3d2ef9422b37527d600ea2480d1f7f languageName: node linkType: hard -"@storybook/addon-actions@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-actions@npm:8.1.10" +"@storybook/addon-actions@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-actions@npm:8.1.11" dependencies: - "@storybook/core-events": "npm:8.1.10" + "@storybook/core-events": "npm:8.1.11" "@storybook/global": "npm:^5.0.0" "@types/uuid": "npm:^9.0.1" dequal: "npm:^2.0.2" polished: "npm:^4.2.2" uuid: "npm:^9.0.0" - checksum: 10/ca25fc9a421aeae425a97318ed10d17d91732d047c35d70df50f3764c274b68bee4fd171231c3c28953c0322386aca58a0f000b45d5abae8a128aabc1d118aa2 + checksum: 10/3778b68164be1c9d233ee326cc7129f6102fc9c2e5b0fec27787ca063ec34ac9f052042e821796991f6df2470d98d36bdbc3734cb02ab6b25e17fb4ae79a8cb0 languageName: node linkType: hard -"@storybook/addon-backgrounds@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-backgrounds@npm:8.1.10" +"@storybook/addon-backgrounds@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-backgrounds@npm:8.1.11" dependencies: "@storybook/global": "npm:^5.0.0" memoizerific: "npm:^1.11.3" ts-dedent: "npm:^2.0.0" - checksum: 10/b7642596806faeecbad9774142f814049db9231398898c0720a020c0f5ec00372ab7e86f164b6ec458688786372a609060e965c6b1f6846c0a5a152788d235b1 + checksum: 10/e5ebaa78c512df9bb3fd85d6c92ec8c61d7d6ef3184b16f16a3cfbe46bb23766c6f7be8adedad5f6e6bb8b6b902ed3e35ade2440005434f712778bb425493cdf languageName: node linkType: hard -"@storybook/addon-controls@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-controls@npm:8.1.10" +"@storybook/addon-controls@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-controls@npm:8.1.11" dependencies: - "@storybook/blocks": "npm:8.1.10" + "@storybook/blocks": "npm:8.1.11" dequal: "npm:^2.0.2" lodash: "npm:^4.17.21" ts-dedent: "npm:^2.0.0" - checksum: 10/5c4b7a23b6910fed3aff0ecb107caa72c974dd772a007f4d3c01ac89dfec85e0eed4b3d3fb9d55358056796ad47d214917bcabef2b5538cd18723c29713720ca + checksum: 10/0f9bd4cfa224e3e3d61780922ac1495dd6a2ccad3312653e999e0f27a43d0f3e6caf29ce0a92976661f3135930ffaaa3c39b71efa70dabb173fd513103410658 languageName: node linkType: hard -"@storybook/addon-docs@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-docs@npm:8.1.10" +"@storybook/addon-docs@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-docs@npm:8.1.11" dependencies: "@babel/core": "npm:^7.24.4" "@mdx-js/react": "npm:^3.0.0" - "@storybook/blocks": "npm:8.1.10" - "@storybook/client-logger": "npm:8.1.10" - "@storybook/components": "npm:8.1.10" - "@storybook/csf-plugin": "npm:8.1.10" - "@storybook/csf-tools": "npm:8.1.10" + "@storybook/blocks": "npm:8.1.11" + "@storybook/client-logger": "npm:8.1.11" + "@storybook/components": "npm:8.1.11" + "@storybook/csf-plugin": "npm:8.1.11" + "@storybook/csf-tools": "npm:8.1.11" "@storybook/global": "npm:^5.0.0" - "@storybook/node-logger": "npm:8.1.10" - "@storybook/preview-api": "npm:8.1.10" - "@storybook/react-dom-shim": "npm:8.1.10" - "@storybook/theming": "npm:8.1.10" - "@storybook/types": "npm:8.1.10" + "@storybook/node-logger": "npm:8.1.11" + "@storybook/preview-api": "npm:8.1.11" + "@storybook/react-dom-shim": "npm:8.1.11" + "@storybook/theming": "npm:8.1.11" + "@storybook/types": "npm:8.1.11" "@types/react": "npm:^16.8.0 || ^17.0.0 || ^18.0.0" fs-extra: "npm:^11.1.0" react: "npm:^16.8.0 || ^17.0.0 || ^18.0.0" @@ -4820,58 +4811,58 @@ __metadata: rehype-external-links: "npm:^3.0.0" rehype-slug: "npm:^6.0.0" ts-dedent: "npm:^2.0.0" - checksum: 10/94a56d3aef759df100b7fe4edb512a97a42125dcd6dc515ff5b4c0d0b0b99b899236ed0d9db9f294ee50658afbb3c843b74bf0313f95a414f269ccfdb9fa32b4 - languageName: node - linkType: hard - -"@storybook/addon-essentials@npm:^8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-essentials@npm:8.1.10" - dependencies: - "@storybook/addon-actions": "npm:8.1.10" - "@storybook/addon-backgrounds": "npm:8.1.10" - "@storybook/addon-controls": "npm:8.1.10" - "@storybook/addon-docs": "npm:8.1.10" - "@storybook/addon-highlight": "npm:8.1.10" - "@storybook/addon-measure": "npm:8.1.10" - "@storybook/addon-outline": "npm:8.1.10" - "@storybook/addon-toolbars": "npm:8.1.10" - "@storybook/addon-viewport": "npm:8.1.10" - "@storybook/core-common": "npm:8.1.10" - "@storybook/manager-api": "npm:8.1.10" - "@storybook/node-logger": "npm:8.1.10" - "@storybook/preview-api": "npm:8.1.10" + checksum: 10/f256fc053222514441b25d5b80950f96692c13118edc73552058e4b7c25d87f3d13ed376c8c27ffbde60f0e795554012ce09adf3d0d0acb514277b8bf652bd4d + languageName: node + linkType: hard + +"@storybook/addon-essentials@npm:^8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-essentials@npm:8.1.11" + dependencies: + "@storybook/addon-actions": "npm:8.1.11" + "@storybook/addon-backgrounds": "npm:8.1.11" + "@storybook/addon-controls": "npm:8.1.11" + "@storybook/addon-docs": "npm:8.1.11" + "@storybook/addon-highlight": "npm:8.1.11" + "@storybook/addon-measure": "npm:8.1.11" + "@storybook/addon-outline": "npm:8.1.11" + "@storybook/addon-toolbars": "npm:8.1.11" + "@storybook/addon-viewport": "npm:8.1.11" + "@storybook/core-common": "npm:8.1.11" + "@storybook/manager-api": "npm:8.1.11" + "@storybook/node-logger": "npm:8.1.11" + "@storybook/preview-api": "npm:8.1.11" ts-dedent: "npm:^2.0.0" - checksum: 10/865570d2965840bf59a767526266ec234a959060090d87c881173dddeb495933523e96ff83b3d39d64d88b921e5d58635b9d38310259144e823507b68c330bb6 + checksum: 10/590b6e248733b1a27baaf7f9f4e64c1dd083ed638df333db1703f47367417636488347a36219a698dfc01e6fda8a961953ba1bc2538f170be9d4e3a2c36f3f8b languageName: node linkType: hard -"@storybook/addon-highlight@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-highlight@npm:8.1.10" +"@storybook/addon-highlight@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-highlight@npm:8.1.11" dependencies: "@storybook/global": "npm:^5.0.0" - checksum: 10/af52f49fc79f468ea82e92a45900f9b5197a959ff466e25bdc8e69eede127ab267855262168f5df04264fe2600ea8b4984a5245d29facb8c011642038b0b089c + checksum: 10/b6cafde69bb1bec51bc0a9c03b6ab21f0cf84aab11f6f2c326cd57a6d5f87fb61fc50529e817237f58bb72d3f31b533a3311d7306af44bd4e6bf13de8ec7d679 languageName: node linkType: hard -"@storybook/addon-interactions@npm:^8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-interactions@npm:8.1.10" +"@storybook/addon-interactions@npm:^8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-interactions@npm:8.1.11" dependencies: "@storybook/global": "npm:^5.0.0" - "@storybook/instrumenter": "npm:8.1.10" - "@storybook/test": "npm:8.1.10" - "@storybook/types": "npm:8.1.10" + "@storybook/instrumenter": "npm:8.1.11" + "@storybook/test": "npm:8.1.11" + "@storybook/types": "npm:8.1.11" polished: "npm:^4.2.2" ts-dedent: "npm:^2.2.0" - checksum: 10/3727731ca1bd8deebe16eff43a6d4925fddb2f47486761766d83fa59bdc4db2d03a4c1f25954f688aed295aec91fbf40f9b80a0bdf10452cd830255a171f0f20 + checksum: 10/6e7d8c2a7212ea3aa3247f1b783b67d7bd731955c789f1046b44c09728324c945fd91737d8e0d48625fde5a4775b78f8635b205714d3fa7ecb885e1bbda2f7b3 languageName: node linkType: hard -"@storybook/addon-links@npm:^8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-links@npm:8.1.10" +"@storybook/addon-links@npm:^8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-links@npm:8.1.11" dependencies: "@storybook/csf": "npm:^0.1.7" "@storybook/global": "npm:^5.0.0" @@ -4881,38 +4872,38 @@ __metadata: peerDependenciesMeta: react: optional: true - checksum: 10/1bd9e30ab01951e5733bcce39af872d59c941e1fbf96800379d5df11c75eab20ad58c54c43dc00ea9d0b33c5dec30e27f09dc47427b6d1fb067cfeb5ef4813b1 + checksum: 10/c428dcfeb0440dff3e58256660719059787cc1c1b0650f340d01d2a4f49a892f4de1533dda50ae648c07fd5bc8d179ff4818aed246a56aa4f9950e2359ebf3cd languageName: node linkType: hard -"@storybook/addon-mdx-gfm@npm:^8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-mdx-gfm@npm:8.1.10" +"@storybook/addon-mdx-gfm@npm:^8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-mdx-gfm@npm:8.1.11" dependencies: - "@storybook/node-logger": "npm:8.1.10" + "@storybook/node-logger": "npm:8.1.11" remark-gfm: "npm:^4.0.0" ts-dedent: "npm:^2.0.0" - checksum: 10/e2a8b418620b213bfb2b8dabb0975e0b177244706705e00d00cbb3067cf9194c9d086a3ba596b14f04ee2b564a36796c0afa16982a6b6699bb2f558c8d77547c + checksum: 10/55df57102fc1e67e364b990b9b4500f67c5cdbddd140d8f2c8f9de5404aeabe53d1d55336df195ce13915d102872dc4c389113bd1c60ca58544cb672df710a4b languageName: node linkType: hard -"@storybook/addon-measure@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-measure@npm:8.1.10" +"@storybook/addon-measure@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-measure@npm:8.1.11" dependencies: "@storybook/global": "npm:^5.0.0" tiny-invariant: "npm:^1.3.1" - checksum: 10/82b8244bd4de3881e631f3c0a40f2c4aaa6f862dd4f765d43d1a522efa0e8e1fc4111c88b66cefb7d8ea04553a7ecec6cf825efefd88dd902b52da875cd8c433 + checksum: 10/76a334f1dd66e7673ef5dbcd74b36ba742e7fa91f905829a825232603be0e34b4d36905f270ae30dd3f55de009b05ed7e94083d3e24461a04686d9e941452f87 languageName: node linkType: hard -"@storybook/addon-outline@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-outline@npm:8.1.10" +"@storybook/addon-outline@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-outline@npm:8.1.11" dependencies: "@storybook/global": "npm:^5.0.0" ts-dedent: "npm:^2.0.0" - checksum: 10/f8007988b70a7d56485c81bac2371c782f1b22beea9e0cd4c150ba70fb2d8378623418c36fc475680c91f45fe910f9e6cc681480b63d6b3492004e4806ee1128 + checksum: 10/b4f9e329a29c5603d2164247c085aac0c8f0f217bdd42405757e113298ff9ae36f4eb22e1ab5d74bc962da1bbd9bd6d8f9ac2946c7c808faf0451862767b6c9c languageName: node linkType: hard @@ -4961,19 +4952,19 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-toolbars@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-toolbars@npm:8.1.10" - checksum: 10/21125a1b20f39e24d9ad1fd979383881b3ad06f58fffccadc8bf8642c3f30933cae1e0f2a6fb4986e4aa7c57f8bf93436bc00e84ac6e0e74f47fbde99605b45c +"@storybook/addon-toolbars@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-toolbars@npm:8.1.11" + checksum: 10/447f224f11e76f90599fb75987e772842f70b4580e065ae3f106461fd0d67bf36b63f0a151f48621574db3295707efada87fadf35f9105b5ea5758ed210504ef languageName: node linkType: hard -"@storybook/addon-viewport@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/addon-viewport@npm:8.1.10" +"@storybook/addon-viewport@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/addon-viewport@npm:8.1.11" dependencies: memoizerific: "npm:^1.11.3" - checksum: 10/cf5e982305c6c27ef82dfbad89661811b57faf977c84e7d91017e8ab2970147091f564c66968eedc7ae51c61700f32892bb3444fabaa857ab95d3c348e6e4c64 + checksum: 10/b121f98ba64df534ca301c8bb0b3fdecb9af1f090ac488509de02a139883699aa4e5170dba671aa557cec72a1201f4722dd11529931cc9efce336f2c9e74d3ec languageName: node linkType: hard @@ -5005,22 +4996,22 @@ __metadata: languageName: node linkType: hard -"@storybook/blocks@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/blocks@npm:8.1.10" +"@storybook/blocks@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/blocks@npm:8.1.11" dependencies: - "@storybook/channels": "npm:8.1.10" - "@storybook/client-logger": "npm:8.1.10" - "@storybook/components": "npm:8.1.10" - "@storybook/core-events": "npm:8.1.10" + "@storybook/channels": "npm:8.1.11" + "@storybook/client-logger": "npm:8.1.11" + "@storybook/components": "npm:8.1.11" + "@storybook/core-events": "npm:8.1.11" "@storybook/csf": "npm:^0.1.7" - "@storybook/docs-tools": "npm:8.1.10" + "@storybook/docs-tools": "npm:8.1.11" "@storybook/global": "npm:^5.0.0" "@storybook/icons": "npm:^1.2.5" - "@storybook/manager-api": "npm:8.1.10" - "@storybook/preview-api": "npm:8.1.10" - "@storybook/theming": "npm:8.1.10" - "@storybook/types": "npm:8.1.10" + "@storybook/manager-api": "npm:8.1.11" + "@storybook/preview-api": "npm:8.1.11" + "@storybook/theming": "npm:8.1.11" + "@storybook/types": "npm:8.1.11" "@types/lodash": "npm:^4.14.167" color-convert: "npm:^2.0.1" dequal: "npm:^2.0.2" @@ -5041,18 +5032,18 @@ __metadata: optional: true react-dom: optional: true - checksum: 10/6ea8cf3ceec5614110b21b982791ca30bf24dae5ab8327458f4a6331b87e57dba54c2fb576a3399cd2351fda90573dea8cc69c670d1ef00d373113e677e626ed + checksum: 10/0e3de76671f3e4191dd740abef9a3a17676eda32bd4c1da719668ec25c9fd0fcc36e31bf14ee41588f539bb4a4b1d534d84a21b3cc556a62e0f61aadbb0d4892 languageName: node linkType: hard -"@storybook/builder-manager@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/builder-manager@npm:8.1.10" +"@storybook/builder-manager@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/builder-manager@npm:8.1.11" dependencies: "@fal-works/esbuild-plugin-global-externals": "npm:^2.1.2" - "@storybook/core-common": "npm:8.1.10" - "@storybook/manager": "npm:8.1.10" - "@storybook/node-logger": "npm:8.1.10" + "@storybook/core-common": "npm:8.1.11" + "@storybook/manager": "npm:8.1.11" + "@storybook/node-logger": "npm:8.1.11" "@types/ejs": "npm:^3.1.1" "@yarnpkg/esbuild-plugin-pnp": "npm:^3.0.0-rc.10" browser-assert: "npm:^1.2.1" @@ -5063,22 +5054,22 @@ __metadata: fs-extra: "npm:^11.1.0" process: "npm:^0.11.10" util: "npm:^0.12.4" - checksum: 10/c1a9a2d9878f601c6b77fb55891df12626a3dc51f11a99f576f3a749dd2c5b53804b7f079aa1d387994fcdfb681a9b50f37ce8c4657858dc49217bb2352e8880 + checksum: 10/1624c0b69bd4f082eab0b105cfd0ba894c9c4cf9ecc3b1c6ddf336ef304ab244caeaaa4576cd98eef1e7fec4cac616c897aeabc446283619d13d73880f983f44 languageName: node linkType: hard -"@storybook/builder-webpack5@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/builder-webpack5@npm:8.1.10" +"@storybook/builder-webpack5@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/builder-webpack5@npm:8.1.11" dependencies: - "@storybook/channels": "npm:8.1.10" - "@storybook/client-logger": "npm:8.1.10" - "@storybook/core-common": "npm:8.1.10" - "@storybook/core-events": "npm:8.1.10" - "@storybook/core-webpack": "npm:8.1.10" - "@storybook/node-logger": "npm:8.1.10" - "@storybook/preview": "npm:8.1.10" - "@storybook/preview-api": "npm:8.1.10" + "@storybook/channels": "npm:8.1.11" + "@storybook/client-logger": "npm:8.1.11" + "@storybook/core-common": "npm:8.1.11" + "@storybook/core-events": "npm:8.1.11" + "@storybook/core-webpack": "npm:8.1.11" + "@storybook/node-logger": "npm:8.1.11" + "@storybook/preview": "npm:8.1.11" + "@storybook/preview-api": "npm:8.1.11" "@types/node": "npm:^18.0.0" "@types/semver": "npm:^7.3.4" browser-assert: "npm:^1.2.1" @@ -5108,7 +5099,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/58bd2c9c4fde0b4fd3a832fe97043d915535d5f2d1f32f0c6b9cff14cba5859e78dae19adf66101450ea2f78964938d6a969491c17e1ec9b9a5eb28d12c04601 + checksum: 10/75584ac6fd51856c1d713a4a5203fb3458c89fc302e75a5db8bff5738fe7121d86689996ca96af4599fab343bbd9db7d242493747a210e93b5a4111fda00e696 languageName: node linkType: hard @@ -5126,34 +5117,34 @@ __metadata: languageName: node linkType: hard -"@storybook/channels@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/channels@npm:8.1.10" +"@storybook/channels@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/channels@npm:8.1.11" dependencies: - "@storybook/client-logger": "npm:8.1.10" - "@storybook/core-events": "npm:8.1.10" + "@storybook/client-logger": "npm:8.1.11" + "@storybook/core-events": "npm:8.1.11" "@storybook/global": "npm:^5.0.0" telejson: "npm:^7.2.0" tiny-invariant: "npm:^1.3.1" - checksum: 10/7b75ed2cd2185d3207a775e3a4beac1e546b021cce8c23751f783adb22696523c65abc09a37ba76f6f06bedee8a89464bfe6419dddb0b652aa00847bf4237e95 + checksum: 10/7ca5c0c418d76ca151369b11d3bce0f514f1ca63f6bc66b94ebcbbaa908b4859358020de4aff67a9dec9a43aa0b7c57f9acec67189ec61df8f617403b63023ce languageName: node linkType: hard -"@storybook/cli@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/cli@npm:8.1.10" +"@storybook/cli@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/cli@npm:8.1.11" dependencies: "@babel/core": "npm:^7.24.4" "@babel/types": "npm:^7.24.0" "@ndelangen/get-tarball": "npm:^3.0.7" - "@storybook/codemod": "npm:8.1.10" - "@storybook/core-common": "npm:8.1.10" - "@storybook/core-events": "npm:8.1.10" - "@storybook/core-server": "npm:8.1.10" - "@storybook/csf-tools": "npm:8.1.10" - "@storybook/node-logger": "npm:8.1.10" - "@storybook/telemetry": "npm:8.1.10" - "@storybook/types": "npm:8.1.10" + "@storybook/codemod": "npm:8.1.11" + "@storybook/core-common": "npm:8.1.11" + "@storybook/core-events": "npm:8.1.11" + "@storybook/core-server": "npm:8.1.11" + "@storybook/csf-tools": "npm:8.1.11" + "@storybook/node-logger": "npm:8.1.11" + "@storybook/telemetry": "npm:8.1.11" + "@storybook/types": "npm:8.1.11" "@types/semver": "npm:^7.3.4" "@yarnpkg/fslib": "npm:2.10.3" "@yarnpkg/libzip": "npm:2.3.0" @@ -5182,7 +5173,7 @@ __metadata: bin: getstorybook: ./bin/index.js sb: ./bin/index.js - checksum: 10/22b586a628d4b91e12652aac4a0103a362e312329be07e563eb435b5d66f812b920fe38fab4db71d6d9c87826f213870d104e6867a5ea351d2a004b8315f08dd + checksum: 10/e243cae6d0a0b0ccff032c8b09b2426aaf91f86f0d635de5ec7a96ba3a91c6e7b8fe77048707eddfe88f6ae196a480243f1b1b44b476e499cc7f2cff493def54 languageName: node linkType: hard @@ -5195,26 +5186,26 @@ __metadata: languageName: node linkType: hard -"@storybook/client-logger@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/client-logger@npm:8.1.10" +"@storybook/client-logger@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/client-logger@npm:8.1.11" dependencies: "@storybook/global": "npm:^5.0.0" - checksum: 10/42de7b0a74846376d9183b1e266efce8cf0237532905a0c7c0591c2ed5ab9f357f35e3997cc84ef15d5bd0224ba1c79642b8a5205edeb22c6907a3b427aca52d + checksum: 10/4d2b652133a7aa51387d4667e428db084b81eb67d215cb401a7bdd7e7021a8e698c8b4a203a3ca17d0bef0a8edaeac09bdd37ba770fd87a150d038435835e47a languageName: node linkType: hard -"@storybook/codemod@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/codemod@npm:8.1.10" +"@storybook/codemod@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/codemod@npm:8.1.11" dependencies: "@babel/core": "npm:^7.24.4" "@babel/preset-env": "npm:^7.24.4" "@babel/types": "npm:^7.24.0" "@storybook/csf": "npm:^0.1.7" - "@storybook/csf-tools": "npm:8.1.10" - "@storybook/node-logger": "npm:8.1.10" - "@storybook/types": "npm:8.1.10" + "@storybook/csf-tools": "npm:8.1.11" + "@storybook/node-logger": "npm:8.1.11" + "@storybook/types": "npm:8.1.11" "@types/cross-spawn": "npm:^6.0.2" cross-spawn: "npm:^7.0.3" globby: "npm:^14.0.1" @@ -5223,28 +5214,28 @@ __metadata: prettier: "npm:^3.1.1" recast: "npm:^0.23.5" tiny-invariant: "npm:^1.3.1" - checksum: 10/d79a1901e99b81cf397e96f498a5b213e0a0727294134d9a5720865059f2a5eea64902178c483cc5aed92d8e941e7aff8291b532a87d4b7846655d002ecf9cd0 + checksum: 10/ad6064353148cf526493626c630c977b0c03444ef4dbd7e673494ba49bf7791a0a82f03f46ea7fc679eea002e8d7116750d7c65f70ad989a118bbebe795a4d04 languageName: node linkType: hard -"@storybook/components@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/components@npm:8.1.10" +"@storybook/components@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/components@npm:8.1.11" dependencies: "@radix-ui/react-dialog": "npm:^1.0.5" "@radix-ui/react-slot": "npm:^1.0.2" - "@storybook/client-logger": "npm:8.1.10" + "@storybook/client-logger": "npm:8.1.11" "@storybook/csf": "npm:^0.1.7" "@storybook/global": "npm:^5.0.0" "@storybook/icons": "npm:^1.2.5" - "@storybook/theming": "npm:8.1.10" - "@storybook/types": "npm:8.1.10" + "@storybook/theming": "npm:8.1.11" + "@storybook/types": "npm:8.1.11" memoizerific: "npm:^1.11.3" util-deprecate: "npm:^1.0.2" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - checksum: 10/dc4990e52322b7b7892213299d1313c7703d21ea23c36d7b57b89a5fc058615aace27f99e37a0310e53fca6813aee5485bd637502d63d03c866a14e411d498f9 + checksum: 10/ccc2fdfd291d99eb706210baacd731c6742520b4bee85fa3e38931cc212daf0ead2365837899a6c6c5c4fcdb40c783d66c858f42134096656b4166b826c8d1ed languageName: node linkType: hard @@ -5269,14 +5260,14 @@ __metadata: languageName: node linkType: hard -"@storybook/core-common@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/core-common@npm:8.1.10" +"@storybook/core-common@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/core-common@npm:8.1.11" dependencies: - "@storybook/core-events": "npm:8.1.10" - "@storybook/csf-tools": "npm:8.1.10" - "@storybook/node-logger": "npm:8.1.10" - "@storybook/types": "npm:8.1.10" + "@storybook/core-events": "npm:8.1.11" + "@storybook/csf-tools": "npm:8.1.11" + "@storybook/node-logger": "npm:8.1.11" + "@storybook/types": "npm:8.1.11" "@yarnpkg/fslib": "npm:2.10.3" "@yarnpkg/libzip": "npm:2.3.0" chalk: "npm:^4.1.0" @@ -5307,7 +5298,7 @@ __metadata: peerDependenciesMeta: prettier: optional: true - checksum: 10/fa739c9495b92581c18becbaf64dc02ea32f3e51dd82f4dfc9ba22f2fde63fb3e7564ea1d0c9217dc0c1d168d9cbf8e2e8b7bc0207e3cc8d961149013e383a4b + checksum: 10/f76cfba89418bc9c494bbd1f57cca308b1b1596c7a2f2a6452668e8db3b91e702c3a9d93a66b3b1c50271a7181b4fe0f19d0d77e7da327663a4daf8be7c10c38 languageName: node linkType: hard @@ -5351,38 +5342,38 @@ __metadata: languageName: node linkType: hard -"@storybook/core-events@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/core-events@npm:8.1.10" +"@storybook/core-events@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/core-events@npm:8.1.11" dependencies: "@storybook/csf": "npm:^0.1.7" ts-dedent: "npm:^2.0.0" - checksum: 10/2f8b27f1dc14ba33ee80e629b230ba094537b383c49999ec07cf2e21d524e0a522a59978ce559f7e78c03c41112b90408c17e1e7655c031adcb4e36a4ee550d4 + checksum: 10/8628593b9604b189ef295532a1c2210a8e6fc5d8d7b9a6ff79553296985e77abc20e83a000a35c401bbfc39cc4734fdf346637d97508d6b6759603651ac29e8f languageName: node linkType: hard -"@storybook/core-server@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/core-server@npm:8.1.10" +"@storybook/core-server@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/core-server@npm:8.1.11" dependencies: "@aw-web-design/x-default-browser": "npm:1.4.126" "@babel/core": "npm:^7.24.4" "@babel/parser": "npm:^7.24.4" "@discoveryjs/json-ext": "npm:^0.5.3" - "@storybook/builder-manager": "npm:8.1.10" - "@storybook/channels": "npm:8.1.10" - "@storybook/core-common": "npm:8.1.10" - "@storybook/core-events": "npm:8.1.10" + "@storybook/builder-manager": "npm:8.1.11" + "@storybook/channels": "npm:8.1.11" + "@storybook/core-common": "npm:8.1.11" + "@storybook/core-events": "npm:8.1.11" "@storybook/csf": "npm:^0.1.7" - "@storybook/csf-tools": "npm:8.1.10" + "@storybook/csf-tools": "npm:8.1.11" "@storybook/docs-mdx": "npm:3.1.0-next.0" "@storybook/global": "npm:^5.0.0" - "@storybook/manager": "npm:8.1.10" - "@storybook/manager-api": "npm:8.1.10" - "@storybook/node-logger": "npm:8.1.10" - "@storybook/preview-api": "npm:8.1.10" - "@storybook/telemetry": "npm:8.1.10" - "@storybook/types": "npm:8.1.10" + "@storybook/manager": "npm:8.1.11" + "@storybook/manager-api": "npm:8.1.11" + "@storybook/node-logger": "npm:8.1.11" + "@storybook/preview-api": "npm:8.1.11" + "@storybook/telemetry": "npm:8.1.11" + "@storybook/types": "npm:8.1.11" "@types/detect-port": "npm:^1.3.0" "@types/diff": "npm:^5.0.9" "@types/node": "npm:^18.0.0" @@ -5410,47 +5401,47 @@ __metadata: util-deprecate: "npm:^1.0.2" watchpack: "npm:^2.2.0" ws: "npm:^8.2.3" - checksum: 10/59713dbc5039747856d123507a1aa0c75d2aca581ce2d63faa5ade3b31be3375c96e86e21e559798b92f4514c163c31da11c23fc7ed91844a99f5ad6c02d45c1 + checksum: 10/b5d8217389000d2e25d5f350bc9f3ccec40a24f35547ebb2f5037704bb1a5d78bfb5832b200ef980c33a23ba0394d1e1f42536deca8d3d86030b28bf1a99997f languageName: node linkType: hard -"@storybook/core-webpack@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/core-webpack@npm:8.1.10" +"@storybook/core-webpack@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/core-webpack@npm:8.1.11" dependencies: - "@storybook/core-common": "npm:8.1.10" - "@storybook/node-logger": "npm:8.1.10" - "@storybook/types": "npm:8.1.10" + "@storybook/core-common": "npm:8.1.11" + "@storybook/node-logger": "npm:8.1.11" + "@storybook/types": "npm:8.1.11" "@types/node": "npm:^18.0.0" ts-dedent: "npm:^2.0.0" - checksum: 10/fecc6e08357021f5d1ccfd734aa52fcf3c0592179b4618c5ec8220b37144f9f574839989e82c1fa78790888913ec4d161fca7a3c1f9ee5bf4eee402bf56a56df + checksum: 10/95b19a133980ee7959e97795fdc4f2cd0aa4ac11602b0f22ffb0b070649eae0bc97a91ed2b326c04774719716e11e78b85641dcf24eb3f6a56f06073d8f8ce07 languageName: node linkType: hard -"@storybook/csf-plugin@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/csf-plugin@npm:8.1.10" +"@storybook/csf-plugin@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/csf-plugin@npm:8.1.11" dependencies: - "@storybook/csf-tools": "npm:8.1.10" + "@storybook/csf-tools": "npm:8.1.11" unplugin: "npm:^1.3.1" - checksum: 10/b2162aae6721a2eb2eb6b7c02ab92c9bc08e75ba29f43175a3483ec17425aff47c909a36c37b54095b44515ba67bb9d5c46d12ef150001091150fec399e4a608 + checksum: 10/cb41f58b57f453ad3d896a98789852e0b9f0aa2b1e0bf10e95794136954a5c9badb044913a15634f562b27a24d35833da5378de2848e7c9f55a6eb487261b13f languageName: node linkType: hard -"@storybook/csf-tools@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/csf-tools@npm:8.1.10" +"@storybook/csf-tools@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/csf-tools@npm:8.1.11" dependencies: "@babel/generator": "npm:^7.24.4" "@babel/parser": "npm:^7.24.4" "@babel/traverse": "npm:^7.24.1" "@babel/types": "npm:^7.24.0" "@storybook/csf": "npm:^0.1.7" - "@storybook/types": "npm:8.1.10" + "@storybook/types": "npm:8.1.11" fs-extra: "npm:^11.1.0" recast: "npm:^0.23.5" ts-dedent: "npm:^2.0.0" - checksum: 10/26a8d82b251d6305a1c88d736674386bdc4ed2ffdd2dd8a73ddcd75677dce1e79c9042c7c12b55335744a2453d4e73cd368e503593d763094519ecef8418f596 + checksum: 10/eb9efa4f2b1ad6bcb6a8f420f3dfbcf9c709c7e5a4b3b08669bfa9e798a0058b4a73ebb50ce82b877c57f051c73a9d7ff63ce1faa054cc5ceb3a01788bf47ef2 languageName: node linkType: hard @@ -5488,19 +5479,19 @@ __metadata: languageName: node linkType: hard -"@storybook/docs-tools@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/docs-tools@npm:8.1.10" +"@storybook/docs-tools@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/docs-tools@npm:8.1.11" dependencies: - "@storybook/core-common": "npm:8.1.10" - "@storybook/core-events": "npm:8.1.10" - "@storybook/preview-api": "npm:8.1.10" - "@storybook/types": "npm:8.1.10" + "@storybook/core-common": "npm:8.1.11" + "@storybook/core-events": "npm:8.1.11" + "@storybook/preview-api": "npm:8.1.11" + "@storybook/types": "npm:8.1.11" "@types/doctrine": "npm:^0.0.3" assert: "npm:^2.1.0" doctrine: "npm:^3.0.0" lodash: "npm:^4.17.21" - checksum: 10/3fa9c0650e3b470409ccbe7e3f79bf4ab109728af398526fbabbb68252ea019493ffd0a72fbf9ee8af19bd276496018b0586234c605f0748e1b230a01c28f60a + checksum: 10/baaba321d380c26918ce479bd4095d58efe63b14f7352c1f2577d535b80137f64d90583d98ccaf73780471c5f9132150a80038d0b16939a685cdf862dbcb462e languageName: node linkType: hard @@ -5521,18 +5512,18 @@ __metadata: languageName: node linkType: hard -"@storybook/instrumenter@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/instrumenter@npm:8.1.10" +"@storybook/instrumenter@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/instrumenter@npm:8.1.11" dependencies: - "@storybook/channels": "npm:8.1.10" - "@storybook/client-logger": "npm:8.1.10" - "@storybook/core-events": "npm:8.1.10" + "@storybook/channels": "npm:8.1.11" + "@storybook/client-logger": "npm:8.1.11" + "@storybook/core-events": "npm:8.1.11" "@storybook/global": "npm:^5.0.0" - "@storybook/preview-api": "npm:8.1.10" + "@storybook/preview-api": "npm:8.1.11" "@vitest/utils": "npm:^1.3.1" util: "npm:^0.12.4" - checksum: 10/5d1618f9d8eb2a176fe5e1dceb9d97c583fb793ccb94d6235d4403232b7ab863619a716ff6a497d0d58967404ddccf4778cabccaac88a29d4f67ae1bb05e1682 + checksum: 10/9363583877a9e5de073d70484d0eebd9e51ca79c4d9d6199cdb85b2b64b046bfabb67348613bc319db6ababe334a4d99b739468a4f79c2a6fa4b8827c4dcac69 languageName: node linkType: hard @@ -5562,33 +5553,33 @@ __metadata: languageName: node linkType: hard -"@storybook/manager-api@npm:8.1.10, @storybook/manager-api@npm:^8.1.10": - version: 8.1.10 - resolution: "@storybook/manager-api@npm:8.1.10" +"@storybook/manager-api@npm:8.1.11, @storybook/manager-api@npm:^8.1.11": + version: 8.1.11 + resolution: "@storybook/manager-api@npm:8.1.11" dependencies: - "@storybook/channels": "npm:8.1.10" - "@storybook/client-logger": "npm:8.1.10" - "@storybook/core-events": "npm:8.1.10" + "@storybook/channels": "npm:8.1.11" + "@storybook/client-logger": "npm:8.1.11" + "@storybook/core-events": "npm:8.1.11" "@storybook/csf": "npm:^0.1.7" "@storybook/global": "npm:^5.0.0" "@storybook/icons": "npm:^1.2.5" - "@storybook/router": "npm:8.1.10" - "@storybook/theming": "npm:8.1.10" - "@storybook/types": "npm:8.1.10" + "@storybook/router": "npm:8.1.11" + "@storybook/theming": "npm:8.1.11" + "@storybook/types": "npm:8.1.11" dequal: "npm:^2.0.2" lodash: "npm:^4.17.21" memoizerific: "npm:^1.11.3" store2: "npm:^2.14.2" telejson: "npm:^7.2.0" ts-dedent: "npm:^2.0.0" - checksum: 10/60ecc60e2796f3e6d529b7b3ff178b8fc3bedb10582ba20924c4613eccf185d95f3a6f1f58773faa52ca0ad4efc6ea4cf31c1a3f8026b529a57bf1eea4d4288a + checksum: 10/aa042e1646182b37c3f14d4805d0a2c9b0120690a9973f63e2fc6c5020e9330e7af2ee67bad3c4abd0d43c2308551a7c0c6dbc845860de33b8b646dda0f45243 languageName: node linkType: hard -"@storybook/manager@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/manager@npm:8.1.10" - checksum: 10/e8b08c41a3191c6964e45fbc46bf96db1af1d5e46ad3e77e17024c447ff321fbff317416a3d3c14f2871e2b466f1555d0060314c54b803a1ded511f1734e6b79 +"@storybook/manager@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/manager@npm:8.1.11" + checksum: 10/30630fe27f8e88592d3d13474862b4e722e86ddb216eb1cc36d824bb9990156f971f99c1eef4de911086f210ec3e847a99b13ac75c6703cd5cebbe27ef449c8d languageName: node linkType: hard @@ -5599,21 +5590,21 @@ __metadata: languageName: node linkType: hard -"@storybook/node-logger@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/node-logger@npm:8.1.10" - checksum: 10/47321d0c24420c5f3e6938d7a8d69a9080ba0960bd9deb163d088aac81a308abf15dd9ee1ff0c70f5a8a5b304acf417f46bbc18c86c172ab4983eb1404b47ae0 +"@storybook/node-logger@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/node-logger@npm:8.1.11" + checksum: 10/9f96c30cacae8c138f5f17f11e243a3d506faad606e4146e57a5cafdfbcb0d1f3397d6f17c36b2422db4e927451cf9c6de785cc6f81e078b729f7b906af39650 languageName: node linkType: hard -"@storybook/preset-react-webpack@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/preset-react-webpack@npm:8.1.10" +"@storybook/preset-react-webpack@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/preset-react-webpack@npm:8.1.11" dependencies: - "@storybook/core-webpack": "npm:8.1.10" - "@storybook/docs-tools": "npm:8.1.10" - "@storybook/node-logger": "npm:8.1.10" - "@storybook/react": "npm:8.1.10" + "@storybook/core-webpack": "npm:8.1.11" + "@storybook/docs-tools": "npm:8.1.11" + "@storybook/node-logger": "npm:8.1.11" + "@storybook/react": "npm:8.1.11" "@storybook/react-docgen-typescript-plugin": "npm:1.0.6--canary.9.0c3f3b7.0" "@types/node": "npm:^18.0.0" "@types/semver": "npm:^7.3.4" @@ -5631,20 +5622,20 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/9215ff0f74d1c2114d0f1560b1e37be65045c230733b072c21f12730e453e84a5b5440c26311a7644d301ca69b8c8316b3903bc02b185d7fbac9e26287427d6f + checksum: 10/399c84c003bc60a917ebb6cd9aa6ef7f64143f71d845c66bc89383247b1ef684ae8773eb35519353782a687dbae4299e79e952ddc3195c0c13c449dfcd5ba7ce languageName: node linkType: hard -"@storybook/preview-api@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/preview-api@npm:8.1.10" +"@storybook/preview-api@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/preview-api@npm:8.1.11" dependencies: - "@storybook/channels": "npm:8.1.10" - "@storybook/client-logger": "npm:8.1.10" - "@storybook/core-events": "npm:8.1.10" + "@storybook/channels": "npm:8.1.11" + "@storybook/client-logger": "npm:8.1.11" + "@storybook/core-events": "npm:8.1.11" "@storybook/csf": "npm:^0.1.7" "@storybook/global": "npm:^5.0.0" - "@storybook/types": "npm:8.1.10" + "@storybook/types": "npm:8.1.11" "@types/qs": "npm:^6.9.5" dequal: "npm:^2.0.2" lodash: "npm:^4.17.21" @@ -5653,7 +5644,7 @@ __metadata: tiny-invariant: "npm:^1.3.1" ts-dedent: "npm:^2.0.0" util-deprecate: "npm:^1.0.2" - checksum: 10/37f8512fa208181cac4b9a59475ec5687b61b5ce78053c62bfba42074ff2b3fc75b15e81a56d5b0f15b85229baec0c8c699926ce4c27c629a436d66f5cb8fd0f + checksum: 10/228fc11266d4e33e4da2964b301d3d6f6ab40b7488d8e5dfcf556f7f5eb5db9270ddc1e4794995e3e4c30acf5ff91344c28306e648cfea7a6b22ca930ebc5826 languageName: node linkType: hard @@ -5679,10 +5670,10 @@ __metadata: languageName: node linkType: hard -"@storybook/preview@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/preview@npm:8.1.10" - checksum: 10/2491b17c55a7db88bf2ffbb52c8336920032d1f1855873b0342a4dbcecd51f8b7af66d80d6dac8a56424cc142dd68746a2d273b8e0353ca61b79520ce07751c7 +"@storybook/preview@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/preview@npm:8.1.11" + checksum: 10/e47d65f283fe1ba4a5e92add77f8c27a9c049e3283f1a4248ec34952bcd7ea9883437131bbc5b2e7c86ae5075039136067565680743c719198107ffa8688ba3f languageName: node linkType: hard @@ -5704,24 +5695,24 @@ __metadata: languageName: node linkType: hard -"@storybook/react-dom-shim@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/react-dom-shim@npm:8.1.10" +"@storybook/react-dom-shim@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/react-dom-shim@npm:8.1.11" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - checksum: 10/8b853ebf66071b955641aba5bf87df2cf343a78c3c21475e1bd89c9a3dc02f2ff71db0016e72ca2619821e0f78e2ac60910fac75eb1fd1108c8b400d64e7356c + checksum: 10/dc4724f361c13d2d9d9056caa5cd564b88cfea010e055d1a7359f1e38440715fc523e94b45e9d2f79400ef955427b61eeb08b29810c13aef866e0da169eb5ba0 languageName: node linkType: hard -"@storybook/react-webpack5@npm:^8.1.10": - version: 8.1.10 - resolution: "@storybook/react-webpack5@npm:8.1.10" +"@storybook/react-webpack5@npm:^8.1.11": + version: 8.1.11 + resolution: "@storybook/react-webpack5@npm:8.1.11" dependencies: - "@storybook/builder-webpack5": "npm:8.1.10" - "@storybook/preset-react-webpack": "npm:8.1.10" - "@storybook/react": "npm:8.1.10" - "@storybook/types": "npm:8.1.10" + "@storybook/builder-webpack5": "npm:8.1.11" + "@storybook/preset-react-webpack": "npm:8.1.11" + "@storybook/react": "npm:8.1.11" + "@storybook/types": "npm:8.1.11" "@types/node": "npm:^18.0.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta @@ -5730,20 +5721,20 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/9acb18643f3ed9fbae3e7454f666ab68cce9e13721e292c6b0d80f98bd49b0048db1722a1f4572c3c876f72c46f652b48471ac5f84f584207ca2b11230a64db8 + checksum: 10/ba3707f802383ab8885901d040df8e457288838c1846c488facd412fcd1819ec4cd87371925d0d4cc3c69188f1d98c340159190bc9b960e92803c3d0d6742326 languageName: node linkType: hard -"@storybook/react@npm:8.1.10, @storybook/react@npm:^8.1.10": - version: 8.1.10 - resolution: "@storybook/react@npm:8.1.10" +"@storybook/react@npm:8.1.11, @storybook/react@npm:^8.1.11": + version: 8.1.11 + resolution: "@storybook/react@npm:8.1.11" dependencies: - "@storybook/client-logger": "npm:8.1.10" - "@storybook/docs-tools": "npm:8.1.10" + "@storybook/client-logger": "npm:8.1.11" + "@storybook/docs-tools": "npm:8.1.11" "@storybook/global": "npm:^5.0.0" - "@storybook/preview-api": "npm:8.1.10" - "@storybook/react-dom-shim": "npm:8.1.10" - "@storybook/types": "npm:8.1.10" + "@storybook/preview-api": "npm:8.1.11" + "@storybook/react-dom-shim": "npm:8.1.11" + "@storybook/types": "npm:8.1.11" "@types/escodegen": "npm:^0.0.6" "@types/estree": "npm:^0.0.51" "@types/node": "npm:^18.0.0" @@ -5766,7 +5757,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/4ca7db2fa1d6caf74c7153c1c7a196541d0fb68c595d4d350c5da32cc05432d95c766041bcdfd17b0759a0c055fc1e8d651927dc366c223512724df4cc0554fb + checksum: 10/c38c105a8f4b37d3a9f054826186e2523dff65ee213ee0344800abd8f50468bfa68a302ef047113da3d74f58f3e03f676a0456f970fe9a29c9629210d226ef0d languageName: node linkType: hard @@ -5784,48 +5775,48 @@ __metadata: languageName: node linkType: hard -"@storybook/router@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/router@npm:8.1.10" +"@storybook/router@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/router@npm:8.1.11" dependencies: - "@storybook/client-logger": "npm:8.1.10" + "@storybook/client-logger": "npm:8.1.11" memoizerific: "npm:^1.11.3" qs: "npm:^6.10.0" - checksum: 10/c7f28daccf077b9692a34b15e91837e30face2ddbf7c2255da26fc0ef2f40ff9c63a2b6b81eebe50616a222967502e00dcea0689970fb9b1b266e02ba8311ba7 + checksum: 10/f4ee8fbf67dfca302a00ad7a511ff4682aee25fc37b5d7c8aed9277a454221f1409175dcf422a432461af1e2eaf7c08d0eb930e4e17724f8a28d217e6e1e256f languageName: node linkType: hard -"@storybook/telemetry@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/telemetry@npm:8.1.10" +"@storybook/telemetry@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/telemetry@npm:8.1.11" dependencies: - "@storybook/client-logger": "npm:8.1.10" - "@storybook/core-common": "npm:8.1.10" - "@storybook/csf-tools": "npm:8.1.10" + "@storybook/client-logger": "npm:8.1.11" + "@storybook/core-common": "npm:8.1.11" + "@storybook/csf-tools": "npm:8.1.11" chalk: "npm:^4.1.0" detect-package-manager: "npm:^2.0.1" fetch-retry: "npm:^5.0.2" fs-extra: "npm:^11.1.0" read-pkg-up: "npm:^7.0.1" - checksum: 10/ab9aa3c4a992236781b2c18f2df37ec60441132a9800c98a2e0139231c19c4672be8d21ce2e07de00eb4360d119fdc45c6c7e416f08e6d79b4bf22d21edfefb3 + checksum: 10/221479581dae762955d8680f0907e8ef07f80f7cef55d9af4747f1a52e8b32e8c603c4b21671aa80c5994c3dddeae06543aaf8ae0586af416b05da3729a5b3b7 languageName: node linkType: hard -"@storybook/test@npm:8.1.10, @storybook/test@npm:^8.1.10": - version: 8.1.10 - resolution: "@storybook/test@npm:8.1.10" +"@storybook/test@npm:8.1.11, @storybook/test@npm:^8.1.11": + version: 8.1.11 + resolution: "@storybook/test@npm:8.1.11" dependencies: - "@storybook/client-logger": "npm:8.1.10" - "@storybook/core-events": "npm:8.1.10" - "@storybook/instrumenter": "npm:8.1.10" - "@storybook/preview-api": "npm:8.1.10" - "@testing-library/dom": "npm:^9.3.4" - "@testing-library/jest-dom": "npm:^6.4.2" - "@testing-library/user-event": "npm:^14.5.2" - "@vitest/expect": "npm:1.3.1" - "@vitest/spy": "npm:^1.3.1" + "@storybook/client-logger": "npm:8.1.11" + "@storybook/core-events": "npm:8.1.11" + "@storybook/instrumenter": "npm:8.1.11" + "@storybook/preview-api": "npm:8.1.11" + "@testing-library/dom": "npm:10.1.0" + "@testing-library/jest-dom": "npm:6.4.5" + "@testing-library/user-event": "npm:14.5.2" + "@vitest/expect": "npm:1.6.0" + "@vitest/spy": "npm:1.6.0" util: "npm:^0.12.4" - checksum: 10/1ff83ca9431f38e8e6594c0d3600c99612fbb74478ea4e4e0cd6274d191683344c3905d9d25b6c3d9a96777153849fa85feebfe06b0bf01edfbff751649829d6 + checksum: 10/630a7189593bd81ee51b426021bcb95b17ceaa888872779c6ec5793f51b3fbe7080bdac5e69c18f7d3d4343c28f00b47cab5196a0cd0a21d93497a5e2bff9def languageName: node linkType: hard @@ -5855,12 +5846,12 @@ __metadata: languageName: node linkType: hard -"@storybook/theming@npm:8.1.10, @storybook/theming@npm:^8.1.10": - version: 8.1.10 - resolution: "@storybook/theming@npm:8.1.10" +"@storybook/theming@npm:8.1.11, @storybook/theming@npm:^8.1.11": + version: 8.1.11 + resolution: "@storybook/theming@npm:8.1.11" dependencies: "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.0.1" - "@storybook/client-logger": "npm:8.1.10" + "@storybook/client-logger": "npm:8.1.11" "@storybook/global": "npm:^5.0.0" memoizerific: "npm:^1.11.3" peerDependencies: @@ -5871,7 +5862,7 @@ __metadata: optional: true react-dom: optional: true - checksum: 10/009267495e497ee082c30aad85650a7735f6dcc6631e9d305c32c25251204ec3786251f665d034ff745c7add9bb341e79118df7c8cbac33dbd2f4d1ed8f5ee7f + checksum: 10/5b0f5e6c64dfeed37e136901f65b0bbdda64549ac04ea07cb10e0dbd1c7f4df257e0e807404a133ad61b8525223809f1d9ec3abff2361ca8fdcfee55cd92e6e2 languageName: node linkType: hard @@ -5887,14 +5878,14 @@ __metadata: languageName: node linkType: hard -"@storybook/types@npm:8.1.10": - version: 8.1.10 - resolution: "@storybook/types@npm:8.1.10" +"@storybook/types@npm:8.1.11": + version: 8.1.11 + resolution: "@storybook/types@npm:8.1.11" dependencies: - "@storybook/channels": "npm:8.1.10" + "@storybook/channels": "npm:8.1.11" "@types/express": "npm:^4.7.0" file-system-cache: "npm:2.3.0" - checksum: 10/98de62ae9759b4a5b47fd64217fba4335d5e9586c362b530c6fa31328b114ea4664d4632d22d57b99410708ecfc72344ffb67e11f2c3e28d6a4edd4cc97a57d0 + checksum: 10/80e2ba60cee54f4471025b9a986df78e12b6f6096769e6a2224549f2008235c2079965a71c9af05be26eafb8ddfaba8431ffcf4b8e39b229c08fb2d48670d851 languageName: node linkType: hard @@ -5926,7 +5917,23 @@ __metadata: languageName: node linkType: hard -"@testing-library/dom@npm:^9.0.0, @testing-library/dom@npm:^9.3.4": +"@testing-library/dom@npm:10.1.0": + version: 10.1.0 + resolution: "@testing-library/dom@npm:10.1.0" + dependencies: + "@babel/code-frame": "npm:^7.10.4" + "@babel/runtime": "npm:^7.12.5" + "@types/aria-query": "npm:^5.0.1" + aria-query: "npm:5.3.0" + chalk: "npm:^4.1.0" + dom-accessibility-api: "npm:^0.5.9" + lz-string: "npm:^1.5.0" + pretty-format: "npm:^27.0.2" + checksum: 10/6d6ef942deedf547180c76d4cc2c43fe8e52a98ef68be6ba7382a43d3b1e1e5696d9c32ae0b2df12c92ea50023187d132ad2542fc118ba4b900f149e97d019e0 + languageName: node + linkType: hard + +"@testing-library/dom@npm:^9.0.0": version: 9.3.4 resolution: "@testing-library/dom@npm:9.3.4" dependencies: @@ -5942,7 +5949,40 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:^6.4.2, @testing-library/jest-dom@npm:^6.4.6": +"@testing-library/jest-dom@npm:6.4.5": + version: 6.4.5 + resolution: "@testing-library/jest-dom@npm:6.4.5" + dependencies: + "@adobe/css-tools": "npm:^4.3.2" + "@babel/runtime": "npm:^7.9.2" + aria-query: "npm:^5.0.0" + chalk: "npm:^3.0.0" + css.escape: "npm:^1.5.1" + dom-accessibility-api: "npm:^0.6.3" + lodash: "npm:^4.17.21" + redent: "npm:^3.0.0" + peerDependencies: + "@jest/globals": ">= 28" + "@types/bun": "*" + "@types/jest": ">= 28" + jest: ">= 28" + vitest: ">= 0.32" + peerDependenciesMeta: + "@jest/globals": + optional: true + "@types/bun": + optional: true + "@types/jest": + optional: true + jest: + optional: true + vitest: + optional: true + checksum: 10/6d9e6cc01ec9111ea631657d93596fa9505d294fdfc4172fbd750b8df6268f02d55900626423b195dac5b067a302557453894a5814bdf4e770dee37cdb1c0f2d + languageName: node + linkType: hard + +"@testing-library/jest-dom@npm:^6.4.6": version: 6.4.6 resolution: "@testing-library/jest-dom@npm:6.4.6" dependencies: @@ -5995,7 +6035,7 @@ __metadata: languageName: node linkType: hard -"@testing-library/user-event@npm:^14.4.0, @testing-library/user-event@npm:^14.5.2": +"@testing-library/user-event@npm:14.5.2, @testing-library/user-event@npm:^14.4.0, @testing-library/user-event@npm:^14.5.2": version: 14.5.2 resolution: "@testing-library/user-event@npm:14.5.2" peerDependencies: @@ -6415,10 +6455,10 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:^4.17.5": - version: 4.17.5 - resolution: "@types/lodash@npm:4.17.5" - checksum: 10/10e2e9cbeb16998026f4071f9f5f2a38b651eba15302f512e0b8ab904c07c197ca0282d2821f64e53c2b692d7046af0a1ce3ead190fb077cbe4036948fce1924 +"@types/lodash@npm:^4.17.6": + version: 4.17.6 + resolution: "@types/lodash@npm:4.17.6" + checksum: 10/6d3a68b3e795381f4aaf946855134d24eeb348ad5d66e9a44461d30026da82b215d55b92b70486d811ca45d54d4ab956aa2dced37fd04e19d49afe160ae3da2e languageName: node linkType: hard @@ -6494,12 +6534,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^20.14.7": - version: 20.14.8 - resolution: "@types/node@npm:20.14.8" +"@types/node@npm:^20.14.9": + version: 20.14.10 + resolution: "@types/node@npm:20.14.10" dependencies: undici-types: "npm:~5.26.4" - checksum: 10/73822f66f269ce865df7e2f586787ac7444bd1169fd265cbed1e851b72787f1170517c5b616e0308ec2fbc0934ec6403b0f28d4152acbb0486071aec41167d51 + checksum: 10/672892cf94d0d95cf052f11271990686a0fd204cd1e5fe7a4ef240e5315e06711765dc47b9ec98627d3adac18b8c92bb7e2d8db21d18faa20bc3e3203a143e79 languageName: node linkType: hard @@ -6860,27 +6900,18 @@ __metadata: languageName: node linkType: hard -"@vitest/expect@npm:1.3.1": - version: 1.3.1 - resolution: "@vitest/expect@npm:1.3.1" +"@vitest/expect@npm:1.6.0": + version: 1.6.0 + resolution: "@vitest/expect@npm:1.6.0" dependencies: - "@vitest/spy": "npm:1.3.1" - "@vitest/utils": "npm:1.3.1" + "@vitest/spy": "npm:1.6.0" + "@vitest/utils": "npm:1.6.0" chai: "npm:^4.3.10" - checksum: 10/7c2818b2080ec107cffcc1566195132695c8e87cba883e878c2f36ac4d8107bb0a1f8d3823ccc0da5989e245ea114b8afffe790512aebcde8537ac8c1bcf3454 - languageName: node - linkType: hard - -"@vitest/spy@npm:1.3.1": - version: 1.3.1 - resolution: "@vitest/spy@npm:1.3.1" - dependencies: - tinyspy: "npm:^2.2.0" - checksum: 10/544c8a30fdeb32fb7bf2c2b5816519be943f5ef90668c306b14efdde7676771d0e83cf0e0a5c79fad722be3839432226bcf74173110a032299821e00b67f47e6 + checksum: 10/e82304a12e22b98c1ccea81e8f33c838561deb878588eac463164cc4f8fc0c401ace3a9e6758d9e3a6bcc01313e845e8478aaefb7548eaded04b8de12c1928f6 languageName: node linkType: hard -"@vitest/spy@npm:^1.3.1": +"@vitest/spy@npm:1.6.0": version: 1.6.0 resolution: "@vitest/spy@npm:1.6.0" dependencies: @@ -6889,19 +6920,7 @@ __metadata: languageName: node linkType: hard -"@vitest/utils@npm:1.3.1": - version: 1.3.1 - resolution: "@vitest/utils@npm:1.3.1" - dependencies: - diff-sequences: "npm:^29.6.3" - estree-walker: "npm:^3.0.3" - loupe: "npm:^2.3.7" - pretty-format: "npm:^29.7.0" - checksum: 10/170c62e6c348562f611d8caddc893e8cba75ed89986e09aa2f0fe6812c96664e8d0f6e329f7a96a4c9cdecf147f4853e4054c3db597b111ec993d3cdd546eddc - languageName: node - linkType: hard - -"@vitest/utils@npm:^1.3.1": +"@vitest/utils@npm:1.6.0, @vitest/utils@npm:^1.3.1": version: 1.6.0 resolution: "@vitest/utils@npm:1.6.0" dependencies: @@ -7505,7 +7524,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.0.0, aria-query@npm:^5.3.0": +"aria-query@npm:5.3.0, aria-query@npm:^5.0.0, aria-query@npm:^5.3.0": version: 5.3.0 resolution: "aria-query@npm:5.3.0" dependencies: @@ -13209,7 +13228,7 @@ __metadata: languageName: node linkType: hard -"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1, is-docker@npm:^2.2.1": version: 2.2.1 resolution: "is-docker@npm:2.2.1" bin: @@ -17143,6 +17162,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.0.1": + version: 1.0.1 + resolution: "picocolors@npm:1.0.1" + checksum: 10/fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.0, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -17847,14 +17873,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.38": - version: 8.4.38 - resolution: "postcss@npm:8.4.38" +"postcss@npm:^8.4.39": + version: 8.4.39 + resolution: "postcss@npm:8.4.39" dependencies: nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.0" + picocolors: "npm:^1.0.1" source-map-js: "npm:^1.2.0" - checksum: 10/6e44a7ed835ffa9a2b096e8d3e5dfc6bcf331a25c48aeb862dd54e3aaecadf814fa22be224fd308f87d08adf2299164f88c5fd5ab1c4ef6cbd693ceb295377f4 + checksum: 10/ad9c1add892c96433b9a5502878201ede4a20c4ce02d056251f61f8d9a3e5426dab3683fe5a086edfa78a1a19f2b4988c8cea02c5122136d29758cb5a17e2621 languageName: node linkType: hard @@ -20010,15 +20036,15 @@ __metadata: languageName: node linkType: hard -"storybook@npm:^8.1.10": - version: 8.1.10 - resolution: "storybook@npm:8.1.10" +"storybook@npm:^8.1.11": + version: 8.1.11 + resolution: "storybook@npm:8.1.11" dependencies: - "@storybook/cli": "npm:8.1.10" + "@storybook/cli": "npm:8.1.11" bin: sb: ./index.js storybook: ./index.js - checksum: 10/c568bd07d124f7232c328dea14ea908c77398f2543b93cd1bb508c95331a0d9355b27b8d067218c63a5aed59a4bfd008f3c279ec0cca7c68903c5c1870418327 + checksum: 10/b3fdf0bd980759a347bb19e34f06a954f09250bbde2ae6411d77b3154973f177d231e1a870a8111dae67886e4eb2ca4c9b763356510f07574d7ad378c5de6e82 languageName: node linkType: hard From 661130b6917d3f80831863f6e3e447a35b048795 Mon Sep 17 00:00:00 2001 From: Andrew Holloway Date: Mon, 8 Jul 2024 11:45:54 -0500 Subject: [PATCH 03/13] feat: add runtime warning/errors to components (#2007) - add utility function for doing the logging - use in various components (Link, Button, util.s) - fix violations in EDS identified by these checks - add additional tests * chore: address PR comments --- .../AppNotification/AppNotification.tsx | 4 +- src/components/Button/Button.test.tsx | 40 ++++++++++++++++ src/components/Button/Button.tsx | 15 ++++++ src/components/Link/Link.test.tsx | 47 +++++++++++++++++++ src/components/Link/Link.tsx | 16 +++++++ src/components/Modal/Modal.tsx | 4 +- .../PageNotification/PageNotification.tsx | 4 +- src/components/Slider/Slider.stories.tsx | 4 +- .../ToastNotification/ToastNotification.tsx | 4 +- src/util/findLowestTenMultiplier.ts | 14 +++--- src/util/logging.ts | 22 +++++++++ 11 files changed, 154 insertions(+), 20 deletions(-) create mode 100644 src/util/logging.ts diff --git a/src/components/AppNotification/AppNotification.tsx b/src/components/AppNotification/AppNotification.tsx index cfbc51693..b8ef688d5 100644 --- a/src/components/AppNotification/AppNotification.tsx +++ b/src/components/AppNotification/AppNotification.tsx @@ -84,9 +84,7 @@ export const AppNotification = ({ onClick={onDismiss} rank="tertiary" variant={color === 'dark' ? 'inverse' : 'neutral'} - > - Close - + > )}
diff --git a/src/components/Button/Button.test.tsx b/src/components/Button/Button.test.tsx index 8516dd340..bee889a9f 100644 --- a/src/components/Button/Button.test.tsx +++ b/src/components/Button/Button.test.tsx @@ -7,6 +7,18 @@ import * as stories from './Button.stories'; import type { StoryFile } from '../../util/utility-types'; describe('); + + expect(consoleWarnMock).toHaveBeenCalledTimes(0); + expect(consoleErrorMock).toHaveBeenCalledTimes(1); + }); + + it('warns when icon-only Button instances contain children', () => { + render( + , + ); + + expect(consoleWarnMock).toHaveBeenCalledTimes(1); + expect(consoleErrorMock).toHaveBeenCalledTimes(0); + }); + }); }); diff --git a/src/components/Button/Button.tsx b/src/components/Button/Button.tsx index 255c29d2f..645840905 100644 --- a/src/components/Button/Button.tsx +++ b/src/components/Button/Button.tsx @@ -1,5 +1,6 @@ import clsx from 'clsx'; import React, { forwardRef } from 'react'; +import { assertEdsUsage } from '../../util/logging'; import type { Size } from '../../util/variant-types'; import Icon, { type IconName } from '../Icon'; import LoadingIndicator from '../LoadingIndicator'; @@ -132,6 +133,20 @@ export const Button = forwardRef( isLoading && styles['button--is-loading'], ); + assertEdsUsage( + [ + typeof isDisabled === 'undefined' && + typeof other.disabled !== 'undefined', + ], + 'Use "isDisabled" instead of "disabled" on button instances', + 'error', + ); + + assertEdsUsage( + [iconLayout === 'icon-only' && typeof children !== 'undefined'], + 'Specifying content for "children" when using icon-only layout is not required and can be removed.', + ); + return ( ', () => { + beforeEach(() => { + const consoleMock = jest.spyOn(console, 'warn'); + consoleMock.mockImplementation(); + }); + + afterEach(() => { + jest.resetAllMocks(); + }); + generateSnapshots(stories as StoryFile); it('renders the text in the link', () => { @@ -63,4 +72,42 @@ describe('', () => { const link = screen.getByRole('link'); expect(link).toHaveFocus(); }); + + describe('emits warnings when misused', () => { + it('warns when inline links are using emphasis=low', () => { + const consoleMock = jest.spyOn(console, 'warn'); + consoleMock.mockImplementation(); + render( + + Click + , + ); + + expect(consoleMock).toHaveBeenCalledTimes(1); + }); + + it('warns when inline links have icons specified', () => { + const consoleMock = jest.spyOn(console, 'warn'); + consoleMock.mockImplementation(); + render( + + Click + , + ); + + expect(consoleMock).toHaveBeenCalledTimes(1); + }); + + it('warns when chevron-right is not used in low emphasis mode', () => { + const consoleMock = jest.spyOn(console, 'warn'); + consoleMock.mockImplementation(); + render( + + Click + , + ); + + expect(consoleMock).toHaveBeenCalledTimes(1); + }); + }); }); diff --git a/src/components/Link/Link.tsx b/src/components/Link/Link.tsx index 55fbba83b..e261e1f25 100644 --- a/src/components/Link/Link.tsx +++ b/src/components/Link/Link.tsx @@ -1,5 +1,6 @@ import clsx from 'clsx'; import React, { forwardRef } from 'react'; +import { assertEdsUsage } from '../../util/logging'; import type { Size } from '../../util/variant-types'; import Icon, { type IconName } from '../Icon'; @@ -83,6 +84,21 @@ export const Link = forwardRef( const iconSize = size && (['xl', 'lg'].includes(size) ? '1.5rem' : '1rem'); + assertEdsUsage( + [context === 'inline' && emphasis === 'low'], + 'Inline links cannot be lowEmphasis', + ); + + assertEdsUsage( + [context === 'inline' && !!icon], + 'Inline links cannot show icons', + ); + + assertEdsUsage( + [icon === 'chevron-right' && emphasis !== 'low'], + 'Icon "chevron-right" only allowed when lowEmphasis is used', + ); + return ( {children} diff --git a/src/components/Modal/Modal.tsx b/src/components/Modal/Modal.tsx index c7a4ba4ff..87ee5fb67 100644 --- a/src/components/Modal/Modal.tsx +++ b/src/components/Modal/Modal.tsx @@ -253,9 +253,7 @@ export const ModalContent = (props: ModalContentProps) => { onClick={onClose} rank="tertiary" variant="neutral" - > - Close - + > )} {children} diff --git a/src/components/PageNotification/PageNotification.tsx b/src/components/PageNotification/PageNotification.tsx index 3d75aa364..a9090f09c 100644 --- a/src/components/PageNotification/PageNotification.tsx +++ b/src/components/PageNotification/PageNotification.tsx @@ -114,9 +114,7 @@ export const PageNotification = ({ rank="tertiary" size="lg" variant="neutral" - > - Close - + > )} ); diff --git a/src/components/Slider/Slider.stories.tsx b/src/components/Slider/Slider.stories.tsx index 472a4c868..c8c43b57a 100644 --- a/src/components/Slider/Slider.stories.tsx +++ b/src/components/Slider/Slider.stories.tsx @@ -198,7 +198,7 @@ export const UsingControlButtons: Story = {
+ > )}
); diff --git a/src/util/findLowestTenMultiplier.ts b/src/util/findLowestTenMultiplier.ts index f9f08c388..8ed94e1ce 100644 --- a/src/util/findLowestTenMultiplier.ts +++ b/src/util/findLowestTenMultiplier.ts @@ -1,3 +1,5 @@ +import { assertEdsUsage } from './logging'; + /** * Returns the lowest multiple of 10 that multiplies with all numbers in a list to make them integers. * Useful for floating point math. @@ -8,12 +10,12 @@ * @returns {number} Lowest multiple of 10. */ export function findLowestTenMultiplier(numbers: number[]): number { - if ( - process.env.NODE_ENV !== 'production' && - numbers.some((number) => !Number.isFinite(number)) - ) { - throw 'Number should be a real finite number'; - } + assertEdsUsage( + [numbers.some((number) => !Number.isFinite(number))], + 'Number should be a real finite number', + 'error', + ); + let multiplier = 1; while ( numbers.some((number) => !Number.isInteger((number * multiplier) % 1)) diff --git a/src/util/logging.ts b/src/util/logging.ts new file mode 100644 index 000000000..1f05aacfd --- /dev/null +++ b/src/util/logging.ts @@ -0,0 +1,22 @@ +import identity from 'lodash/identity'; + +type Check = boolean; +type LogLevel = 'warn' | 'error'; + +/** + * Logging function used to check whether a usage of EDS is proper and advised. When using, it defaults + * to warning, where it will print a message to the console for developers to see. LogLevel supported. + * + * @param checks set of boolean checks to assert whether the component usages are compatible + * @param message Message to print when the component is not being used as advised + * @param [loglevel] Severity of the tracked issue + */ +export function assertEdsUsage( + checks: Check[], + message: string, + loglevel: LogLevel = 'warn', +): void { + if (process.env.NODE_ENV !== 'production' && [...checks].some(identity)) { + console[loglevel](message); + } +} From 421c91b41d2691441f94bd71801bbfdeca529d5f Mon Sep 17 00:00:00 2001 From: Andrew Holloway Date: Tue, 9 Jul 2024 11:04:42 -0500 Subject: [PATCH 04/13] fix(Select): expose generic types to allow by to pass type checks (#2008) - borrow type value determination from HeadlessUI internals - add test to make sure types used map to params - chore: address PR suggestion --- src/components/Select/Select.stories.tsx | 14 ++ src/components/Select/Select.tsx | 12 +- .../Select/__snapshots__/Select.test.tsx.snap | 134 ++++++++++++------ 3 files changed, 115 insertions(+), 45 deletions(-) diff --git a/src/components/Select/Select.stories.tsx b/src/components/Select/Select.stories.tsx index af7fc400c..b53253244 100644 --- a/src/components/Select/Select.stories.tsx +++ b/src/components/Select/Select.stories.tsx @@ -305,6 +305,20 @@ export const WithSelectedOption: StoryObj = { }, }; +/** + * Use the `by` option to determine the selection (when using objects for the value list). This helps when you want to compare by value, not reference. + * - The type comparison can be by a named key in the object `by={'id'}` or using a comparison function + * + * See: https://headlessui.com/v1/react/listbox#listbox + */ +export const WithSelectedBy: StoryObj = { + args: { + ...WithSelectedOption.args, + defaultValue: { ...exampleOptions[1] }, + by: 'key', + }, +}; + /** * You can add a `name` prop to generate form fields for the value object. * diff --git a/src/components/Select/Select.tsx b/src/components/Select/Select.tsx index 0cbf871cb..873efc726 100644 --- a/src/components/Select/Select.tsx +++ b/src/components/Select/Select.tsx @@ -1,4 +1,4 @@ -import { Listbox } from '@headlessui/react'; +import { Listbox, type ListboxProps } from '@headlessui/react'; import clsx from 'clsx'; import React, { @@ -6,6 +6,7 @@ import React, { useState, type ReactNode, type MouseEventHandler, + type ElementType, } from 'react'; import { createPortal } from 'react-dom'; import { usePopper } from 'react-popper'; @@ -25,7 +26,12 @@ import Text from '../Text'; import styles from './Select.module.css'; -type SelectProps = ExtractProps & +// https://github.com/tailwindlabs/headlessui/blob/%40headlessui/react%40v1.7.19/packages/%40headlessui-react/src/components/listbox/listbox.tsx#L349 +type SelectProps = ListboxProps< + ElementType, + string | { [k: string]: unknown }, + { [k: string]: unknown } +> & PopoverOptions & { // Component API /** @@ -235,7 +241,7 @@ export function Select({ labelLayout && styles[`select--label-layout-${labelLayout}`], className, ); - const sharedProps = { + const sharedProps: SelectProps = { className: componentClassName, // Provide a wrapping
element for the select. This is needed so that any props // passed directly to this component have a corresponding DOM element to receive them. diff --git a/src/components/Select/__snapshots__/Select.test.tsx.snap b/src/components/Select/__snapshots__/Select.test.tsx.snap index ca6729601..fd35d16f8 100644 --- a/src/components/Select/__snapshots__/Select.test.tsx.snap +++ b/src/components/Select/__snapshots__/Select.test.tsx.snap @@ -12,19 +12,19 @@ exports[` Generated Snapshots Error story renders snapshot 1`] = `
+ + + + +`; + +exports[`Modal LargeAuto story renders snapshot 1`] = ` + +`; + +exports[`Modal LargeMax story renders snapshot 1`] = ` +