From 162cae130dabd4c9967165331d46c3fe36512a84 Mon Sep 17 00:00:00 2001 From: Artur Lang <209750178+artur-langl@users.noreply.github.com> Date: Fri, 26 Sep 2025 17:06:21 +0300 Subject: [PATCH 01/24] feat(file-dropzone): add toggle for SI and IEC standards of showing filesize fix filesize #860 --- .../form/file-dropzone/constants.ts | 20 +++++++ .../file-dropzone.component.html | 2 + .../file-dropzone/file-dropzone.component.ts | 55 ++++++++++--------- .../file-dropzone/file-dropzone.stories.ts | 20 +++++-- .../form/file-dropzone/file.service.ts | 20 ++++--- .../components/form/file-dropzone/types.ts | 3 + .../components/form/file-dropzone/utils.ts | 50 +++++++++++++---- 7 files changed, 118 insertions(+), 52 deletions(-) create mode 100644 libs/angular-components/community/components/form/file-dropzone/constants.ts diff --git a/libs/angular-components/community/components/form/file-dropzone/constants.ts b/libs/angular-components/community/components/form/file-dropzone/constants.ts new file mode 100644 index 000000000..cc7709a90 --- /dev/null +++ b/libs/angular-components/community/components/form/file-dropzone/constants.ts @@ -0,0 +1,20 @@ +const IECkiloBytes = 1024; +const SIkiloBytes = 1000; + +const IECMegabytes = IECkiloBytes * IECkiloBytes; +const SIMegabytes = SIkiloBytes * SIkiloBytes; + +export enum SIFileSize { + kB = SIkiloBytes, + MB = SIMegabytes, +} + +export enum IECFileSize { + kB = IECkiloBytes, + MB = IECMegabytes, +} + +export const FileSizeStandards = { + SI: SIFileSize, + IEC: IECFileSize, +}; diff --git a/libs/angular-components/community/components/form/file-dropzone/file-dropzone.component.html b/libs/angular-components/community/components/form/file-dropzone/file-dropzone.component.html index 6107debb8..e34278a21 100644 --- a/libs/angular-components/community/components/form/file-dropzone/file-dropzone.component.html +++ b/libs/angular-components/community/components/form/file-dropzone/file-dropzone.component.html @@ -2,12 +2,14 @@ #fileInput class="tedi-file-dropzone__input" type="file" + [disabled]="disabled()" [multiple]="multiple()" [id]="inputId()" [attr.webkitdirectory]="uploadFolder() ? '' : null" [accept]="accept()" (change)="selectionChange($event)" /> + + + + II sambaga uuesti liitumise võimalus + + + Vanaduspensioniiga + + + `, + }), +}; + +export const TitleOnly: Story = { + args: { + activeIndex: 1, + }, + render: (args) => ({ + props: args, + template: ` + + + Taotluse esitamine + + + Menetlemine + + + Otsus + + + `, + }), +}; + +export const WithDescription: Story = { + args: { + activeIndex: 1, + }, + render: (args) => ({ + props: args, + template: ` + + + Taotluse esitamine + Pärast taotluse esitamist võetakse see menetlusse. + + + Menetlemine + Menetlemine võib võtta kuni 30 päeva. + + + Otsus + Otsus tehakse teatavaks. + + + `, + }), +}; + +export const WithInfoButton: Story = { + args: { + activeIndex: 1, + }, + render: (args) => ({ + props: args, + template: ` + + + + Taotluse esitamine + + + Pärast taotluse esitamist võetakse see menetlusse. + + + + Menetlemine + + + Menetlemine võib võtta kuni 30 päeva. + + + + Otsus + + + Otsus tehakse teatavaks. + + + `, + }), +}; + +export const WithoutTitle: Story = { + args: { + activeIndex: 1, + }, + render: (args) => ({ + props: args, + template: ` + + + Pärast taotluse esitamist võetakse see menetlusse. + + + Menetlemine võib võtta kuni 30 päeva. + + + Otsus tehakse teatavaks. + + + `, + }), +}; + +export const WithAction: Story = { + args: { + activeIndex: 3, + }, + render: (args) => ({ + props: args, + template: ` + + + Taotluse esitamine + Pärast taotluse esitamist võetakse see menetlusse. + + + + Menetlemine + Menetlemine võib võtta kuni 30 päeva. + + + + Otsus + Otsus tehakse teatavaks. + + Pärast otsuse teatavaks tegemist saab seda vajadusel vaidlustada. + + + + `, + }), +}; + +export const WithSingleDate: Story = { + args: { + activeIndex: 1, + }, + render: (args) => ({ + props: args, + template: ` + + + Taotluse esitamine + Pärast taotluse esitamist võetakse see menetlusse. + + + Menetlemine + Menetlemine võib võtta kuni 30 päeva. + + + Otsus + Otsus tehakse teatavaks. + + + `, + }), +}; + +export const WithMultipleDates: Story = { + args: { + activeIndex: 1, + }, + render: (args) => ({ + props: args, + template: ` + + + Taotluse esitamine + Pärast taotluse esitamist võetakse see menetlusse. + + + Menetlemine + Menetlemine võib võtta kuni 30 päeva. + + + Otsus + Otsus tehakse teatavaks. + + + `, + }), +}; From 83b76f8f799ff728085b9c37147c93036edbfbda Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 29 Sep 2025 06:48:53 +0000 Subject: [PATCH 04/24] chore(release): 2.5.0-rc.1 # [@tehik-ee/tedi-angular-v2.5.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/angular-2.4.0...angular-2.5.0-rc.1) (2025-09-29) ### Features * **timeline:** TEDI-Ready component [#1094](https://github.com/TEHIK-EE/tedi-design-system/issues/1094) ([#1122](https://github.com/TEHIK-EE/tedi-design-system/issues/1122)) ([c6e9fb4](https://github.com/TEHIK-EE/tedi-design-system/commit/c6e9fb44653b04dee705a9ffd2718045bc3d22ec)) --- libs/angular-components/CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libs/angular-components/CHANGELOG.md b/libs/angular-components/CHANGELOG.md index 0c69d9b36..0f1db6887 100644 --- a/libs/angular-components/CHANGELOG.md +++ b/libs/angular-components/CHANGELOG.md @@ -1,3 +1,10 @@ +# [@tehik-ee/tedi-angular-v2.5.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/angular-2.4.0...angular-2.5.0-rc.1) (2025-09-29) + + +### Features + +* **timeline:** TEDI-Ready component [#1094](https://github.com/TEHIK-EE/tedi-design-system/issues/1094) ([#1122](https://github.com/TEHIK-EE/tedi-design-system/issues/1122)) ([c6e9fb4](https://github.com/TEHIK-EE/tedi-design-system/commit/c6e9fb44653b04dee705a9ffd2718045bc3d22ec)) + # [@tehik-ee/tedi-angular-v2.4.0](https://github.com/TEHIK-EE/tedi-design-system/compare/angular-2.3.0...angular-2.4.0) (2025-09-25) From 5f9bcbc8226b7c4a871511e1afb23f36cf5c5972 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 1 Oct 2025 10:28:18 +0000 Subject: [PATCH 05/24] chore(release): 2.5.0-rc.2 # [@tehik-ee/tedi-angular-v2.5.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/angular-2.5.0-rc.1...angular-2.5.0-rc.2) (2025-10-01) ### Bug Fixes * **file-dropzone:** better error message [#860](https://github.com/TEHIK-EE/tedi-design-system/issues/860) ([90638d8](https://github.com/TEHIK-EE/tedi-design-system/commit/90638d8177485e52a0f8b0a1f61e9f53ab52fb12)) ### Features * **file-dropzone:** add toggle for SI and IEC standards of showing filesize fix filesize [#860](https://github.com/TEHIK-EE/tedi-design-system/issues/860) ([162cae1](https://github.com/TEHIK-EE/tedi-design-system/commit/162cae130dabd4c9967165331d46c3fe36512a84)) --- libs/angular-components/CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libs/angular-components/CHANGELOG.md b/libs/angular-components/CHANGELOG.md index 0f1db6887..abe9031cd 100644 --- a/libs/angular-components/CHANGELOG.md +++ b/libs/angular-components/CHANGELOG.md @@ -1,3 +1,15 @@ +# [@tehik-ee/tedi-angular-v2.5.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/angular-2.5.0-rc.1...angular-2.5.0-rc.2) (2025-10-01) + + +### Bug Fixes + +* **file-dropzone:** better error message [#860](https://github.com/TEHIK-EE/tedi-design-system/issues/860) ([90638d8](https://github.com/TEHIK-EE/tedi-design-system/commit/90638d8177485e52a0f8b0a1f61e9f53ab52fb12)) + + +### Features + +* **file-dropzone:** add toggle for SI and IEC standards of showing filesize fix filesize [#860](https://github.com/TEHIK-EE/tedi-design-system/issues/860) ([162cae1](https://github.com/TEHIK-EE/tedi-design-system/commit/162cae130dabd4c9967165331d46c3fe36512a84)) + # [@tehik-ee/tedi-angular-v2.5.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/angular-2.4.0...angular-2.5.0-rc.1) (2025-09-29) From 1d4f0da901e5810de64c4acaa4e566a445d4af18 Mon Sep 17 00:00:00 2001 From: Undefined Date: Wed, 1 Oct 2025 14:07:40 +0300 Subject: [PATCH 06/24] feat(vertical-stepper): design changes and additional slot for info components #512 (#1131) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(vertical-stepper): design changes #512 * feat(vertical-stepper): remove typo from description #512 * feat(vertical-stepper): design changes #512 * feat(vertical-stepper): design changes #512 --------- Co-authored-by: Heleri Mändla --- .../vertical-stepper/step-item/step-item.tsx | 108 +++++++++++------- .../vertical-stepper.module.scss | 81 ++++++++++--- .../vertical-stepper.stories.tsx | 34 ++++-- 3 files changed, 155 insertions(+), 68 deletions(-) diff --git a/libs/react-components/src/community/components/vertical-stepper/step-item/step-item.tsx b/libs/react-components/src/community/components/vertical-stepper/step-item/step-item.tsx index 208a01d13..723abaa5a 100644 --- a/libs/react-components/src/community/components/vertical-stepper/step-item/step-item.tsx +++ b/libs/react-components/src/community/components/vertical-stepper/step-item/step-item.tsx @@ -1,13 +1,14 @@ import cn from 'classnames'; import React from 'react'; +import { Col, Row } from '../../../../tedi'; import { Icon } from '../../../../tedi/components/base/icon/icon'; import Collapse from '../../../../tedi/components/buttons/collapse/collapse'; import styles from '../vertical-stepper.module.scss'; export interface StepItemProps { /** - * SubItems and additional info components like StatusBadge, Button, Link or Text. + * SubItems */ children?: React.ReactNode; /** @@ -21,10 +22,13 @@ export interface StepItemProps { /**Step title text */ title: string | React.ReactNode; href?: string; - /** */ state?: 'default' | 'completed' | 'error' | 'disabled'; hasIcon?: boolean; onClick?: () => void; + /** + * Additional info components like StatusBadge, Button, Link or Text. + */ + info?: React.ReactNode; } export const StepItem = ({ @@ -36,12 +40,17 @@ export const StepItem = ({ href, onClick, state = 'default', + info, }: StepItemProps): JSX.Element => { + const [open, selected] = React.useState(false); const stepItemClassName = cn( styles['stepper-item'], { [styles[state]]: state, [styles['selected']]: isSelected, + [styles['has-info']]: info && !children, + [styles['info-with-children']]: info && children, + [styles['stepper-collapse-open']]: open, }, className ); @@ -52,55 +61,68 @@ export const StepItem = ({
{children ? ( selected(isOpen)} + open={open} hideCollapseText id="vertical-stepper-collapse" + className={styles['stepper-item-collapse']} title={ - - {title} - {hasIcon && state === 'error' && ( - - )} - - {hasIcon && state === 'completed' && ( - - )} - + <> + + + {title} + {hasIcon && state === 'error' && ( + + )} + {hasIcon && state === 'completed' && ( + + )} + + + + {info} + + } > {children &&
    {children}
}
) : ( -
- { - e.preventDefault(); - if (onClick) { - onClick(); - } - }} - className={styles['stepper-link']} - > - {title} - - - {hasIcon && state === 'error' && } - - {hasIcon && state === 'completed' && } - -
+ <> +
+ { + e.preventDefault(); + if (onClick) { + onClick(); + } + }} + className={styles['stepper-link']} + > + {title} + + + {hasIcon && state === 'error' && } + {hasIcon && state === 'completed' && } + +
+ + {info} + + )}
diff --git a/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.module.scss b/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.module.scss index fdc605c55..b405e5ab4 100644 --- a/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.module.scss +++ b/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.module.scss @@ -27,16 +27,6 @@ } } - &:has(+ .tedi-separator) { - &::before { - height: 0; - } - - &::after { - display: none; - } - } - // ===== VERTICAL LINE ===== &::before { position: absolute; @@ -50,6 +40,24 @@ } &:last-child { + &::before { + height: calc(100% - 25px); + } + } + + &:has(+ .stepper-separator) { + &::before { + height: 0; + } + } + + &.info-with-children { + &::before { + height: calc(100% - 25px); + } + } + + &.stepper-collapse-open:not(:has(+ .stepper-item)) { &::before { height: calc(100% - 20px); } @@ -187,6 +195,13 @@ display: flex; flex-direction: column; gap: 0; + + .stepper-item-collapse { + button span { + align-items: flex-start !important; + color: var(--color-text-default); + } + } } .stepper-counter { @@ -260,7 +275,7 @@ .sub-item-dot-container { position: relative; - left: -16.5px; + left: -17px; width: 10px; height: 10px; border: 1px solid var(--color-white); @@ -269,8 +284,8 @@ .sub-item-dot { position: absolute; - width: 100%; - height: 100%; + width: 9px; + height: 9px; background-color: var(--color-white); border: 1px solid var(--general-border-secondary); border-radius: 50%; @@ -294,6 +309,7 @@ .sub-item-text button { padding: 0; + text-align: left; background: none; border: none; } @@ -397,8 +413,39 @@ // ================== .stepper--compact .stepper-item { grid-template-columns: [counter-column] 16px [text-column] auto; + + &:last-child { + &::before { + height: calc(100% - 20px); + } + } + + &.has-info:not(:has(+ .stepper-item)) { + &::before { + height: 1px; + } + } + + &.info-with-children { + &::before { + height: calc(100% - 20px); + } + } + + &:not(:has(+ .stepper-item)) { + &::before { + height: 0; + } + } + + &.stepper-collapse-open:not(:has(+ .stepper-item)) { + &::before { + height: calc(100% - 20px); + } + } } +/* ===== CHECKMARK ===== */ .stepper--compact .stepper-item.completed .stepper-counter::before { top: 2px; left: 5.5px; @@ -411,8 +458,10 @@ transform: rotate(45deg); } +/* ===== EXCLAMATION ICON ===== */ .stepper--compact .stepper-item.error .stepper-counter::before { font-size: 12px; + font-weight: bold; content: '!'; } @@ -453,14 +502,14 @@ } .stepper--compact .stepper-item .sub-item .sub-item-dot-container { - left: -8.5px; + left: -9px; width: 10px; height: 10px; } .stepper--compact .stepper-item .sub-item .sub-item-dot { - width: 100%; - height: 100%; + width: 9px; + height: 9px; &:hover { border-color: var(--color-primary-main); diff --git a/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.stories.tsx b/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.stories.tsx index a1e49c925..0bb9e560e 100644 --- a/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.stories.tsx +++ b/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.stories.tsx @@ -1,6 +1,6 @@ import { Meta, StoryFn } from '@storybook/react'; -import { Button, StatusBadge, Text, VerticalSpacing } from '../../../tedi'; +import { StatusBadge, Text, VerticalSpacing } from '../../../tedi'; import Separator from '../../../tedi/components/misc/separator/separator'; import { StepItem, VerticalStepper } from '.'; import { SubItem } from './sub-item/sub-item'; @@ -24,8 +24,7 @@ const Template: StoryFn = ({ isCompact = false }) => (
- - + Mõõdukas probleem @@ -43,21 +42,28 @@ const Template: StoryFn = ({ isCompact = false }) => ( - - - Mõõdukas probleem - + + Mõõdukas probleem + + } + > + - + - + @@ -69,6 +75,16 @@ const Template: StoryFn = ({ isCompact = false }) => ( + + Mõõdukas probleem + + } + > +
From b9169bafb9a8cc9794a1dbdf78e03d3005f66890 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 1 Oct 2025 11:10:22 +0000 Subject: [PATCH 07/24] chore(release): 13.1.0-rc.17 # [@tehik-ee/tedi-react-v13.1.0-rc.17](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.16...react-13.1.0-rc.17) (2025-10-01) ### Features * **vertical-stepper:** design changes and additional slot for info components [#512](https://github.com/TEHIK-EE/tedi-design-system/issues/512) ([#1131](https://github.com/TEHIK-EE/tedi-design-system/issues/1131)) ([1d4f0da](https://github.com/TEHIK-EE/tedi-design-system/commit/1d4f0da901e5810de64c4acaa4e566a445d4af18)) --- libs/react-components/CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libs/react-components/CHANGELOG.md b/libs/react-components/CHANGELOG.md index bfe3fd37e..a040dbcff 100644 --- a/libs/react-components/CHANGELOG.md +++ b/libs/react-components/CHANGELOG.md @@ -1,3 +1,10 @@ +# [@tehik-ee/tedi-react-v13.1.0-rc.17](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.16...react-13.1.0-rc.17) (2025-10-01) + + +### Features + +* **vertical-stepper:** design changes and additional slot for info components [#512](https://github.com/TEHIK-EE/tedi-design-system/issues/512) ([#1131](https://github.com/TEHIK-EE/tedi-design-system/issues/1131)) ([1d4f0da](https://github.com/TEHIK-EE/tedi-design-system/commit/1d4f0da901e5810de64c4acaa4e566a445d4af18)) + # [@tehik-ee/tedi-react-v13.1.0-rc.16](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.15...react-13.1.0-rc.16) (2025-09-25) From ea6397ed0e8ea1cc5a92e5a6da85078f0cbfb3cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:17:17 +0300 Subject: [PATCH 08/24] chore(deps-dev): bump semantic-release from 24.2.7 to 24.2.9 (#1133) Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 24.2.7 to 24.2.9. - [Release notes](https://github.com/semantic-release/semantic-release/releases) - [Commits](https://github.com/semantic-release/semantic-release/compare/v24.2.7...v24.2.9) --- updated-dependencies: - dependency-name: semantic-release dependency-version: 24.2.9 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 27 ++++++++++++++------------- package.json | 2 +- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index ac1b5a4aa..0a84af755 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@semantic-release/npm": "^12.0.1", "husky": "^9.0.11", "lint-staged": "^16.1.6", - "semantic-release": "^24.2.7", + "semantic-release": "^24.2.9", "semantic-release-monorepo": "^8.0.2", "typescript": "5.9.2" }, @@ -2877,13 +2877,13 @@ } }, "node_modules/hook-std": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", - "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-4.0.0.tgz", + "integrity": "sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ==", "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7369,9 +7369,9 @@ "license": "MIT" }, "node_modules/semantic-release": { - "version": "24.2.7", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.2.7.tgz", - "integrity": "sha512-g7RssbTAbir1k/S7uSwSVZFfFXwpomUB9Oas0+xi9KStSCmeDXcA7rNhiskjLqvUe/Evhx8fVCT16OSa34eM5g==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.2.9.tgz", + "integrity": "sha512-phCkJ6pjDi9ANdhuF5ElS10GGdAKY6R1Pvt9lT3SFhOwM4T7QZE7MLpBDbNruUx/Q3gFD92/UOFringGipRqZA==", "dev": true, "license": "MIT", "dependencies": { @@ -7389,7 +7389,7 @@ "find-versions": "^6.0.0", "get-stream": "^6.0.0", "git-log-parser": "^1.2.0", - "hook-std": "^3.0.0", + "hook-std": "^4.0.0", "hosted-git-info": "^8.0.0", "import-from-esm": "^2.0.0", "lodash-es": "^4.17.21", @@ -7401,7 +7401,7 @@ "read-package-up": "^11.0.0", "resolve-from": "^5.0.0", "semver": "^7.3.2", - "semver-diff": "^4.0.0", + "semver-diff": "^5.0.0", "signale": "^1.2.1", "yargs": "^17.5.1" }, @@ -7871,9 +7871,10 @@ } }, "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-5.0.0.tgz", + "integrity": "sha512-0HbGtOm+S7T6NGQ/pxJSJipJvc4DK3FcRVMRkhsIwJDJ4Jcz5DQC1cPPzB5GhzyHjwttW878HaWQq46CkL3cqg==", + "deprecated": "Deprecated as the semver package now supports this built-in.", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 2db3f2bc1..b7269fefd 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@semantic-release/npm": "^12.0.1", "husky": "^9.0.11", "lint-staged": "^16.1.6", - "semantic-release": "^24.2.7", + "semantic-release": "^24.2.9", "semantic-release-monorepo": "^8.0.2", "typescript": "5.9.2" }, From 46e484f2e2c20d454cd15a2bd7772115d4731b40 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:39:52 +0300 Subject: [PATCH 09/24] chore(deps-dev): bump typescript from 5.9.2 to 5.9.3 (#1135) Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.9.2 to 5.9.3. - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml) - [Commits](https://github.com/microsoft/TypeScript/compare/v5.9.2...v5.9.3) --- updated-dependencies: - dependency-name: typescript dependency-version: 5.9.3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0a84af755..73b914d0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "lint-staged": "^16.1.6", "semantic-release": "^24.2.9", "semantic-release-monorepo": "^8.0.2", - "typescript": "5.9.2" + "typescript": "5.9.3" }, "engines": { "node": ">=18.0.0", @@ -8469,9 +8469,9 @@ } }, "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index b7269fefd..7c3b0c4ef 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "lint-staged": "^16.1.6", "semantic-release": "^24.2.9", "semantic-release-monorepo": "^8.0.2", - "typescript": "5.9.2" + "typescript": "5.9.3" }, "commitlint": { "extends": "@commitlint/config-conventional", From 412e79c2592f1409cedc768d4ee69e183aaa7b78 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Oct 2025 11:03:17 +0300 Subject: [PATCH 10/24] chore(deps-dev): bump @commitlint/config-conventional (#1134) Bumps [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/config-conventional) from 19.8.1 to 20.0.0. - [Release notes](https://github.com/conventional-changelog/commitlint/releases) - [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/config-conventional/CHANGELOG.md) - [Commits](https://github.com/conventional-changelog/commitlint/commits/v20.0.0/@commitlint/config-conventional) --- updated-dependencies: - dependency-name: "@commitlint/config-conventional" dependency-version: 20.0.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 24 +++++++++++++++++++----- package.json | 2 +- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 73b914d0f..38b252058 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.0", "devDependencies": { "@commitlint/cli": "^19.8.1", - "@commitlint/config-conventional": "^19.8.1", + "@commitlint/config-conventional": "^20.0.0", "@semantic-release/changelog": "^6.0.3", "@semantic-release/commit-analyzer": "^13.0.0", "@semantic-release/git": "^10.0.1", @@ -84,19 +84,33 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.1.tgz", - "integrity": "sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.0.0.tgz", + "integrity": "sha512-q7JroPIkDBtyOkVe9Bca0p7kAUYxZMxkrBArCfuD3yN4KjRAenP9PmYwnn7rsw8Q+hHq1QB2BRmBh0/Z19ZoJw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.0.0", "conventional-changelog-conventionalcommits": "^7.0.2" }, "engines": { "node": ">=v18" } }, + "node_modules/@commitlint/config-conventional/node_modules/@commitlint/types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.0.0.tgz", + "integrity": "sha512-bVUNBqG6aznYcYjTjnc3+Cat/iBgbgpflxbIBTnsHTX0YVpnmINPEkSRWymT2Q8aSH3Y7aKnEbunilkYe8TybA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, "node_modules/@commitlint/config-validator": { "version": "19.8.1", "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.1.tgz", diff --git a/package.json b/package.json index 7c3b0c4ef..94276cb66 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ }, "devDependencies": { "@commitlint/cli": "^19.8.1", - "@commitlint/config-conventional": "^19.8.1", + "@commitlint/config-conventional": "^20.0.0", "@semantic-release/changelog": "^6.0.3", "@semantic-release/commit-analyzer": "^13.0.0", "@semantic-release/git": "^10.0.1", From 53f89193e3adcd8b799428f7a0d3074559f3c594 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Oct 2025 11:19:06 +0300 Subject: [PATCH 11/24] chore(deps-dev): bump @commitlint/cli from 19.8.1 to 20.1.0 (#1136) Bumps [@commitlint/cli](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/cli) from 19.8.1 to 20.1.0. - [Release notes](https://github.com/conventional-changelog/commitlint/releases) - [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/cli/CHANGELOG.md) - [Commits](https://github.com/conventional-changelog/commitlint/commits/v20.1.0/@commitlint/cli) --- updated-dependencies: - dependency-name: "@commitlint/cli" dependency-version: 20.1.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 176 +++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 82 insertions(+), 96 deletions(-) diff --git a/package-lock.json b/package-lock.json index 38b252058..0ffa75f6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "@tehik-ee/tedi-design-system", "version": "0.0.0", "devDependencies": { - "@commitlint/cli": "^19.8.1", + "@commitlint/cli": "^20.1.0", "@commitlint/config-conventional": "^20.0.0", "@semantic-release/changelog": "^6.0.3", "@semantic-release/commit-analyzer": "^13.0.0", @@ -62,17 +62,17 @@ } }, "node_modules/@commitlint/cli": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.1.tgz", - "integrity": "sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.1.0.tgz", + "integrity": "sha512-pW5ujjrOovhq5RcYv5xCpb4GkZxkO2+GtOdBW2/qrr0Ll9tl3PX0aBBobGQl3mdZUbOBgwAexEQLeH6uxL0VYg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/format": "^19.8.1", - "@commitlint/lint": "^19.8.1", - "@commitlint/load": "^19.8.1", - "@commitlint/read": "^19.8.1", - "@commitlint/types": "^19.8.1", + "@commitlint/format": "^20.0.0", + "@commitlint/lint": "^20.0.0", + "@commitlint/load": "^20.1.0", + "@commitlint/read": "^20.0.0", + "@commitlint/types": "^20.0.0", "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, @@ -97,28 +97,14 @@ "node": ">=v18" } }, - "node_modules/@commitlint/config-conventional/node_modules/@commitlint/types": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.0.0.tgz", - "integrity": "sha512-bVUNBqG6aznYcYjTjnc3+Cat/iBgbgpflxbIBTnsHTX0YVpnmINPEkSRWymT2Q8aSH3Y7aKnEbunilkYe8TybA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/conventional-commits-parser": "^5.0.0", - "chalk": "^5.3.0" - }, - "engines": { - "node": ">=v18" - } - }, "node_modules/@commitlint/config-validator": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.1.tgz", - "integrity": "sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.0.0.tgz", + "integrity": "sha512-BeyLMaRIJDdroJuYM2EGhDMGwVBMZna9UiIqV9hxj+J551Ctc6yoGuGSmghOy/qPhBSuhA6oMtbEiTmxECafsg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.0.0", "ajv": "^8.11.0" }, "engines": { @@ -126,13 +112,13 @@ } }, "node_modules/@commitlint/ensure": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.1.tgz", - "integrity": "sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.0.0.tgz", + "integrity": "sha512-WBV47Fffvabe68n+13HJNFBqiMH5U1Ryls4W3ieGwPC0C7kJqp3OVQQzG2GXqOALmzrgAB+7GXmyy8N9ct8/Fg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.0.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -144,9 +130,9 @@ } }, "node_modules/@commitlint/execute-rule": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.1.tgz", - "integrity": "sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-20.0.0.tgz", + "integrity": "sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==", "dev": true, "license": "MIT", "engines": { @@ -154,13 +140,13 @@ } }, "node_modules/@commitlint/format": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.1.tgz", - "integrity": "sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.0.0.tgz", + "integrity": "sha512-zrZQXUcSDmQ4eGGrd+gFESiX0Rw+WFJk7nW4VFOmxub4mAATNKBQ4vNw5FgMCVehLUKG2OT2LjOqD0Hk8HvcRg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.0.0", "chalk": "^5.3.0" }, "engines": { @@ -168,13 +154,13 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.1.tgz", - "integrity": "sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.0.0.tgz", + "integrity": "sha512-ayPLicsqqGAphYIQwh9LdAYOVAQ9Oe5QCgTNTj+BfxZb9b/JW222V5taPoIBzYnAP0z9EfUtljgBk+0BN4T4Cw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.0.0", "semver": "^7.6.0" }, "engines": { @@ -182,32 +168,32 @@ } }, "node_modules/@commitlint/lint": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.1.tgz", - "integrity": "sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.0.0.tgz", + "integrity": "sha512-kWrX8SfWk4+4nCexfLaQT3f3EcNjJwJBsSZ5rMBw6JCd6OzXufFHgel2Curos4LKIxwec9WSvs2YUD87rXlxNQ==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/is-ignored": "^19.8.1", - "@commitlint/parse": "^19.8.1", - "@commitlint/rules": "^19.8.1", - "@commitlint/types": "^19.8.1" + "@commitlint/is-ignored": "^20.0.0", + "@commitlint/parse": "^20.0.0", + "@commitlint/rules": "^20.0.0", + "@commitlint/types": "^20.0.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.1.tgz", - "integrity": "sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.1.0.tgz", + "integrity": "sha512-qo9ER0XiAimATQR5QhvvzePfeDfApi/AFlC1G+YN+ZAY8/Ua6IRrDrxRvQAr+YXUKAxUsTDSp9KXeXLBPsNRWg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^19.8.1", - "@commitlint/execute-rule": "^19.8.1", - "@commitlint/resolve-extends": "^19.8.1", - "@commitlint/types": "^19.8.1", + "@commitlint/config-validator": "^20.0.0", + "@commitlint/execute-rule": "^20.0.0", + "@commitlint/resolve-extends": "^20.1.0", + "@commitlint/types": "^20.0.0", "chalk": "^5.3.0", "cosmiconfig": "^9.0.0", "cosmiconfig-typescript-loader": "^6.1.0", @@ -220,9 +206,9 @@ } }, "node_modules/@commitlint/message": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.1.tgz", - "integrity": "sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.0.0.tgz", + "integrity": "sha512-gLX4YmKnZqSwkmSB9OckQUrI5VyXEYiv3J5JKZRxIp8jOQsWjZgHSG/OgEfMQBK9ibdclEdAyIPYggwXoFGXjQ==", "dev": true, "license": "MIT", "engines": { @@ -230,13 +216,13 @@ } }, "node_modules/@commitlint/parse": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.1.tgz", - "integrity": "sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.0.0.tgz", + "integrity": "sha512-j/PHCDX2bGM5xGcWObOvpOc54cXjn9g6xScXzAeOLwTsScaL4Y+qd0pFC6HBwTtrH92NvJQc+2Lx9HFkVi48cg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.0.0", "conventional-changelog-angular": "^7.0.0", "conventional-commits-parser": "^5.0.0" }, @@ -245,14 +231,14 @@ } }, "node_modules/@commitlint/read": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.1.tgz", - "integrity": "sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.0.0.tgz", + "integrity": "sha512-Ti7Y7aEgxsM1nkwA4ZIJczkTFRX/+USMjNrL9NXwWQHqNqrBX2iMi+zfuzZXqfZ327WXBjdkRaytJ+z5vNqTOA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/top-level": "^19.8.1", - "@commitlint/types": "^19.8.1", + "@commitlint/top-level": "^20.0.0", + "@commitlint/types": "^20.0.0", "git-raw-commits": "^4.0.0", "minimist": "^1.2.8", "tinyexec": "^1.0.0" @@ -262,14 +248,14 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.1.tgz", - "integrity": "sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.1.0.tgz", + "integrity": "sha512-cxKXQrqHjZT3o+XPdqDCwOWVFQiae++uwd9dUBC7f2MdV58ons3uUvASdW7m55eat5sRiQ6xUHyMWMRm6atZWw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^19.8.1", - "@commitlint/types": "^19.8.1", + "@commitlint/config-validator": "^20.0.0", + "@commitlint/types": "^20.0.0", "global-directory": "^4.0.1", "import-meta-resolve": "^4.0.0", "lodash.mergewith": "^4.6.2", @@ -280,25 +266,25 @@ } }, "node_modules/@commitlint/rules": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.1.tgz", - "integrity": "sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.0.0.tgz", + "integrity": "sha512-gvg2k10I/RfvHn5I5sxvVZKM1fl72Sqrv2YY/BnM7lMHcYqO0E2jnRWoYguvBfEcZ39t+rbATlciggVe77E4zA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/ensure": "^19.8.1", - "@commitlint/message": "^19.8.1", - "@commitlint/to-lines": "^19.8.1", - "@commitlint/types": "^19.8.1" + "@commitlint/ensure": "^20.0.0", + "@commitlint/message": "^20.0.0", + "@commitlint/to-lines": "^20.0.0", + "@commitlint/types": "^20.0.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/to-lines": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.1.tgz", - "integrity": "sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-20.0.0.tgz", + "integrity": "sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==", "dev": true, "license": "MIT", "engines": { @@ -306,9 +292,9 @@ } }, "node_modules/@commitlint/top-level": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.1.tgz", - "integrity": "sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.0.0.tgz", + "integrity": "sha512-drXaPSP2EcopukrUXvUXmsQMu3Ey/FuJDc/5oiW4heoCfoE5BdLQyuc7veGeE3aoQaTVqZnh4D5WTWe2vefYKg==", "dev": true, "license": "MIT", "dependencies": { @@ -319,9 +305,9 @@ } }, "node_modules/@commitlint/types": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.1.tgz", - "integrity": "sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.0.0.tgz", + "integrity": "sha512-bVUNBqG6aznYcYjTjnc3+Cat/iBgbgpflxbIBTnsHTX0YVpnmINPEkSRWymT2Q8aSH3Y7aKnEbunilkYe8TybA==", "dev": true, "license": "MIT", "dependencies": { @@ -2469,9 +2455,9 @@ } }, "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "dev": true, "funding": [ { @@ -3294,9 +3280,9 @@ } }, "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "dev": true, "license": "MIT", "bin": { diff --git a/package.json b/package.json index 94276cb66..c8b27fc76 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "node": ">=18.0.0" }, "devDependencies": { - "@commitlint/cli": "^19.8.1", + "@commitlint/cli": "^20.1.0", "@commitlint/config-conventional": "^20.0.0", "@semantic-release/changelog": "^6.0.3", "@semantic-release/commit-analyzer": "^13.0.0", From 9c16ad363bfcfdad211b1967b6d26b4c418d56d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Oct 2025 12:01:10 +0300 Subject: [PATCH 12/24] chore(deps-dev): bump lint-staged from 16.1.6 to 16.2.3 (#1137) Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 16.1.6 to 16.2.3. - [Release notes](https://github.com/lint-staged/lint-staged/releases) - [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md) - [Commits](https://github.com/lint-staged/lint-staged/compare/v16.1.6...v16.2.3) --- updated-dependencies: - dependency-name: lint-staged dependency-version: 16.2.3 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 171 +++++++++++++++++++--------------------------- package.json | 2 +- 2 files changed, 72 insertions(+), 101 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0ffa75f6d..05a5f657c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@semantic-release/git": "^10.0.1", "@semantic-release/npm": "^12.0.1", "husky": "^9.0.11", - "lint-staged": "^16.1.6", + "lint-staged": "^16.2.3", "semantic-release": "^24.2.9", "semantic-release-monorepo": "^8.0.2", "typescript": "5.9.3" @@ -1213,9 +1213,9 @@ } }, "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -1608,17 +1608,17 @@ } }, "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.0.tgz", + "integrity": "sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==", "dev": true, "license": "MIT", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" + "slice-ansi": "^7.1.0", + "string-width": "^8.0.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1756,9 +1756,9 @@ "license": "MIT" }, "node_modules/commander": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", - "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.1.tgz", + "integrity": "sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==", "dev": true, "license": "MIT", "engines": { @@ -2635,9 +2635,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.1.tgz", - "integrity": "sha512-R1QfovbPsKmosqTnPoRFiJ7CF9MLRgb53ChvMZm+r4p76/+8yKDy17qLL2PKInORy2RkZZekuK0efYgmzTkXyQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", "dev": true, "license": "MIT", "engines": { @@ -3121,13 +3121,16 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3370,19 +3373,6 @@ "node": "*" } }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -3391,19 +3381,16 @@ "license": "MIT" }, "node_modules/lint-staged": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.1.6.tgz", - "integrity": "sha512-U4kuulU3CKIytlkLlaHcGgKscNfJPNTiDF2avIUGFCv7K95/DCYQ7Ra62ydeRWmgQGg9zJYw2dzdbztwJlqrow==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.3.tgz", + "integrity": "sha512-1OnJEESB9zZqsp61XHH2fvpS1es3hRCxMplF/AJUDa8Ho8VrscYDIuxGrj3m8KPXbcWZ8fT9XTMUhEQmOVKpKw==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^5.6.0", - "commander": "^14.0.0", - "debug": "^4.4.1", - "lilconfig": "^3.1.3", - "listr2": "^9.0.3", + "commander": "^14.0.1", + "listr2": "^9.0.4", "micromatch": "^4.0.8", - "nano-spawn": "^1.0.2", + "nano-spawn": "^1.0.3", "pidtree": "^0.6.0", "string-argv": "^0.3.2", "yaml": "^2.8.1" @@ -3419,13 +3406,13 @@ } }, "node_modules/listr2": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.3.tgz", - "integrity": "sha512-0aeh5HHHgmq1KRdMMDHfhMWQmIT/m7nRDTlxlFqni2Sp0had9baqsjJRvDGdlvgd6NmPE0nPloOipiQJGFtTHQ==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.4.tgz", + "integrity": "sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==", "dev": true, "license": "MIT", "dependencies": { - "cli-truncate": "^4.0.0", + "cli-truncate": "^5.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.1.0", @@ -3607,39 +3594,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.3.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -3808,9 +3762,9 @@ } }, "node_modules/nano-spawn": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-1.0.2.tgz", - "integrity": "sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-1.0.3.tgz", + "integrity": "sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==", "dev": true, "license": "MIT", "engines": { @@ -8063,17 +8017,17 @@ } }, "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" @@ -8174,27 +8128,26 @@ } }, "node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", + "get-east-asian-width": "^1.3.0", "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { @@ -8611,9 +8564,9 @@ "license": "MIT" }, "node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", "dependencies": { @@ -8628,6 +8581,24 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index c8b27fc76..19d94ffd8 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@semantic-release/git": "^10.0.1", "@semantic-release/npm": "^12.0.1", "husky": "^9.0.11", - "lint-staged": "^16.1.6", + "lint-staged": "^16.2.3", "semantic-release": "^24.2.9", "semantic-release-monorepo": "^8.0.2", "typescript": "5.9.3" From 649b52b8b221293c7a9d5ad26695b4777e1bb94e Mon Sep 17 00:00:00 2001 From: Airike Jaska <95303654+airikej@users.noreply.github.com> Date: Wed, 8 Oct 2025 10:35:02 +0300 Subject: [PATCH 13/24] fix(select): fix label and placeholder accessibility #1014 (#1130) * fix(select): fix label and placeholder accessibility #1014 * fix(select): improve remove tag titles #1014 --- .../form/select/components/select-multi-value-remove.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/react-components/src/tedi/components/form/select/components/select-multi-value-remove.tsx b/libs/react-components/src/tedi/components/form/select/components/select-multi-value-remove.tsx index d0f3b1f20..8ed9a4e08 100644 --- a/libs/react-components/src/tedi/components/form/select/components/select-multi-value-remove.tsx +++ b/libs/react-components/src/tedi/components/form/select/components/select-multi-value-remove.tsx @@ -6,7 +6,7 @@ import Separator from '../../../misc/separator/separator'; import { ISelectOption } from '../select'; import styles from '../select.module.scss'; -export const SelectMultiValueRemove = ({ innerProps }: MultiValueRemoveProps): JSX.Element => { +export const SelectMultiValueRemove = ({ innerProps, data }: MultiValueRemoveProps): JSX.Element => { const { getLabel } = useLabels(); const handleClick: React.MouseEventHandler = (event) => { @@ -28,7 +28,7 @@ export const SelectMultiValueRemove = ({ innerProps }: MultiValueRemoveProps From d391e01814da7b12ad7804cd0d720b7a41b317b8 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 8 Oct 2025 07:37:52 +0000 Subject: [PATCH 14/24] chore(release): 13.1.0-rc.18 # [@tehik-ee/tedi-react-v13.1.0-rc.18](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.17...react-13.1.0-rc.18) (2025-10-08) ### Bug Fixes * **select:** fix label and placeholder accessibility [#1014](https://github.com/TEHIK-EE/tedi-design-system/issues/1014) ([#1130](https://github.com/TEHIK-EE/tedi-design-system/issues/1130)) ([649b52b](https://github.com/TEHIK-EE/tedi-design-system/commit/649b52b8b221293c7a9d5ad26695b4777e1bb94e)) --- libs/react-components/CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libs/react-components/CHANGELOG.md b/libs/react-components/CHANGELOG.md index a040dbcff..464dad727 100644 --- a/libs/react-components/CHANGELOG.md +++ b/libs/react-components/CHANGELOG.md @@ -1,3 +1,10 @@ +# [@tehik-ee/tedi-react-v13.1.0-rc.18](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.17...react-13.1.0-rc.18) (2025-10-08) + + +### Bug Fixes + +* **select:** fix label and placeholder accessibility [#1014](https://github.com/TEHIK-EE/tedi-design-system/issues/1014) ([#1130](https://github.com/TEHIK-EE/tedi-design-system/issues/1130)) ([649b52b](https://github.com/TEHIK-EE/tedi-design-system/commit/649b52b8b221293c7a9d5ad26695b4777e1bb94e)) + # [@tehik-ee/tedi-react-v13.1.0-rc.17](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.16...react-13.1.0-rc.17) (2025-10-01) From 80d9ac82ebb75418e1f2debd236b3ad5cedbf1d6 Mon Sep 17 00:00:00 2001 From: Airike Jaska <95303654+airikej@users.noreply.github.com> Date: Wed, 8 Oct 2025 15:09:30 +0300 Subject: [PATCH 15/24] fix(separator): fix stories for 9.1.4.10 criteria #1007 (#1125) * fix(separator): add default aria-hidden and semantic mode support #1007 * fix(separator): fix card stories separator responsive for criteria 9.1.4.10 #1007 --- .../misc/separator/separator.stories.tsx | 31 ++++++++++++++++--- .../components/misc/separator/separator.tsx | 1 + 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/libs/react-components/src/tedi/components/misc/separator/separator.stories.tsx b/libs/react-components/src/tedi/components/misc/separator/separator.stories.tsx index 3f27a6841..e6e8eb4a7 100644 --- a/libs/react-components/src/tedi/components/misc/separator/separator.stories.tsx +++ b/libs/react-components/src/tedi/components/misc/separator/separator.stories.tsx @@ -121,7 +121,7 @@ const TemplateVertical: StoryFn = (args) => (

12.12.2012

- + @@ -139,17 +139,40 @@ const TemplateVertical: StoryFn = (args) => ( export const VerticalThick: Story = { render: TemplateVertical, - args: { axis: 'vertical', thickness: 2, isStretched: true }, + args: { + axis: 'horizontal', + thickness: 1, + isStretched: true, + topSpacing: 1, + bottomSpacing: 1, + md: { axis: 'vertical', thickness: 1 }, + }, }; export const VerticalDotted: Story = { render: TemplateVertical, - args: { axis: 'vertical', variant: 'dotted', color: 'accent', isStretched: true }, + args: { + axis: 'horizontal', + variant: 'dotted', + color: 'accent', + topSpacing: 1, + bottomSpacing: 1, + isStretched: true, + md: { axis: 'vertical' }, + }, }; export const VerticalDottedSmall: Story = { render: TemplateVertical, - args: { axis: 'vertical', variant: 'dotted-small', color: 'accent', isStretched: true }, + args: { + axis: 'horizontal', + topSpacing: 1, + bottomSpacing: 1, + variant: 'dotted-small', + color: 'accent', + isStretched: true, + md: { axis: 'vertical' }, + }, }; export const HorizontalDottedSeparator: Story = { diff --git a/libs/react-components/src/tedi/components/misc/separator/separator.tsx b/libs/react-components/src/tedi/components/misc/separator/separator.tsx index 90d00c477..bcf4f7682 100644 --- a/libs/react-components/src/tedi/components/misc/separator/separator.tsx +++ b/libs/react-components/src/tedi/components/misc/separator/separator.tsx @@ -88,6 +88,7 @@ export type SeparatorBreakpointProps = { * Height values based on breakpoints (for vertical separators). */ height?: Omit; + axis?: 'horizontal' | 'vertical'; }; export type SeparatorProps = BreakpointSupport< From 3d2a2f5748fde45ef271b8dfad3374f246c5cbe3 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 8 Oct 2025 12:12:22 +0000 Subject: [PATCH 16/24] chore(release): 13.1.0-rc.19 # [@tehik-ee/tedi-react-v13.1.0-rc.19](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.18...react-13.1.0-rc.19) (2025-10-08) ### Bug Fixes * **separator:** fix stories for 9.1.4.10 criteria [#1007](https://github.com/TEHIK-EE/tedi-design-system/issues/1007) ([#1125](https://github.com/TEHIK-EE/tedi-design-system/issues/1125)) ([80d9ac8](https://github.com/TEHIK-EE/tedi-design-system/commit/80d9ac82ebb75418e1f2debd236b3ad5cedbf1d6)) --- libs/react-components/CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libs/react-components/CHANGELOG.md b/libs/react-components/CHANGELOG.md index 464dad727..673ab462b 100644 --- a/libs/react-components/CHANGELOG.md +++ b/libs/react-components/CHANGELOG.md @@ -1,3 +1,10 @@ +# [@tehik-ee/tedi-react-v13.1.0-rc.19](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.18...react-13.1.0-rc.19) (2025-10-08) + + +### Bug Fixes + +* **separator:** fix stories for 9.1.4.10 criteria [#1007](https://github.com/TEHIK-EE/tedi-design-system/issues/1007) ([#1125](https://github.com/TEHIK-EE/tedi-design-system/issues/1125)) ([80d9ac8](https://github.com/TEHIK-EE/tedi-design-system/commit/80d9ac82ebb75418e1f2debd236b3ad5cedbf1d6)) + # [@tehik-ee/tedi-react-v13.1.0-rc.18](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.17...react-13.1.0-rc.18) (2025-10-08) From f92290772259b8b3ff19a2cc5a1f1d9e9b24d610 Mon Sep 17 00:00:00 2001 From: Airike Jaska <95303654+airikej@users.noreply.github.com> Date: Wed, 8 Oct 2025 15:18:07 +0300 Subject: [PATCH 17/24] fix(alert,toast): enhance accessibility, add titleElement prop to override default heading element, better Toast stories, add documentation #1009 (#1126) * fix(alert): enhance accessibility, add titleElement prop to override default heading element #1009 * fix(toast): more examples, style progressbar #1009 * fix(toast,alert): fix alert test, add Toast documentation, fix progressbar color #1009 --- .../notifications/alert/alert.spec.tsx | 24 +- .../components/notifications/alert/alert.tsx | 29 +- .../notifications/toast/documentation.mdx | 125 ++++++++ .../notifications/toast/toast.module.scss | 19 ++ .../notifications/toast/toast.stories.tsx | 293 +++++++++++++----- .../components/notifications/toast/toast.tsx | 8 +- 6 files changed, 419 insertions(+), 79 deletions(-) create mode 100644 libs/react-components/src/tedi/components/notifications/toast/documentation.mdx create mode 100644 libs/react-components/src/tedi/components/notifications/toast/toast.module.scss diff --git a/libs/react-components/src/tedi/components/notifications/alert/alert.spec.tsx b/libs/react-components/src/tedi/components/notifications/alert/alert.spec.tsx index e1ac9a193..336858a85 100644 --- a/libs/react-components/src/tedi/components/notifications/alert/alert.spec.tsx +++ b/libs/react-components/src/tedi/components/notifications/alert/alert.spec.tsx @@ -38,7 +38,6 @@ describe('Alert component', () => { expect(title).toBeInTheDocument(); expect(content).toBeInTheDocument(); - expect(title.tagName).toBe('H5'); }); it('renders an icon when provided', () => { @@ -78,7 +77,7 @@ describe('Alert component', () => { it('does not render close button when onClose is not provided', () => { render(No Close Button); - const closeButton = screen.queryByRole('button', { name: /close alert/i }); + const closeButton = screen.queryByRole('button', { name: /close/i }); expect(closeButton).not.toBeInTheDocument(); }); @@ -98,8 +97,25 @@ describe('Alert component', () => { it('renders children without a title', () => { render(Alert without Title); + expect(screen.getByText('Alert without Title')).toBeInTheDocument(); + }); - const content = screen.getByText('Alert without Title'); - expect(content).toBeInTheDocument(); + it('renders title with default h3 when titleElement is not provided', () => { + render(Alert Content); + const title = screen.getByText('Alert Title'); + expect(title.tagName).toBe('H3'); + }); + + const headingLevels: Array<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'> = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']; + + it.each(headingLevels)('renders title with %s when titleElement is %s', (level) => { + const text = `Alert with ${level.toUpperCase()}`; + render( + + Alert Content + + ); + const title = screen.getByText(text); + expect(title.tagName).toBe(level.toUpperCase()); }); }); diff --git a/libs/react-components/src/tedi/components/notifications/alert/alert.tsx b/libs/react-components/src/tedi/components/notifications/alert/alert.tsx index 2d48c517c..a926d0aa6 100644 --- a/libs/react-components/src/tedi/components/notifications/alert/alert.tsx +++ b/libs/react-components/src/tedi/components/notifications/alert/alert.tsx @@ -68,6 +68,20 @@ export interface AlertProps extends BreakpointSupport { * @default alert */ role?: 'alert' | 'status' | 'none'; + /** + * Semantic heading level for alert titles to ensure WCAG compliance. + * + * @example + * // For critical alerts that are main content + * titleElement="h2" + * + * @example + * // For secondary notifications + * titleElement="h4" + * + * @default 'h3' + */ + titleElement?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'; } export const Alert = (props: AlertProps): JSX.Element | null => { @@ -82,6 +96,7 @@ export const Alert = (props: AlertProps): JSX.Element | null => { onClose, isGlobal = false, noSideBorders = false, + titleElement = 'h3', ...rest } = getCurrentBreakpointProps(props); @@ -106,13 +121,15 @@ export const Alert = (props: AlertProps): JSX.Element | null => { }; const ariaLive = role === 'alert' ? 'assertive' : role === 'status' ? 'polite' : 'off'; + const headingId = React.useId(); return isMounted ? (
@@ -121,12 +138,18 @@ export const Alert = (props: AlertProps): JSX.Element | null => { {icon && getIcon(icon)}
- {title ? {title} : children} + {title ? ( + + {title} + + ) : ( + children + )}
{onClose && ( - + )} diff --git a/libs/react-components/src/tedi/components/notifications/toast/documentation.mdx b/libs/react-components/src/tedi/components/notifications/toast/documentation.mdx new file mode 100644 index 000000000..a5d21ca8c --- /dev/null +++ b/libs/react-components/src/tedi/components/notifications/toast/documentation.mdx @@ -0,0 +1,125 @@ +import { Meta } from '@storybook/blocks'; + + + +# Toast + +The **Toast** component provides an easy way to display notifications using the same appearance as the `Alert` component. + +--- + +## `sendNotification` + +The `sendNotification` function is the main entry point for triggering toast notifications. + +```tsx +sendNotification(alertProps, toastOptions?) +``` + +### Parameters + +```tsx +| Name | Type | Description | +| --------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| `alertProps` | [`AlertProps`](../alert) | Accepts the same properties as the `Alert` component. | +| `toastOptions?` | [`ToastOptions`](https://fkhadra.github.io/react-toastify/api/toast) | (Optional) Custom React-Toastify options for overriding the default behavior. | +``` + +### Example + +```tsx + + + + + + + + + + + + + + + + + + + +``` + +This will display the alert in the **bottom-left corner** of the page. + +--- + +## `ToastContainer` + +The `ToastContainer` component is required for rendering toast notifications. +It should be added once, near the **root** of your application (for example, in your `index.tsx` or `App.tsx` file). + +### Example + +```tsx +import { ToastContainer } from '@/components/Toasti'; + +function App() { + return ( + <> + + + + ); +} +``` + +--- + +## Summary + +- `sendNotification` displays an `Alert`-styled toast in the bottom-left corner. +- You can customize its behavior using the optional React-Toastify options parameter. +- Remember to include `ToastContainer` at the application root. diff --git a/libs/react-components/src/tedi/components/notifications/toast/toast.module.scss b/libs/react-components/src/tedi/components/notifications/toast/toast.module.scss new file mode 100644 index 000000000..3354a7ec5 --- /dev/null +++ b/libs/react-components/src/tedi/components/notifications/toast/toast.module.scss @@ -0,0 +1,19 @@ +.tedi-toast__progress { + background: var(--toast-progress-color) !important; +} + +.tedi-toast__progress--success { + --toast-progress-color: var(--alert-default-border-success); +} + +.tedi-toast__progress--info { + --toast-progress-color: var(--alert-default-border-info); +} + +.tedi-toast__progress--danger { + --toast-progress-color: var(--alert-default-border-danger); +} + +.tedi-toast__progress--warning { + --toast-progress-color: var(--alert-default-border-warning); +} diff --git a/libs/react-components/src/tedi/components/notifications/toast/toast.stories.tsx b/libs/react-components/src/tedi/components/notifications/toast/toast.stories.tsx index a44129f97..bcfa2458c 100644 --- a/libs/react-components/src/tedi/components/notifications/toast/toast.stories.tsx +++ b/libs/react-components/src/tedi/components/notifications/toast/toast.stories.tsx @@ -1,15 +1,17 @@ +import { Controls, Description, Primary, Stories, Subtitle, Title } from '@storybook/blocks'; import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import { ToastContainer } from 'react-toastify'; import Button from '../../buttons/button/button'; import { Col, Row } from '../../layout/grid'; import { VerticalSpacing } from '../../layout/vertical-spacing'; import { Alert, AlertProps } from '../alert/alert'; -import { sendNotification } from './toast'; +import { sendNotification, ToastContainer } from './toast'; /** * Figma ↗
- * Zeroheight ↗ + * Zeroheight ↗
+ * Documentation ↗
+ * React-Toastify ↗ */ const meta: Meta = { @@ -23,81 +25,103 @@ const meta: Meta = { type: 'figma', url: 'https://www.figma.com/design/jWiRIXhHRxwVdMSimKX2FF/TEDI-READY-(work-in-progress)?node-id=4281-58105&m=dev', }, + docs: { + page: () => ( + <> + + + <Subtitle /> + <Description /> + <Primary /> + <Controls /> + <Stories includePrimary={false} /> + <ToastContainer /> + </> + ), + }, }, + decorators: [ + (Story, context) => { + if (context.viewMode === 'docs') { + return <Story />; + } + return ( + <> + <Story /> + <ToastContainer /> + </> + ); + }, + ], }; export default meta; -type Story = StoryObj<typeof Alert>; +type Story = StoryObj<AlertProps>; const Template: StoryFn<AlertProps> = (args) => ( <> - <ToastContainer /> - <div style={{ height: 200 }}> - <VerticalSpacing> - <Row> - <Col lg={12}> - <Button - onClick={() => - sendNotification( - { type: 'success', title: 'Notice', children: 'Something was successful!', ...args }, - { autoClose: 5000 } - ) - } - > - Show success toast - </Button> - </Col> - </Row> - <Row> - <Col> - <Button - onClick={() => - sendNotification( - { type: 'warning', title: 'Notice', icon: 'warning', children: 'Warning!', ...args }, - { autoClose: 5000 } - ) - } - > - Show warning toast - </Button> - </Col> - </Row> - <Row> - <Col> - <Button - onClick={() => - sendNotification( - { type: 'danger', title: 'Notice', icon: 'error', children: 'Something went wrong!', ...args }, - { autoClose: 5000 } - ) - } - > - Show danger toast - </Button> - </Col> - </Row> - <Row> - <Col> - <Button - onClick={() => - sendNotification( - { - type: 'info', - title: 'Notice', - icon: 'info', - children: 'Some info text that can usually be very long!', - ...args, - }, - { autoClose: 5000 } - ) - } - > - Show info toast - </Button> - </Col> - </Row> - </VerticalSpacing> - </div> + <VerticalSpacing> + <Row> + <Col lg={12}> + <Button + onClick={() => + sendNotification({ type: 'success', title: 'Notice', children: 'Something was successful!', ...args }) + } + > + Show success toast + </Button> + </Col> + </Row> + <Row> + <Col> + <Button + onClick={() => + sendNotification({ type: 'warning', title: 'Notice', icon: 'warning', children: 'Warning!', ...args }) + } + > + Show warning toast + </Button> + </Col> + </Row> + <Row> + <Col> + <Button + onClick={() => + sendNotification({ + type: 'danger', + title: 'Notice', + icon: 'error', + children: 'Something went wrong!', + ...args, + }) + } + > + Show danger toast + </Button> + </Col> + </Row> + <Row> + <Col> + <Button + onClick={() => + sendNotification({ + type: 'info', + title: 'Notice', + icon: 'info', + children: 'Some info text that can usually be very long!', + ...args, + }) + } + > + Show info toast + </Button> + </Col> + </Row> + </VerticalSpacing> </> ); @@ -105,3 +129,130 @@ export const Default: Story = { render: Template, args: {}, }; + +export const CustomTimerForAutoclose: Story = { + render: (args) => ( + <VerticalSpacing> + <Row> + <Col> + <Button + onClick={() => + sendNotification( + { type: 'success', title: '2s Toast', children: 'Closes after 2s', ...args }, + { autoClose: 2000, hideProgressBar: false } + ) + } + > + Auto close in 2s + </Button> + </Col> + <Col> + <Button + onClick={() => + sendNotification( + { type: 'info', title: '10s Toast', children: 'Closes after 10s', ...args }, + { autoClose: 10000, hideProgressBar: false } + ) + } + > + Auto close in 10s + </Button> + </Col> + </Row> + </VerticalSpacing> + ), +}; + +export const PersistentToast: Story = { + render: (args) => ( + <Button + onClick={() => + sendNotification( + { type: 'warning', title: 'Persistent', children: 'Stays until closed', ...args }, + { autoClose: false } + ) + } + > + Show persistent toast + </Button> + ), +}; + +export const HoverBehavior: Story = { + render: (args) => ( + <Row> + <Col> + <Button + onClick={() => + sendNotification( + { type: 'info', title: 'Pauses', children: 'Timer stops when hovered', ...args }, + { pauseOnHover: true, autoClose: 4000, hideProgressBar: false } + ) + } + > + Pause on hover + </Button> + </Col> + <Col> + <Button + onClick={() => + sendNotification( + { type: 'danger', title: 'No Pause', children: 'Closes even if hovered', ...args }, + { pauseOnHover: false, autoClose: 4000, hideProgressBar: false } + ) + } + > + No pause on hover + </Button> + </Col> + </Row> + ), +}; + +/** + * Key guidelines for developers: + * 1. Use appropriate ARIA roles: + * - role="status" for non-critical notifications (screen readers announce politely). + * - role="alert" for critical errors (screen readers announce immediately). + * 2. Ensure focus is not stolen from user actions; toasts should not interrupt workflow. + * 3. Ensure toasts can be dismissed or automatically close after a reasonable time. + * + * <a href="https://tedi.tehik.ee/1ee8444b7/p/35370f-toast/b/33c51e" target="_BLANK">Accessibility guidelines ↗</a> + */ + +export const WCAGCompliance: Story = { + render: (args) => ( + <Row> + <Col> + <Button + onClick={() => + sendNotification( + { type: 'success', title: 'Success', children: 'Screen reader friendly', role: 'status', ...args }, + { autoClose: 5000, hideProgressBar: false } + ) + } + > + Success (role=status) + </Button> + </Col> + <Col> + <Button + onClick={() => + sendNotification( + { + type: 'danger', + title: 'Error', + children: 'Screen reader alerts immediately', + role: 'alert', + ...args, + }, + { autoClose: 5000, hideProgressBar: false } + ) + } + > + Error (role=alert) + </Button> + </Col> + </Row> + ), +}; diff --git a/libs/react-components/src/tedi/components/notifications/toast/toast.tsx b/libs/react-components/src/tedi/components/notifications/toast/toast.tsx index 3406f2f9d..e761754f1 100644 --- a/libs/react-components/src/tedi/components/notifications/toast/toast.tsx +++ b/libs/react-components/src/tedi/components/notifications/toast/toast.tsx @@ -1,6 +1,7 @@ import { Slide, toast, ToastContainer, ToastOptions } from 'react-toastify'; import { Alert, AlertProps } from '../alert/alert'; +import styles from './toast.module.scss'; import 'react-toastify/dist/ReactToastify.css'; @@ -18,7 +19,12 @@ const toastDefaultOptions: ToastOptions = { }; export const sendNotification = (props: AlertProps, toastOptions?: ToastOptions) => { - const mergedToastOptions = { ...toastDefaultOptions, ...toastOptions }; + const mergedToastOptions: ToastOptions = { + ...toastDefaultOptions, + ...toastOptions, + progressClassName: `${styles['tedi-toast__progress']} ${styles[`tedi-toast__progress--${props.type}`]}`, + }; + const id = toast( () => ( <Alert From bc38e591fb7161dbb8a397fcf20cf6163a19d301 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Wed, 8 Oct 2025 12:20:54 +0000 Subject: [PATCH 18/24] chore(release): 13.1.0-rc.20 # [@tehik-ee/tedi-react-v13.1.0-rc.20](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.19...react-13.1.0-rc.20) (2025-10-08) ### Bug Fixes * **alert,toast:** enhance accessibility, add titleElement prop to override default heading element, better Toast stories, add documentation [#1009](https://github.com/TEHIK-EE/tedi-design-system/issues/1009) ([#1126](https://github.com/TEHIK-EE/tedi-design-system/issues/1126)) ([f922907](https://github.com/TEHIK-EE/tedi-design-system/commit/f92290772259b8b3ff19a2cc5a1f1d9e9b24d610)) --- libs/react-components/CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libs/react-components/CHANGELOG.md b/libs/react-components/CHANGELOG.md index 673ab462b..77e4fd802 100644 --- a/libs/react-components/CHANGELOG.md +++ b/libs/react-components/CHANGELOG.md @@ -1,3 +1,10 @@ +# [@tehik-ee/tedi-react-v13.1.0-rc.20](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.19...react-13.1.0-rc.20) (2025-10-08) + + +### Bug Fixes + +* **alert,toast:** enhance accessibility, add titleElement prop to override default heading element, better Toast stories, add documentation [#1009](https://github.com/TEHIK-EE/tedi-design-system/issues/1009) ([#1126](https://github.com/TEHIK-EE/tedi-design-system/issues/1126)) ([f922907](https://github.com/TEHIK-EE/tedi-design-system/commit/f92290772259b8b3ff19a2cc5a1f1d9e9b24d610)) + # [@tehik-ee/tedi-react-v13.1.0-rc.19](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.18...react-13.1.0-rc.19) (2025-10-08) From 6380a9a82637ea360c4d0622799cc7591ef3486d Mon Sep 17 00:00:00 2001 From: Airike Jaska <95303654+airikej@users.noreply.github.com> Date: Thu, 9 Oct 2025 13:56:14 +0300 Subject: [PATCH 19/24] fix(textfield): fix input param passing #1132 (#1166) --- .../components/form/textfield/textfield.tsx | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/libs/react-components/src/tedi/components/form/textfield/textfield.tsx b/libs/react-components/src/tedi/components/form/textfield/textfield.tsx index dfca42ba0..f94f5acb3 100644 --- a/libs/react-components/src/tedi/components/form/textfield/textfield.tsx +++ b/libs/react-components/src/tedi/components/form/textfield/textfield.tsx @@ -279,6 +279,7 @@ export const TextField = forwardRef<TextFieldForwardRef, TextFieldProps>((props, const renderInputElement = React.useMemo((): JSX.Element | null => { const sharedProps = { + ...input, id, name, ...(hideLabel ? { 'aria-label': label } : {}), @@ -308,25 +309,26 @@ export const TextField = forwardRef<TextFieldForwardRef, TextFieldProps>((props, return null; }, [ - disabled, - helperId, - id, input, + id, + name, + hideLabel, + label, + helperId, + disabled, inputClassName, isArrowsHidden, - isInputRef, + required, isInvalid, - isTextAreaRef, - name, - onBlur, - onChangeHandler, - onFocus, placeholder, readOnly, - required, + onChangeHandler, value, - hideLabel, - label, + onBlur, + onFocus, + isTextAreaRef, + props, + isInputRef, ]); const renderClearButton = React.useMemo(() => { @@ -340,7 +342,7 @@ export const TextField = forwardRef<TextFieldForwardRef, TextFieldProps>((props, }; return <ClosingButton {...clearButtonProps} />; - }, [clearInput, getLabel, label, size]); + }, [clearInput, disabled, getLabel, size]); const renderRightArea = React.useMemo(() => { return ( From 0c912cfc97a9bd69fc2ba873ce07aee3ac8aa94c Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Thu, 9 Oct 2025 10:59:02 +0000 Subject: [PATCH 20/24] chore(release): 13.1.0-rc.21 # [@tehik-ee/tedi-react-v13.1.0-rc.21](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.20...react-13.1.0-rc.21) (2025-10-09) ### Bug Fixes * **textfield:** fix input param passing [#1132](https://github.com/TEHIK-EE/tedi-design-system/issues/1132) ([#1166](https://github.com/TEHIK-EE/tedi-design-system/issues/1166)) ([6380a9a](https://github.com/TEHIK-EE/tedi-design-system/commit/6380a9a82637ea360c4d0622799cc7591ef3486d)) --- libs/react-components/CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libs/react-components/CHANGELOG.md b/libs/react-components/CHANGELOG.md index 77e4fd802..800e5028a 100644 --- a/libs/react-components/CHANGELOG.md +++ b/libs/react-components/CHANGELOG.md @@ -1,3 +1,10 @@ +# [@tehik-ee/tedi-react-v13.1.0-rc.21](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.20...react-13.1.0-rc.21) (2025-10-09) + + +### Bug Fixes + +* **textfield:** fix input param passing [#1132](https://github.com/TEHIK-EE/tedi-design-system/issues/1132) ([#1166](https://github.com/TEHIK-EE/tedi-design-system/issues/1166)) ([6380a9a](https://github.com/TEHIK-EE/tedi-design-system/commit/6380a9a82637ea360c4d0622799cc7591ef3486d)) + # [@tehik-ee/tedi-react-v13.1.0-rc.20](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.19...react-13.1.0-rc.20) (2025-10-08) From ce0dcfd02df7b88c389f7d1afe752545d5b63377 Mon Sep 17 00:00:00 2001 From: Airike Jaska <95303654+airikej@users.noreply.github.com> Date: Fri, 10 Oct 2025 13:14:52 +0300 Subject: [PATCH 21/24] refactor(angular): move Angular to standalone repo #148 BREAKING CHANGE: the package name has changed. Update all imports and dependencies to use the new package name. --- .../.codecov.yml => .codecov.yml | 0 .../.eslintrc.json => .eslintrc.json | 2 +- .github/workflows/angular-release.yml | 14 +- .github/workflows/angular-test-and-lint.yml | 19 +- .github/workflows/core-release.yml | 36 - .github/workflows/deploy-github-pages.yml | 19 +- .github/workflows/index_suffix.html | 17 +- .github/workflows/publish_mirror.sh | 21 - .github/workflows/react-release.yml | 100 - .github/workflows/react-test-and-lint.yml | 109 - .gitignore | 6 +- .../.releaserc.json => .releaserc.json | 0 .../.storybook => .storybook}/main.ts | 14 +- .../manager-head.html | 0 .../.storybook => .storybook}/manager.js | 0 .../preview-head.html | 0 .../.storybook => .storybook}/preview.tsx | 0 .../.storybook => .storybook}/tehik-theme.js | 0 .../.storybook => .storybook}/tsconfig.json | 0 .../.storybook => .storybook}/typings.d.ts | 0 .../CHANGELOG.md => CHANGELOG.md | 0 README.md | 58 +- .../angular.json => angular.json | 24 +- ...matic.config.json => chromatic.config.json | 0 .../accordion-icon.component.html | 0 .../accordion-icon.component.scss | 0 .../accordion-icon.component.ts | 0 .../accordion-item-content.component.html | 0 .../accordion-item-content.component.scss | 0 .../accordion-item-content.component.ts | 0 .../accordion-item-header.component.html | 0 .../accordion-item-header.component.scss | 0 .../accordion-item-header.component.ts | 2 +- .../accordion-item.component.html | 0 .../accordion-item.component.scss | 0 .../accordion-item.component.ts | 0 .../cards/accordion/accordion.stories.ts | 2 +- .../accordion/accordion.component.html | 0 .../accordion/accordion.component.scss | 0 .../accordion/accordion.component.ts | 0 .../components/cards/accordion/index.ts | 0 .../components/cards/card/_card-mixins.scss | 2 +- .../cards/card/card-colors.directive.ts | 0 .../card-content/card-content.component.html | 0 .../card-content/card-content.component.scss | 0 .../card-content/card-content.component.ts | 0 .../card-header/card-header.component.html | 0 .../card-header/card-header.component.scss | 0 .../card/card-header/card-header.component.ts | 0 .../cards/card/card-padding.directive.ts | 0 .../card/card-row/card-row.component.html | 0 .../card/card-row/card-row.component.scss | 0 .../cards/card/card-row/card-row.component.ts | 0 .../components/cards/card/card.component.html | 0 .../components/cards/card/card.component.scss | 2 +- .../components/cards/card/card.component.ts | 0 .../components/cards/card/index.ts | 0 .../card/stories/card-story-templates.ts | 0 .../cards/card/stories/card.stories.ts | 2 +- .../components/cards/index.ts | 0 .../checkbox-card-group.component.ts | 2 +- .../checkbox-group.component.html | 0 .../checkbox-group.component.scss | 0 .../checkbox-group.component.ts | 4 +- .../form/checkbox/checkbox.stories.ts | 0 .../checkbox/checkbox/checkbox.component.html | 0 .../checkbox/checkbox/checkbox.component.scss | 2 +- .../checkbox/checkbox/checkbox.component.ts | 4 +- .../components/form/checkbox/index.ts | 0 .../choicegroup/_choicegroup-card-mixins.scss | 2 +- .../form/choicegroup/choicegroup.directive.ts | 0 .../form/choicegroup/choicegroup.styles.scss | 2 +- .../form/file-dropzone/constants.ts | 0 .../file-dropzone.component.html | 0 .../file-dropzone.component.scss | 0 .../file-dropzone/file-dropzone.component.ts | 2 +- .../file-dropzone/file-dropzone.react.scss | 6 +- .../file-dropzone/file-dropzone.stories.ts | 0 .../form/file-dropzone/file.service.ts | 2 +- .../components/form/file-dropzone/index.ts | 0 .../components/form/file-dropzone/types.ts | 2 +- .../components/form/file-dropzone/utils.ts | 0 .../form/form-field/form-field.component.scss | 0 .../form/form-field/form-field.component.ts | 0 .../form/form-field/form-field.stories.ts | 2 +- .../components/form/index.ts | 0 .../input-group/input-group.component.html | 0 .../input-group/input-group.component.scss | 14 +- .../form/input-group/input-group.component.ts | 2 +- .../form/input-group/input-group.stories.ts | 2 +- .../form/input/input.component.scss | 2 +- .../components/form/input/input.component.ts | 0 .../form/input/textfield.stories.ts | 0 .../components/form/radio/index.ts | 0 .../radio-card-group.component.ts | 2 +- .../radio-group/radio-group.component.html | 0 .../radio-group/radio-group.component.scss | 0 .../radio-group/radio-group.component.ts | 2 +- .../components/form/radio/radio.stories.ts | 0 .../form/radio/radio/radio.component.html | 0 .../form/radio/radio/radio.component.scss | 2 +- .../form/radio/radio/radio.component.ts | 4 +- .../form/search/search.component.html | 0 .../form/search/search.component.scss | 2 +- .../form/search/search.component.ts | 2 +- .../components/form/search/search.stories.ts | 2 +- .../components/form/select/index.ts | 0 .../form/select/multiselect.component.html | 0 .../form/select/multiselect.component.ts | 2 +- .../form/select/multiselect.stories.ts | 2 +- .../form/select/select-option.component.ts | 0 .../form/select/select.component.html | 0 .../form/select/select.component.scss | 2 +- .../form/select/select.component.ts | 2 +- .../components/form/select/select.stories.ts | 2 +- .../form/textarea/textarea.component.scss | 2 +- .../form/textarea/textarea.component.ts | 0 .../form/textarea/textarea.stories.ts | 0 .../breadcrumbs/breadcrumbs.component.html | 0 .../breadcrumbs/breadcrumbs.component.scss | 0 .../breadcrumbs/breadcrumbs.component.spec.ts | 0 .../breadcrumbs/breadcrumbs.component.ts | 2 +- .../breadcrumbs/breadcrumbs.stories.ts | 2 +- .../components/navigation/index.ts | 0 .../pagination-page.component.html | 0 .../pagination-page.component.scss | 0 .../pagination-page.component.ts | 2 +- .../pagination/pagination.component.html | 0 .../pagination/pagination.component.scss | 4 +- .../pagination/pagination.component.ts | 2 +- .../pagination/pagination.stories.ts | 0 .../navigation/pagination/pagination.utils.ts | 0 .../components/navigation/tabs/index.ts | 0 .../tab-content/tab-content.component.html | 0 .../tabs/tab-content/tab-content.component.ts | 0 .../navigation/tabs/tab/tab.component.html | 0 .../navigation/tabs/tab/tab.component.scss | 2 +- .../navigation/tabs/tab/tab.component.ts | 0 .../navigation/tabs/tabs.component.html | 0 .../navigation/tabs/tabs.component.scss | 4 +- .../navigation/tabs/tabs.component.ts | 2 +- .../navigation/tabs/tabs.stories.ts | 0 .../dropdown-item.component.scss | 2 +- .../dropdown-item/dropdown-item.component.ts | 0 .../dropdown-item/dropdown-item.stories.ts | 2 +- .../dropdown-trigger.directive.ts | 0 .../overlay/dropdown/dropdown.component.html | 0 .../overlay/dropdown/dropdown.component.scss | 2 +- .../overlay/dropdown/dropdown.component.ts | 2 +- .../overlay/dropdown/dropdown.stories.ts | 2 +- .../components/overlay/index.ts | 0 .../modal/footer/modal-footer.component.html | 0 .../modal/footer/modal-footer.component.scss | 2 +- .../modal/footer/modal-footer.component.ts | 2 +- .../modal/header/modal-header.component.html | 0 .../modal/header/modal-header.component.scss | 2 +- .../modal/header/modal-header.component.ts | 2 +- .../components/overlay/modal/index.ts | 0 .../overlay/modal/modal.component.html | 0 .../overlay/modal/modal.component.scss | 2 +- .../overlay/modal/modal.component.ts | 2 +- .../components/overlay/modal/modal.stories.ts | 0 .../components/table/index.ts | 0 .../components/table/table-styles.stories.ts | 0 .../table-styles/table-styles.component.html | 0 .../table-styles/table-styles.component.scss | 2 +- .../table-styles/table-styles.component.ts | 0 .../components/tags/index.ts | 0 .../status-badge/status-badge.component.html | 0 .../status-badge/status-badge.component.scss | 2 +- .../status-badge/status-badge.component.ts | 2 +- .../tags/status-badge/status-badge.stories.ts | 2 +- .../components/tags/tag/tag.component.html | 0 .../components/tags/tag/tag.component.scss | 2 +- .../components/tags/tag/tag.component.ts | 2 +- .../components/tags/tag/tag.stories.ts | 0 .../helpers/unique-id.ts | 0 .../community => community}/index.ts | 0 .../community => community}/ng-package.json | 0 .../jest.config.ts => jest.config.ts | 2 +- libs/angular-components/README.md | 4 - libs/angular-components/package-lock.json | 23426 ------------- libs/angular-components/package.json | 95 - libs/angular-components/styles/index.scss | 2 - .../form/label/label.component.scss | 19 - .../header-actions.component.scss | 29 - .../header-language.component.scss | 33 - .../header-login/header-login.component.scss | 35 - .../header-logout.component.scss | 50 - .../header-profile.component.scss | 91 - .../header-role/header-role.component.scss | 207 - .../layout/header/header.component.scss | 37 - libs/angular-components/tsconfig.eslint.json | 5 - libs/react-components/.babelrc | 11 - libs/react-components/.codecov.yml | 6 - libs/react-components/.eslintignore | 2 - libs/react-components/.eslintrc.json | 76 - libs/react-components/.prettierignore | 6 - libs/react-components/.prettierrc | 6 - libs/react-components/.releaserc.json | 34 - libs/react-components/.storybook/main.ts | 80 - .../.storybook/manager-head.html | 2 - libs/react-components/.storybook/manager.js | 7 - .../.storybook/preview-head.html | 5 - libs/react-components/.storybook/preview.tsx | 86 - .../.storybook/storybook-decorator.tsx | 23 - .../.storybook/tehik-theme.js | 19 - .../react-components/.storybook/tsconfig.json | 17 - libs/react-components/.stylelintrc.json | 23 - libs/react-components/CHANGELOG.md | 4424 --- libs/react-components/README.md | 4 - libs/react-components/chromatic.config.json | 7 - libs/react-components/customTemplate.cjs | 7 - libs/react-components/declaration.d.ts | 12 - libs/react-components/design-tokens/README.md | 9 - .../design-tokens/generate-variables.js | 40 - .../react-components/design-tokens/index.scss | 2 - .../design-tokens/mixins.scss | 60 - .../design-tokens/package.json | 8 - .../design-tokens/project.json | 19 - .../design-tokens/tokens.json | 105 - .../design-tokens/variables.scss | 85 - libs/react-components/jest-mocks.js | 14 - libs/react-components/jest-setup.js | 2 - libs/react-components/jest.config.ts | 32 - libs/react-components/package-lock.json | 23336 ------------- libs/react-components/package.json | 150 - .../accordion-item-content.tsx | 42 - .../accordion-item-header.tsx | 136 - .../accordion-item/accordion-item.tsx | 89 - .../accordion/accordion.module.scss | 40 - .../accordion/accordion.stories.tsx | 307 - .../components/accordion/accordion.tsx | 88 - .../community/components/accordion/index.tsx | 4 - .../components/anchor/anchor-helpers.tsx | 26 - .../components/anchor/anchor.spec.tsx | 10 - .../components/anchor/anchor.stories.tsx | 228 - .../community/components/anchor/anchor.tsx | 62 - .../components/button-content/README.md | 3 - .../button-content/button-content.module.scss | 412 - .../button-content/button-content.tsx | 191 - .../components/button/button.spec.tsx | 25 - .../components/button/button.stories.tsx | 245 - .../community/components/button/button.tsx | 91 - .../card/card-content/card-content.tsx | 75 - .../community/components/card/card-context.ts | 7 - .../card/card-header/card-header.tsx | 73 - .../card-notification.module.scss | 21 - .../card-notification/card-notification.tsx | 23 - .../components/card/card.module.scss | 146 - .../components/card/card.stories.tsx | 383 - .../src/community/components/card/card.tsx | 89 - .../src/community/components/card/index.ts | 4 - .../src/community/components/card/utility.ts | 37 - .../components/collapse/collapse.module.scss | 22 - .../components/collapse/collapse.spec.tsx | 44 - .../components/collapse/collapse.stories.tsx | 96 - .../components/collapse/collapse.tsx | 146 - .../src/community/components/commonTypes.tsx | 39 - .../components/dropdown/dropdown.module.scss | 39 - .../components/dropdown/dropdown.stories.tsx | 45 - .../components/dropdown/dropdown.tsx | 185 - .../components/ellipsis/ellipsis.module.scss | 13 - .../components/ellipsis/ellipsis.stories.tsx | 72 - .../components/ellipsis/ellipsis.tsx | 63 - .../components/feedback/feedback.module.scss | 34 - .../components/feedback/feedback.stories.tsx | 101 - .../components/feedback/feedback.tsx | 77 - .../components/form/check/check.module.scss | 76 - .../components/form/check/check.stories.tsx | 171 - .../community/components/form/check/check.tsx | 104 - .../form/choice-group/choice-group-context.ts | 17 - .../choice-group/choice-group.module.scss | 14 - .../choice-group/choice-group.stories.tsx | 304 - .../form/choice-group/choice-group.tsx | 284 - .../form/choice-group/choice-group.types.ts | 21 - .../choice-group-check/choice-group-check.tsx | 54 - .../choice-group-radio/choice-group-radio.tsx | 54 - .../filter-item/filter-item.module.scss | 40 - .../components/filter-item/filter-item.tsx | 46 - .../light-item/light-item.module.scss | 36 - .../components/light-item/light-item.tsx | 44 - .../selector-item/selector-item.module.scss | 81 - .../selector-item/selector-item.tsx | 48 - .../components/form/choice-group/index.ts | 4 - .../components/form/choice-input.types.ts | 57 - .../file-upload/examples/multiple-handled.tsx | 10 - .../form/file-upload/file-upload.module.scss | 36 - .../form/file-upload/file-upload.stories.tsx | 107 - .../form/file-upload/file-upload.tsx | 277 - .../components/form/file-upload/index.ts | 1 - .../components/form/form.stories.tsx | 59 - .../examples/hidden-multiselect.tsx | 44 - .../hidden-field/examples/hidden-select.tsx | 42 - .../examples/hidden-textfield.tsx | 21 - .../hidden-field/hidden-field.module.scss | 27 - .../hidden-field/hidden-field.stories.tsx | 20 - .../form/hidden-field/hidden-field.tsx | 149 - .../pickers/calendar/calendar.module.scss | 26 - .../pickers/calendar/calendar.stories.tsx | 78 - .../form/pickers/calendar/calendar.tsx | 178 - .../pickers/datepicker/datepicker.stories.tsx | 171 - .../form/pickers/datepicker/datepicker.tsx | 183 - .../datetimepicker/datetimepicker.stories.tsx | 190 - .../pickers/datetimepicker/datetimepicker.tsx | 238 - .../components/form/pickers/index.ts | 4 - .../mui-input-transition.tsx | 68 - .../pickers/timepicker/timepicker.stories.tsx | 147 - .../form/pickers/timepicker/timepicker.tsx | 157 - .../components/form/radio/radio.module.scss | 72 - .../components/form/radio/radio.stories.tsx | 151 - .../community/components/form/radio/radio.tsx | 91 - .../components/form/select/examples/async.tsx | 50 - .../form/select/examples/custom-option.tsx | 132 - .../form/select/examples/editable.tsx | 48 - .../form/select/examples/multiple-handled.tsx | 37 - .../components/form/select/select.module.scss | 181 - .../components/form/select/select.stories.tsx | 219 - .../components/form/select/select.tsx | 648 - .../components/block-style-controls.tsx | 55 - .../components/inline-style-controls.tsx | 48 - .../text-editor/components/style-button.tsx | 30 - .../form/text-editor/text-editor.module.scss | 52 - .../form/text-editor/text-editor.stories.tsx | 56 - .../form/text-editor/text-editor.tsx | 194 - .../components/form/toggle/toggle.module.scss | 228 - .../components/form/toggle/toggle.stories.tsx | 101 - .../components/form/toggle/toggle.tsx | 173 - .../components/icon/icon.module.scss | 16 - .../components/icon/icon.stories.tsx | 186 - .../src/community/components/icon/icon.tsx | 98 - .../breadcrumbs/breadcrumbs.module.scss | 17 - .../breadcrumbs/breadcrumbs.stories.tsx | 46 - .../layout/breadcrumbs/breadcrumbs.tsx | 74 - .../layout/breadcrumbs/crumb/crumb.tsx | 44 - .../layout/footer/footer.module.scss | 61 - .../layout/footer/footer.stories.tsx | 192 - .../components/layout/footer/footer.tsx | 113 - .../header-bottom-content.module.scss | 3 - .../header-bottom-content.stories.tsx | 39 - .../header-bottom-content.tsx | 32 - .../header-content/header-content.stories.tsx | 21 - .../header-content/header-content.tsx | 12 - .../header-dropdown.module.scss | 7 - .../header-dropdown.stories.tsx | 87 - .../header-dropdown/header-dropdown.tsx | 93 - .../header-language.stories.tsx | 50 - .../header-language/header-language.tsx | 106 - .../header-modal/header-modal.stories.tsx | 80 - .../components/header-modal/header-modal.tsx | 74 - .../header-navigation/header-navigation.tsx | 26 - .../components/header-navigation/readme.md | 2 - .../header-notification.module.scss | 3 - .../header-notification.stories.tsx | 42 - .../header-notification.tsx | 46 - .../header-role/header-role.module.scss | 12 - .../header-role/header-role.stories.tsx | 83 - .../components/header-role/header-role.tsx | 166 - .../header-settings.stories.tsx | 90 - .../header-settings/header-settings.tsx | 128 - .../header/components/logo/logo.module.scss | 24 - .../layout/header/components/logo/logo.tsx | 34 - .../sidenav-toggle/sidenav-toggle.module.scss | 29 - .../sidenav-toggle/sidenav-toggle.tsx | 38 - .../skip-links/skip-links.module.scss | 18 - .../skip-links/skip-links.stories.tsx | 17 - .../components/skip-links/skip-links.tsx | 40 - .../layout/header/header.stories.tsx | 156 - .../layout/header/header/header.module.scss | 76 - .../layout/header/header/header.tsx | 202 - .../layout/header/headerDocumentation.mdx | 107 - .../components/layout/header/index.ts | 9 - .../src/community/components/layout/index.ts | 6 - .../components/layout/layout-context.ts | 55 - .../layout/layout/layout.module.scss | 66 - .../layout/layout/layout.stories.tsx | 214 - .../components/layout/layout/layout.tsx | 187 - .../components/layout/layoutDocumentation.mdx | 48 - .../layout/sidenav/sidenav.module.scss | 208 - .../layout/sidenav/sidenav.spec.tsx | 10 - .../layout/sidenav/sidenav.stories.tsx | 121 - .../components/layout/sidenav/sidenav.tsx | 230 - .../components/layout/sidenav/utility.ts | 13 - .../base-map-selection.module.scss | 253 - .../base-map-selection.stories.tsx | 129 - .../base-map-selection/base-map-selection.tsx | 74 - .../button-group/button-group.module.scss | 130 - .../button-group/button-group.tsx | 118 - .../carousel/carousel.module.scss | 40 - .../carousel/carousel.stories.tsx | 34 - .../map-components/carousel/carousel.tsx | 79 - .../color-and-icon-picker.module.scss | 124 - .../color-and-icon-picker.stories.tsx | 88 - .../color-and-icon-picker.tsx | 183 - .../comparison/comparison.module.scss | 129 - .../comparison/comparison.stories.tsx | 88 - .../map-components/comparison/comparison.tsx | 147 - .../directions/direction-item.tsx | 70 - .../directions/directions.module.scss | 140 - .../directions/directions.stories.tsx | 112 - .../map-components/directions/directions.tsx | 138 - .../map-components/directions/index.ts | 2 - .../edit-actions/editing-actions.module.scss | 59 - .../edit-actions/editing-actions.tsx | 14 - .../left-panel/left-panel-content.tsx | 44 - .../left-panel/left-panel-footer.tsx | 47 - .../left-panel/left-panel-header.tsx | 55 - .../left-panel/left-panel.module.scss | 88 - .../left-panel/left-panel.stories.tsx | 207 - .../map-components/left-panel/left-panel.tsx | 29 - .../map-components/legend/legend.module.scss | 21 - .../map-components/legend/legend.stories.tsx | 36 - .../map-components/legend/legend.tsx | 46 - .../map-components/map-accordion/index.ts | 0 .../map-accordion-item-content.tsx | 43 - .../map-accordion-item-header.tsx | 187 - .../map-accordion/map-accordion-item.tsx | 72 - .../map-accordion/map-accordion.module.scss | 140 - .../map-accordion/map-accordion.stories.tsx | 107 - .../map-accordion/map-accordion.tsx | 154 - .../map-button/map-button.module.scss | 92 - .../map-button/map-button.stories.tsx | 231 - .../map-components/map-button/map-button.tsx | 106 - .../map-dropdown/map-dropdown.module.scss | 46 - .../map-dropdown/map-dropdown.tsx | 288 - .../map-info/map-info.module.scss | 37 - .../map-info/map-info.stories.tsx | 67 - .../map-components/map-info/map-info.tsx | 48 - .../map-layer/map-layer.module.scss | 105 - .../map-layer/map-layer.stories.tsx | 68 - .../map-components/map-layer/map-layer.tsx | 219 - .../map-preview/map-preview.module.scss | 58 - .../map-preview/map-preview.stories.tsx | 28 - .../map-preview/map-preview.tsx | 114 - .../map-select/map-select.module.scss | 10 - .../map-components/map-select/map-select.tsx | 18 - .../resizer/resizer.module.scss | 188 - .../resizer/resizer.stories.tsx | 84 - .../map-components/resizer/resizer.tsx | 160 - .../map-components/right-panel/examples.tsx | 90 - .../right-panel/right-panel.module.scss | 39 - .../right-panel/right-panel.stories.tsx | 56 - .../right-panel/right-panel.tsx | 162 - .../scale-bar/scale-bar.module.scss | 37 - .../scale-bar/scale-bar.stories.tsx | 22 - .../map-components/scale-bar/scale-bar.tsx | 56 - .../map-components/sheet/sheet.module.scss | 131 - .../map-components/sheet/sheet.stories.tsx | 187 - .../components/map-components/sheet/sheet.tsx | 245 - .../timeline/timeline.module.scss | 222 - .../timeline/timeline.stories.tsx | 60 - .../map-components/timeline/timeline.tsx | 324 - .../src/community/components/modal/index.ts | 4 - .../components/modal/modal-closer.tsx | 24 - .../components/modal/modal-provider.tsx | 141 - .../components/modal/modal-trigger.tsx | 19 - .../components/modal/modal.module.scss | 73 - .../components/modal/modal.stories.tsx | 296 - .../src/community/components/modal/modal.tsx | 161 - .../placeholder/placeholder.stories.tsx | 47 - .../components/placeholder/placeholder.tsx | 97 - .../components/status/status.module.scss | 33 - .../components/status/status.stories.tsx | 39 - .../community/components/status/status.tsx | 46 - .../community/components/stepper/index.tsx | 2 - .../src/community/components/stepper/step.tsx | 47 - .../components/stepper/stepper-context.ts | 15 - .../components/stepper/stepper-nav.tsx | 145 - .../components/stepper/stepper.module.scss | 149 - .../components/stepper/stepper.stories.tsx | 158 - .../community/components/stepper/stepper.tsx | 178 - .../components/table-of-contents/index.ts | 2 - .../table-of-contents-item.tsx | 114 - .../table-of-contents-items.tsx | 48 - .../table-of-contents-modal.tsx | 125 - .../table-of-contents.module.scss | 21 - .../table-of-contents.stories.tsx | 266 - .../table-of-contents/table-of-contents.tsx | 122 - .../customize-table-cell.module.scss | 3 - .../customize-table-cell.tsx | 43 - .../components/examples/custom-expand-row.tsx | 137 - .../components/table/components/helpers.tsx | 137 - .../pagination/PaginationNextButton.tsx | 40 - .../pagination/PaginationPageButton.tsx | 42 - .../pagination/pagination.module.scss | 96 - .../components/pagination/pagination.tsx | 94 - .../components/pagination/use-pagination.ts | 127 - .../components/table-date-filter.tsx | 136 - .../components/table-select-filter.tsx | 125 - .../components/table-text-filter.tsx | 82 - .../components/table-filter/filter-fn.ts | 86 - .../table-filter/table-filter-context.tsx | 34 - .../components/table-filter/table-filter.tsx | 100 - .../components/table-layout/table-layout.tsx | 279 - .../components/table-loader/table-loader.tsx | 31 - .../src/community/components/table/index.ts | 5 - .../components/table/table-context.tsx | 33 - .../components/table/table.module.scss | 169 - .../components/table/table.stories.tsx | 740 - .../src/community/components/table/table.tsx | 323 - .../community/components/table/table.types.ts | 307 - .../src/community/components/tabs/index.ts | 4 - .../components/tabs/tabs-context.tsx | 11 - .../components/tabs/tabs-item/tabs-item.tsx | 57 - .../tabs/tabs-nav/tabs-nav-item.tsx | 36 - .../tabs/tabs-nav/tabs-nav.module.scss | 37 - .../components/tabs/tabs-nav/tabs-nav.tsx | 35 - .../components/tabs/tabs.stories.tsx | 90 - .../components/tabs/tabs/tabs.module.scss | 9 - .../community/components/tabs/tabs/tabs.tsx | 151 - .../community/components/tag/tag-examples.tsx | 320 - .../src/community/components/tag/tag.mdx | 30 - .../community/components/tag/tag.module.scss | 193 - .../community/components/tag/tag.stories.tsx | 192 - .../src/community/components/tag/tag.tsx | 116 - .../toggle-open/toggle-open.module.scss | 14 - .../toggle-open/toggle-open.stories.tsx | 38 - .../components/toggle-open/toggle-open.tsx | 42 - .../src/community/components/tooltip/index.ts | 3 - .../components/tooltip/tooltip-provider.tsx | 224 - .../components/tooltip/tooltip-trigger.tsx | 40 - .../components/tooltip/tooltip.module.scss | 50 - .../components/tooltip/tooltip.stories.tsx | 255 - .../community/components/tooltip/tooltip.tsx | 96 - .../typography/heading/heading.spec.tsx | 10 - .../typography/heading/heading.stories.tsx | 113 - .../components/typography/heading/heading.tsx | 23 - .../typography/text/text.stories.tsx | 438 - .../components/typography/text/text.tsx | 110 - .../components/vertical-progress/index.ts | 2 - .../vertical-progress-item.stories.tsx | 118 - .../vertical-progress-item.tsx | 134 - .../vertical-progress.stories.tsx | 129 - .../vertical-progress/vertical-progress.tsx | 50 - .../components/vertical-stepper/index.ts | 3 - .../vertical-stepper/step-item/step-item.tsx | 131 - .../vertical-stepper/sub-item/sub-item.tsx | 70 - .../vertical-stepper.module.scss | 610 - .../vertical-stepper.stories.tsx | 97 - .../vertical-stepper/vertical-stepper.tsx | 32 - .../community/docs/buttons/button-groups.mdx | 9 - .../community/docs/buttons/button-groups.tsx | 283 - .../docs/buttons/buttons-documentation.tsx | 370 - .../src/community/docs/buttons/buttons.mdx | 9 - .../src/community/docs/colors/guidelines.tsx | 120 - .../docs/scale-layout/breaking-points.tsx | 125 - .../docs/scale-layout/development.mdx | 12 - .../src/community/docs/scale-layout/grid.mdx | 8 - .../src/community/docs/scale-layout/grid.tsx | 91 - .../community/docs/scale-layout/spacing.mdx | 9 - .../community/docs/scale-layout/spacing.tsx | 96 - .../background-colors.module.scss | 45 - .../background-colors.stories.tsx | 72 - .../background-colors/background-colors.tsx | 10 - .../helpers/hooks/use-breakpoint-props.mdx | 63 - .../helpers/hooks/use-breakpoint-props.ts | 53 - .../community/helpers/hooks/use-breakpoint.ts | 48 - .../helpers/hooks/use-first-render.ts | 11 - .../src/community/helpers/hooks/use-layout.ts | 29 - .../src/community/helpers/index.ts | 5 - .../community/helpers/polymorphic/types.ts | 29 - libs/react-components/src/community/index.ts | 65 - .../style-provider/style-provider.tsx | 12 - .../src/community/styles/_base.scss | 76 - .../src/community/styles/_fonts.scss | 253 - .../src/community/styles/_helpers.scss | 44 - .../styles/_map-component.variables.scss | 401 - .../src/community/styles/_mixins.scss | 1 - .../src/community/styles/_typography.scss | 64 - .../styles/components/_calendar.scss | 29 - .../styles/components/_datepicker.scss | 22 - .../styles/components/_text-editor.scss | 3 - .../community/styles/components/_toast.scss | 12 - .../src/community/styles/index.scss | 8 - .../src/community/styles/storybook.scss | 114 - .../src/community/types/index.ts | 2 - .../components/base/icon/icon.module.scss | 100 - .../tedi/components/base/icon/icon.spec.tsx | 99 - .../components/base/icon/icon.stories.tsx | 286 - .../src/tedi/components/base/icon/icon.tsx | 143 - .../base/typography/heading/heading.spec.tsx | 10 - .../typography/heading/heading.stories.tsx | 141 - .../base/typography/heading/heading.tsx | 22 - .../base/typography/text/text.spec.tsx | 52 - .../base/typography/text/text.stories.tsx | 250 - .../components/base/typography/text/text.tsx | 113 - .../components/base/typography/typography.mdx | 75 - .../buttons/button-content/README.md | 3 - .../button-content/button-content.module.scss | 537 - .../button-content/button-content.spec.tsx | 81 - .../buttons/button-content/button-content.tsx | 209 - .../button-group/button-group.module.scss | 111 - .../button-group/button-group.spec.tsx | 138 - .../button-group/button-group.stories.tsx | 184 - .../buttons/button-group/button-group.tsx | 79 - .../components/buttons/button/button.spec.tsx | 76 - .../buttons/button/button.stories.tsx | 383 - .../tedi/components/buttons/button/button.tsx | 65 - .../closing-button/closing-button.module.scss | 39 - .../closing-button/closing-button.spec.tsx | 81 - .../closing-button/closing-button.stories.tsx | 81 - .../buttons/closing-button/closing-button.tsx | 61 - .../buttons/collapse/collapse.module.scss | 39 - .../buttons/collapse/collapse.spec.tsx | 97 - .../buttons/collapse/collapse.stories.tsx | 77 - .../components/buttons/collapse/collapse.tsx | 183 - .../floating-button.module.scss | 95 - .../floating-button/floating-button.spec.tsx | 85 - .../floating-button.stories.tsx | 164 - .../floating-button/floating-button.tsx | 101 - .../info-button/info-button.module.scss | 10 - .../buttons/info-button/info-button.spec.tsx | 69 - .../info-button/info-button.stories.tsx | 72 - .../buttons/info-button/info-button.tsx | 33 - .../card/card-content/card-content.spec.tsx | 90 - .../cards/card/card-content/card-content.tsx | 62 - .../components/cards/card/card-context.ts | 7 - .../card/card-header/card-header.spec.tsx | 93 - .../cards/card/card-header/card-header.tsx | 12 - .../card-notification.module.scss | 17 - .../card-notification.spec.tsx | 69 - .../card-notification/card-notification.tsx | 23 - .../cards/card/card-stories-templates.tsx | 463 - .../components/cards/card/card.module.scss | 157 - .../tedi/components/cards/card/card.spec.tsx | 104 - .../components/cards/card/card.stories.tsx | 331 - .../src/tedi/components/cards/card/card.tsx | 123 - .../src/tedi/components/cards/card/index.ts | 4 - .../src/tedi/components/cards/card/utility.ts | 78 - .../heading-with-icon.module.scss | 8 - .../heading-with-icon.spec.tsx | 45 - .../heading-with-icon.stories.tsx | 51 - .../heading-with-icon/heading-with-icon.tsx | 57 - .../content/label/label.module.scss | 30 - .../components/content/label/label.spec.tsx | 100 - .../content/label/label.stories.tsx | 98 - .../tedi/components/content/label/label.tsx | 85 - .../src/tedi/components/content/list/index.ts | 2 - .../content/list/list-item.spec.tsx | 50 - .../components/content/list/list-item.tsx | 42 - .../components/content/list/list.module.scss | 104 - .../components/content/list/list.spec.tsx | 76 - .../components/content/list/list.stories.tsx | 150 - .../src/tedi/components/content/list/list.tsx | 81 - .../content/section/section.module.scss | 14 - .../content/section/section.spec.tsx | 61 - .../content/section/section.stories.tsx | 67 - .../components/content/section/section.tsx | 42 - .../content/text-group/text-group.module.scss | 24 - .../content/text-group/text-group.spec.tsx | 53 - .../content/text-group/text-group.stories.tsx | 197 - .../content/text-group/text-group.tsx | 58 - .../content/truncate/truncate.spec.tsx | 56 - .../content/truncate/truncate.stories.tsx | 59 - .../components/content/truncate/truncate.tsx | 82 - .../form/checkbox/checkbox.module.scss | 117 - .../form/checkbox/checkbox.spec.tsx | 213 - .../form/checkbox/checkbox.stories.tsx | 263 - .../components/form/checkbox/checkbox.tsx | 126 - .../choice-group-context.spec.tsx | 39 - .../form/choice-group/choice-group-context.ts | 17 - .../choice-group/choice-group.module.scss | 23 - .../form/choice-group/choice-group.spec.tsx | 166 - .../choice-group/choice-group.stories.tsx | 478 - .../form/choice-group/choice-group.tsx | 233 - .../form/choice-group/choice-group.types.ts | 6 - .../choice-group-item.module.scss | 257 - .../choice-group-item.spec.tsx | 102 - .../choice-group-item/choice-group-item.tsx | 145 - .../components/form/choice-group/index.ts | 4 - .../components/form/choice-input.types.ts | 64 - .../feedback-text/feedback-text.module.scss | 26 - .../form/feedback-text/feedback-text.spec.tsx | 73 - .../feedback-text/feedback-text.stories.tsx | 55 - .../form/feedback-text/feedback-text.tsx | 60 - .../file-dropzone/file-dropzone.module.scss | 79 - .../form/file-dropzone/file-dropzone.spec.tsx | 144 - .../file-dropzone/file-dropzone.stories.tsx | 122 - .../form/file-dropzone/file-dropzone.tsx | 115 - .../file-upload/examples/multiple-handled.tsx | 12 - .../form/file-upload/file-upload.module.scss | 99 - .../form/file-upload/file-upload.spec.tsx | 354 - .../form/file-upload/file-upload.stories.tsx | 268 - .../form/file-upload/file-upload.tsx | 248 - .../tedi/components/form/file-upload/index.ts | 1 - .../form/form-label/form-label.module.scss | 11 - .../form/form-label/form-label.spec.tsx | 64 - .../form/form-label/form-label.stories.tsx | 76 - .../components/form/form-label/form-label.tsx | 80 - .../number-field/number-field.module.scss | 181 - .../form/number-field/number-field.spec.tsx | 121 - .../number-field/number-field.stories.tsx | 228 - .../form/number-field/number-field.tsx | 259 - .../components/form/radio/radio.module.scss | 116 - .../tedi/components/form/radio/radio.spec.tsx | 225 - .../components/form/radio/radio.stories.tsx | 227 - .../src/tedi/components/form/radio/radio.tsx | 103 - .../components/form/search/search.module.scss | 40 - .../components/form/search/search.spec.tsx | 65 - .../components/form/search/search.stories.tsx | 188 - .../tedi/components/form/search/search.tsx | 67 - .../components/select-clear-indicator.tsx | 26 - .../form/select/components/select-control.tsx | 13 - .../components/select-dropdown-indicator.tsx | 6 - .../components/select-group-heading.tsx | 21 - .../form/select/components/select-group.tsx | 13 - .../select-indicators-container.tsx | 16 - .../form/select/components/select-input.tsx | 15 - .../components/select-loading-indicator.tsx | 15 - .../select/components/select-menu-list.tsx | 20 - .../select/components/select-menu-portal.tsx | 12 - .../form/select/components/select-menu.tsx | 9 - .../select/components/select-multi-option.tsx | 48 - .../components/select-multi-value-remove.tsx | 36 - .../select/components/select-multi-value.tsx | 33 - .../form/select/components/select-option.tsx | 22 - .../components/select-single-option.tsx | 52 - .../components/select-value-container.tsx | 16 - .../components/form/select/examples/async.tsx | 51 - .../form/select/examples/custom-option.tsx | 57 - .../form/select/examples/editable.tsx | 49 - .../form/select/examples/multiple-handled.tsx | 38 - .../components/form/select/select.module.scss | 255 - .../components/form/select/select.spec.tsx | 329 - .../components/form/select/select.stories.tsx | 299 - .../tedi/components/form/select/select.tsx | 336 - .../form/textarea/textarea.module.scss | 14 - .../form/textarea/textarea.spec.tsx | 144 - .../form/textarea/textarea.stories.tsx | 192 - .../components/form/textarea/textarea.tsx | 74 - .../form/textfield/textfield.module.scss | 217 - .../form/textfield/textfield.spec.tsx | 111 - .../form/textfield/textfield.stories.tsx | 182 - .../components/form/textfield/textfield.tsx | 406 - .../tedi/components/layout/grid/col.spec.tsx | 131 - .../src/tedi/components/layout/grid/col.tsx | 176 - .../components/layout/grid/grid.module.scss | 13 - .../components/layout/grid/grid.stories.tsx | 120 - .../src/tedi/components/layout/grid/index.ts | 2 - .../components/layout/grid/row-context.ts | 11 - .../tedi/components/layout/grid/row.spec.tsx | 110 - .../src/tedi/components/layout/grid/row.tsx | 172 - .../sidenav-dropdown.module.scss | 93 - .../sidenav-dropdown.spec.tsx | 83 - .../sidenav-dropdown/sidenav-dropdown.tsx | 148 - .../sidenav-item/sidenav-item.spec.tsx | 94 - .../components/sidenav-item/sidenav-item.tsx | 242 - .../sidenav-mobile/sidenav-mobile.spec.tsx | 92 - .../sidenav-mobile/sidenav-mobile.tsx | 220 - .../sidenav-toggle/sidenav-toggle.module.scss | 33 - .../sidenav-toggle/sidenav-toggle.spec.tsx | 69 - .../sidenav-toggle/sidenav-toggle.tsx | 74 - .../layout/sidenav/documentation.mdx | 134 - .../components/layout/sidenav/examples.ts | 249 - .../tedi/components/layout/sidenav/index.ts | 5 - .../layout/sidenav/sidenav.module.scss | 452 - .../layout/sidenav/sidenav.spec.tsx | 114 - .../layout/sidenav/sidenav.stories.tsx | 281 - .../components/layout/sidenav/sidenav.tsx | 206 - .../layout/vertical-spacing/index.ts | 2 - .../vertical-spacing-item.spec.tsx | 92 - .../vertical-spacing-item.tsx | 55 - .../vertical-spacing.module.scss | 17 - .../vertical-spacing.spec.tsx | 92 - .../vertical-spacing.stories.tsx | 166 - .../vertical-spacing/vertical-spacing.tsx | 60 - .../components/loaders/skeleton/index.tsx | 2 - .../skeleton-block/skeleton-block.module.scss | 38 - .../skeleton-block/skeleton-block.spec.tsx | 80 - .../skeleton-block/skeleton-block.tsx | 60 - .../loaders/skeleton/skeleton.module.scss | 7 - .../loaders/skeleton/skeleton.spec.tsx | 97 - .../loaders/skeleton/skeleton.stories.tsx | 173 - .../components/loaders/skeleton/skeleton.tsx | 88 - .../loaders/spinner/spinner.module.scss | 71 - .../loaders/spinner/spinner.spec.tsx | 78 - .../loaders/spinner/spinner.stories.tsx | 106 - .../components/loaders/spinner/spinner.tsx | 72 - .../components/misc/affix/affix.module.scss | 36 - .../tedi/components/misc/affix/affix.spec.tsx | 73 - .../components/misc/affix/affix.stories.tsx | 64 - .../src/tedi/components/misc/affix/affix.tsx | 79 - .../misc/ellipsis/ellipsis.module.scss | 10 - .../misc/ellipsis/ellipsis.spec.tsx | 73 - .../misc/ellipsis/ellipsis.stories.tsx | 77 - .../components/misc/ellipsis/ellipsis.tsx | 65 - .../tedi/components/misc/print/print.spec.tsx | 80 - .../components/misc/print/print.stories.tsx | 37 - .../src/tedi/components/misc/print/print.tsx | 59 - .../tedi/components/misc/print/printing.mdx | 38 - .../misc/scroll-fade/scroll-fade.module.scss | 68 - .../misc/scroll-fade/scroll-fade.spec.tsx | 141 - .../misc/scroll-fade/scroll-fade.stories.tsx | 154 - .../misc/scroll-fade/scroll-fade.tsx | 123 - .../scroll-visibility.module.scss | 33 - .../scroll-visibility.spec.tsx | 109 - .../scroll-visibility.stories.tsx | 209 - .../scroll-visibility/scroll-visibility.tsx | 115 - .../misc/separator/separator.module.scss | 200 - .../misc/separator/separator.spec.tsx | 148 - .../misc/separator/separator.stories.tsx | 224 - .../components/misc/separator/separator.tsx | 157 - .../stretch-content.module.scss | 31 - .../stretch-content/stretch-content.spec.tsx | 82 - .../stretch-content.stories.tsx | 98 - .../misc/stretch-content/stretch-content.tsx | 56 - .../hash-trigger/hash-trigger.spec.tsx | 66 - .../hash-trigger/hash-trigger.stories.tsx | 131 - .../navigation/hash-trigger/hash-trigger.tsx | 78 - .../navigation/link/link-helpers.tsx | 26 - .../components/navigation/link/link.spec.tsx | 79 - .../navigation/link/link.stories.tsx | 353 - .../tedi/components/navigation/link/link.tsx | 67 - .../notifications/alert/alert.module.scss | 61 - .../notifications/alert/alert.spec.tsx | 121 - .../notifications/alert/alert.stories.tsx | 156 - .../components/notifications/alert/alert.tsx | 162 - .../notifications/toast/documentation.mdx | 125 - .../notifications/toast/toast.module.scss | 19 - .../notifications/toast/toast.spec.tsx | 41 - .../notifications/toast/toast.stories.tsx | 258 - .../components/notifications/toast/toast.tsx | 45 - .../overlays/overlay/overlay-content.tsx | 84 - .../overlays/overlay/overlay-trigger.tsx | 58 - .../overlays/overlay/overlay.module.scss | 20 - .../overlays/overlay/overlay.spec.tsx | 210 - .../components/overlays/overlay/overlay.tsx | 259 - .../tedi/components/overlays/popover/index.ts | 3 - .../overlays/popover/popover-content.tsx | 79 - .../overlays/popover/popover-trigger.tsx | 5 - .../overlays/popover/popover.module.scss | 45 - .../overlays/popover/popover.spec.tsx | 62 - .../overlays/popover/popover.stories.tsx | 498 - .../components/overlays/popover/popover.tsx | 40 - .../tedi/components/overlays/tooltip/index.ts | 3 - .../overlays/tooltip/tooltip-content.tsx | 31 - .../overlays/tooltip/tooltip-trigger.tsx | 5 - .../overlays/tooltip/tooltip.module.scss | 28 - .../overlays/tooltip/tooltip.spec.tsx | 86 - .../overlays/tooltip/tooltip.stories.tsx | 259 - .../components/overlays/tooltip/tooltip.tsx | 41 - .../status-badge/status-badge.module.scss | 103 - .../tags/status-badge/status-badge.spec.tsx | 125 - .../status-badge/status-badge.stories.tsx | 171 - .../tags/status-badge/status-badge.tsx | 131 - .../tedi/components/tags/tag/tag.module.scss | 76 - .../src/tedi/components/tags/tag/tag.spec.tsx | 108 - .../tedi/components/tags/tag/tag.stories.tsx | 98 - .../src/tedi/components/tags/tag/tag.tsx | 77 - .../src/tedi/docs/_badges.mdx | 152 - .../src/tedi/docs/_welcome.mdx | 17 - .../src/tedi/docs/changelog.mdx | 9 - .../docs/colors/base-color-variables.json | 419 - .../docs/colors/brand-color-variables.json | 109 - .../src/tedi/docs/colors/color-tokens.tsx | 57 - .../src/tedi/docs/colors/tedi-colors.mdx | 20 - .../src/tedi/docs/getStarted.mdx | 68 - .../background-colors.module.scss | 45 - .../background-colors/background-colors.tsx | 10 - .../helpers/hooks/use-breakpoint-props.ts | 53 - .../src/tedi/helpers/hooks/use-breakpoint.ts | 53 - .../tedi/helpers/hooks/use-element-size.ts | 24 - .../src/tedi/helpers/hooks/use-file-upload.ts | 242 - .../src/tedi/helpers/hooks/use-is-mounted.ts | 17 - .../tedi/helpers/hooks/use-is-touch-device.ts | 43 - .../src/tedi/helpers/hooks/use-print.ts | 34 - .../src/tedi/helpers/hooks/use-scroll.ts | 31 - .../tedi/helpers/hooks/use-sidenav-state.ts | 23 - .../src/tedi/helpers/hooks/use-what-input.ts | 12 - .../src/tedi/helpers/index.ts | 9 - .../src/tedi/helpers/polymorphic/types.ts | 29 - libs/react-components/src/tedi/index.ts | 54 - .../accessibility-provider.tsx | 77 - .../use-declare-loader.tsx | 38 - .../label-provider/adding-labels.mdx | 81 - .../tedi/providers/label-provider/index.ts | 3 - .../label-provider/label-provider.mdx | 52 - .../label-provider/label-provider.stories.tsx | 66 - .../label-provider/label-provider.tsx | 167 - .../providers/label-provider/labels-map.ts | 764 - .../providers/label-provider/labels-table.tsx | 94 - .../tedi/providers/label-provider/labels.mdx | 16 - .../label-provider/migration-guide.mdx | 50 - .../providers/label-provider/use-labels.tsx | 9 - .../storybook-provider/storybook-provider.tsx | 47 - .../style-provider/style-provider.tsx | 12 - .../src/tedi/styles/index.scss | 1 - .../src/tedi/types/commonTypes.tsx | 44 - libs/react-components/tsconfig.json | 27 - libs/react-components/tsconfig.lib.json | 25 - libs/react-components/tsconfig.spec.json | 20 - libs/react-components/vite.config.ts | 92 - libs/tedi-core/.prettierignore | 5 - libs/tedi-core/.prettierrc | 6 - libs/tedi-core/.releaserc.json | 28 - libs/tedi-core/.stylelintrc.json | 24 - libs/tedi-core/CHANGELOG.md | 448 - libs/tedi-core/README.md | 3 - libs/tedi-core/package-lock.json | 3259 -- libs/tedi-core/package.json | 26 - .../public/buttons/central-alignment.svg | 19 - .../public/buttons/left-alignment.svg | 139 - .../public/buttons/right-alignment-back.svg | 74 - .../public/buttons/right-alignment.svg | 80 - .../public/colors/backgrounds-inverted.svg | 12 - libs/tedi-core/public/colors/backgrounds.svg | 11 - libs/tedi-core/public/colors/disabled.svg | 12 - .../public/colors/foregrounds-inverted.svg | 20 - libs/tedi-core/public/colors/foregrounds.svg | 19 - libs/tedi-core/public/layout/columns.svg | 28 - libs/tedi-core/public/layout/gutter.svg | 28 - libs/tedi-core/public/layout/header-areas.svg | 82 - .../public/layout/layout-variatsions.svg | 48 - libs/tedi-core/public/layout/offset.svg | 34 - .../public/layout/spacing-in-elements.svg | 32 - libs/tedi-core/public/layout/spacing.svg | 39 - libs/tedi-core/scss.d.ts | 4 - libs/tedi-core/src/_base.scss | 93 - libs/tedi-core/src/_fonts.scss | 253 - libs/tedi-core/src/_helpers.scss | 43 - libs/tedi-core/src/_icons.scss | 51 - libs/tedi-core/src/_mixins.scss | 108 - libs/tedi-core/src/_print.scss | 35 - libs/tedi-core/src/_typography.scss | 220 - .../src/bootstrap-utility/_breakpoints.scss | 136 - .../src/bootstrap-utility/_grid.scss | 167 - .../bootstrap-utility/_mixin-utilities.scss | 95 - .../src/bootstrap-utility/_utilities-api.scss | 23 - .../src/bootstrap-utility/_utilities.scss | 104 - libs/tedi-core/src/index.scss | 17 - libs/tedi-core/src/tedi-storybook-styles.scss | 172 - .../src/variables/_base-variables.scss | 168 - .../src/variables/_bootstrap-variables.scss | 30 - .../src/variables/_color-variables.scss | 1113 - .../src/variables/_dimensional-variables.scss | 1236 - .../src/variables/_font-variables.scss | 77 - .../src/variables/_utility-variables.scss | 11 - libs/tedi-core/tsconfig.json | 11 - .../ng-package.json => ng-package.json | 4 +- package-lock.json | 27769 +++++++++++++--- package.json | 115 +- .../public-api.ts => public-api.ts | 0 {libs/tedi-core/public => public}/404.svg | 0 .../public => public}/SF-horizontal.png | Bin .../public => public}/SF-vertical.png | Bin .../public => public}/TEHIK_logo.svg | 0 .../public => public}/TEHIK_logo2.svg | 0 .../card-background-example.svg | 0 .../public => public}/fonts/README.md | 0 .../fonts/material-symbols-outlined.woff2 | Bin .../fonts/material-symbols-rounded.woff2 | Bin .../fonts/material-symbols-sharp.woff2 | Bin .../roboto-v30-cyrillic-300-italic.woff2 | Bin .../fonts/roboto-v30-cyrillic-300.woff2 | Bin .../roboto-v30-cyrillic-400-italic.woff2 | Bin .../fonts/roboto-v30-cyrillic-400.woff2 | Bin .../roboto-v30-cyrillic-700-italic.woff2 | Bin .../fonts/roboto-v30-cyrillic-700.woff2 | Bin .../roboto-v30-cyrillic-ext-300-italic.woff2 | Bin .../fonts/roboto-v30-cyrillic-ext-300.woff2 | Bin .../roboto-v30-cyrillic-ext-400-italic.woff2 | Bin .../fonts/roboto-v30-cyrillic-ext-400.woff2 | Bin .../roboto-v30-cyrillic-ext-700-italic.woff2 | Bin .../fonts/roboto-v30-cyrillic-ext-700.woff2 | Bin .../fonts/roboto-v30-latin-300-italic.woff2 | Bin .../fonts/roboto-v30-latin-300.woff2 | Bin .../fonts/roboto-v30-latin-400-italic.woff2 | Bin .../fonts/roboto-v30-latin-400.woff2 | Bin .../fonts/roboto-v30-latin-700-italic.woff2 | Bin .../fonts/roboto-v30-latin-700.woff2 | Bin .../roboto-v30-latin-ext-300-italic.woff2 | Bin .../fonts/roboto-v30-latin-ext-300.woff2 | Bin .../roboto-v30-latin-ext-400-italic.woff2 | Bin .../fonts/roboto-v30-latin-ext-400.woff2 | Bin .../roboto-v30-latin-ext-700-italic.woff2 | Bin .../fonts/roboto-v30-latin-ext-700.woff2 | Bin .../public => public}/header-logo.svg | 0 {libs/tedi-core/public => public}/logo.svg | 0 .../tedi-core/public => public}/sf_logod.jpg | Bin .../sf_logod_vertikaalne.jpg | Bin .../public => public}/tehik_logo.png | Bin .../setup-jest.ts => setup-jest.ts | 0 .../dev-tools/createBreakpointArgTypes.ts | 0 .../dev-tools/index.ts | 0 .../docs/badges.mdx | 0 .../docs/changelog.mdx | 2 +- .../docs/colors/base-color-variables.json | 0 .../docs/colors/brand-color-variables.json | 0 .../docs/colors/colors.component.ts | 0 .../docs/colors/colors.mdx | 0 .../docs/colors/colors.stories.ts | 0 .../docs/get-started.mdx | 19 +- .../docs/welcome.mdx | 10 +- src/styles/index.scss | 2 + .../styles/vertical-spacing.scss | 0 .../components/base/icon/icon.component.html | 0 .../components/base/icon/icon.component.scss | 2 +- .../base/icon/icon.component.spec.ts | 0 .../components/base/icon/icon.component.ts | 0 .../components/base/icon/icon.stories.ts | 0 .../tedi => tedi}/components/base/index.ts | 0 .../components/base/text/text.component.html | 0 .../base/text/text.component.spec.ts | 0 .../components/base/text/text.component.ts | 0 .../components/base/text/text.stories.ts | 0 .../buttons/button/button.component.scss | 88 +- .../buttons/button/button.component.spec.ts | 0 .../buttons/button/button.component.ts | 0 .../buttons/button/button.stories.ts | 0 .../closing-button.component.html | 0 .../closing-button.component.scss | 2 +- .../closing-button.component.ts | 0 .../closing-button/closing-button.spec.ts | 0 .../closing-button/closing-button.stories.ts | 2 +- .../buttons/collapse/collapse.component.html | 0 .../buttons/collapse/collapse.component.scss | 2 +- .../collapse/collapse.component.spec.ts | 0 .../buttons/collapse/collapse.component.ts | 0 .../buttons/collapse/collapse.stories.ts | 0 .../tedi => tedi}/components/buttons/index.ts | 0 .../info-button/info-button.component.scss | 2 +- .../info-button/info-button.component.spec.ts | 0 .../info-button/info-button.component.ts | 0 .../info-button/info-button.stories.ts | 0 .../tedi => tedi}/components/content/index.ts | 0 .../content/list/list.component.html | 0 .../content/list/list.component.scss | 2 +- .../content/list/list.component.spec.ts | 0 .../components/content/list/list.component.ts | 0 .../components/content/list/list.stories.ts | 0 .../components/content/text-group/index.ts | 0 .../text-group/text-group-label.component.ts | 0 .../text-group/text-group-value.component.ts | 0 .../text-group/text-group.component.html | 0 .../text-group/text-group.component.scss | 2 +- .../text-group/text-group.component.spec.ts | 0 .../text-group/text-group.component.ts | 0 .../content/text-group/text-group.stories.ts | 4 +- .../feedback-text.component.html | 0 .../feedback-text.component.scss | 8 +- .../feedback-text.component.spec.ts | 0 .../feedback-text/feedback-text.component.ts | 0 .../feedback-text/feedback-text.stories.ts | 0 .../tedi => tedi}/components/form/index.ts | 0 .../form/label/label.component.scss | 31 + .../form/label/label.component.spec.ts | 0 .../components/form/label/label.component.ts | 0 .../components/form/label/label.stories.ts | 0 .../number-field/number-field.component.html | 0 .../number-field/number-field.component.scss | 4 +- .../number-field.component.spec.ts | 0 .../number-field/number-field.component.ts | 0 .../form/number-field/number-field.stories.ts | 0 .../form/toggle/toggle.component.html | 0 .../form/toggle/toggle.component.scss | 88 +- .../form/toggle/toggle.component.spec.ts | 0 .../form/toggle/toggle.component.ts | 0 .../components/form/toggle/toggle.stories.ts | 0 .../helpers/grid/col/col.component.html | 0 .../helpers/grid/col/col.component.scss | 0 .../helpers/grid/col/col.component.spec.ts | 0 .../helpers/grid/col/col.component.ts | 0 .../helpers/grid/col/col.stories.ts | 2 +- .../components/helpers/grid/index.ts | 0 .../helpers/grid/row/row.component.html | 0 .../helpers/grid/row/row.component.scss | 0 .../helpers/grid/row/row.component.spec.ts | 0 .../helpers/grid/row/row.component.ts | 0 .../helpers/grid/row/row.stories.ts | 2 +- .../tedi => tedi}/components/helpers/index.ts | 0 .../separator/separator.component.scss | 2 +- .../separator/separator.component.spec.ts | 0 .../helpers/separator/separator.component.ts | 0 .../helpers/separator/separator.stories.ts | 0 .../components/helpers/timeline/index.ts | 0 .../timeline-description.component.scss | 2 +- .../timeline-description.component.ts | 0 .../timeline-item.component.html | 0 .../timeline-item.component.scss | 4 +- .../timeline-item/timeline-item.component.ts | 0 .../timeline-title.component.scss | 2 +- .../timeline-title.component.ts | 0 .../helpers/timeline/timeline.component.scss | 4 +- .../timeline/timeline.component.spec.ts | 0 .../helpers/timeline/timeline.component.ts | 0 .../helpers/timeline/timeline.stories.ts | 0 .../tedi => tedi}/components/index.ts | 0 .../footer-body/footer-body.component.scss | 2 +- .../footer-body/footer-body.component.spec.ts | 0 .../footer-body/footer-body.component.ts | 0 .../footer-bottom.component.html | 0 .../footer-bottom.component.scss | 2 +- .../footer-bottom.component.spec.ts | 0 .../footer-bottom/footer-bottom.component.ts | 0 .../footer-section.component.html | 0 .../footer-section.component.scss | 2 +- .../footer-section.component.spec.ts | 0 .../footer-section.component.ts | 0 .../footer-side/footer-side.component.scss | 2 +- .../footer-side/footer-side.component.spec.ts | 0 .../footer-side/footer-side.component.ts | 0 .../layout/footer/footer.component.html | 0 .../layout/footer/footer.component.scss | 0 .../layout/footer/footer.component.spec.ts | 0 .../layout/footer/footer.component.ts | 0 .../layout/footer/footer.stories.ts | 4 +- .../components/layout/footer/index.ts | 0 .../header-actions.component.scss | 35 + .../header-actions.component.ts | 0 .../header-content.component.scss | 2 +- .../header-content.component.ts | 0 .../header-language.component.html | 0 .../header-language.component.scss | 33 + .../header-language.component.spec.ts | 0 .../header-language.component.ts | 0 .../header-login/header-login.component.html | 0 .../header-login/header-login.component.scss | 41 + .../header-login.component.spec.ts | 0 .../header-login/header-login.component.ts | 0 .../header-logout.component.html | 0 .../header-logout.component.scss | 56 + .../header-logout.component.spec.ts | 0 .../header-logout/header-logout.component.ts | 0 .../header-profile.component.html | 0 .../header-profile.component.scss | 106 + .../header-profile.component.spec.ts | 0 .../header-profile.component.ts | 0 .../header-role/header-role.component.html | 0 .../header-role/header-role.component.scss | 223 + .../header-role/header-role.component.spec.ts | 0 .../header-role/header-role.component.ts | 0 .../layout/header/header.component.html | 0 .../layout/header/header.component.scss | 45 + .../layout/header/header.component.ts | 0 .../layout/header/header.stories.ts | 0 .../components/layout/header/index.ts | 0 .../tedi => tedi}/components/layout/index.ts | 0 .../components/layout/sidenav/index.ts | 0 .../sidenav-dropdown-group.component.scss | 0 .../sidenav-dropdown-group.component.spec.ts | 0 .../sidenav-dropdown-group.component.ts | 0 .../sidenav-dropdown-item.component.html | 0 .../sidenav-dropdown-item.component.scss | 2 +- .../sidenav-dropdown-item.component.spec.ts | 0 .../sidenav-dropdown-item.component.ts | 0 .../sidenav-dropdown.component.html | 0 .../sidenav-dropdown.component.scss | 0 .../sidenav-dropdown.component.spec.ts | 0 .../sidenav-dropdown.component.ts | 0 .../sidenav-group-title.component.html | 0 .../sidenav-group-title.component.scss | 2 +- .../sidenav-group-title.component.spec.ts | 0 .../sidenav-group-title.component.ts | 0 .../sidenav-item/sidenav-item.component.html | 0 .../sidenav-item/sidenav-item.component.scss | 2 +- .../sidenav-item.component.spec.ts | 0 .../sidenav-item/sidenav-item.component.ts | 0 .../sidenav-overlay.component.scss | 0 .../sidenav-overlay.component.spec.ts | 0 .../sidenav-overlay.component.ts | 0 .../sidenav-toggle.component.html | 0 .../sidenav-toggle.component.scss | 0 .../sidenav-toggle.component.spec.ts | 0 .../sidenav-toggle.component.ts | 0 .../layout/sidenav/sidenav.component.html | 0 .../layout/sidenav/sidenav.component.scss | 11 +- .../layout/sidenav/sidenav.component.spec.ts | 0 .../layout/sidenav/sidenav.component.ts | 0 .../layout/sidenav/sidenav.stories.ts | 0 .../tedi => tedi}/components/loader/index.ts | 0 .../loader/spinner/spinner.component.html | 0 .../loader/spinner/spinner.component.scss | 0 .../loader/spinner/spinner.component.spec.ts | 0 .../loader/spinner/spinner.component.ts | 0 .../loader/spinner/spinner.stories.ts | 0 .../components/navigation/index.ts | 0 .../navigation/link/link.component.html | 0 .../navigation/link/link.component.scss | 2 +- .../navigation/link/link.component.spec.ts | 0 .../navigation/link/link.component.ts | 0 .../navigation/link/link.stories.ts | 2 +- .../notifications/alert/alert.component.html | 0 .../notifications/alert/alert.component.scss | 2 +- .../alert/alert.component.spec.ts | 0 .../notifications/alert/alert.component.ts | 0 .../notifications/alert/alert.stories.ts | 0 .../components/notifications/index.ts | 0 .../tedi => tedi}/components/overlay/index.ts | 0 .../components/overlay/popover/index.ts | 0 .../popover-content.component.html | 0 .../popover-content.component.spec.ts | 0 .../popover-content.component.ts | 0 .../popover-trigger.component.ts | 0 .../overlay/popover/popover.component.html | 0 .../overlay/popover/popover.component.scss | 10 +- .../overlay/popover/popover.component.spec.ts | 0 .../overlay/popover/popover.component.ts | 0 .../overlay/popover/popover.stories.ts | 0 .../components/overlay/tooltip/index.ts | 0 .../tooltip/tooltip-content.component.ts | 0 .../tooltip/tooltip-trigger.component.ts | 0 .../overlay/tooltip/tooltip.component.html | 0 .../overlay/tooltip/tooltip.component.scss | 11 +- .../overlay/tooltip/tooltip.component.spec.ts | 0 .../overlay/tooltip/tooltip.component.ts | 0 .../overlay/tooltip/tooltip.stories.ts | 0 .../directives/hide-at/hide-at.directive.ts | 0 .../tedi => tedi}/directives/index.ts | 0 .../directives/show-at/show-at.directive.ts | 0 .../directives/vertical-spacing/index.ts | 0 .../vertical-spacing-item.directive.spec.ts | 0 .../vertical-spacing-item.directive.ts | 0 .../vertical-spacing-item.stories.ts | 0 .../vertical-spacing.directive.spec.ts | 0 .../vertical-spacing.directive.ts | 0 .../vertical-spacing.stories.ts | 0 .../tedi => tedi}/helpers/generate-uuid.ts | 0 .../tedi => tedi}/helpers/index.ts | 0 .../angular-components/tedi => tedi}/index.ts | 0 .../tedi => tedi}/ng-package.json | 0 .../services/breakpoint/breakpoint.service.ts | 0 .../tedi => tedi}/services/index.ts | 0 .../services/sidenav/sidenav.service.ts | 0 .../services/translation/translation.pipe.ts | 0 .../translation/translation.service.ts | 0 .../services/translation/translations.ts | 0 .../tedi => tedi}/types/index.ts | 0 .../tedi => tedi}/types/inputs.type.ts | 0 tsconfig.base.json | 14 +- tsconfig.eslint.json | 5 + .../tsconfig.json => tsconfig.json | 6 +- .../tsconfig.lib.json => tsconfig.lib.json | 10 +- ...ig.lib.prod.json => tsconfig.lib.prod.json | 0 .../tsconfig.spec.json => tsconfig.spec.json | 2 +- 1234 files changed, 23480 insertions(+), 132517 deletions(-) rename libs/angular-components/.codecov.yml => .codecov.yml (100%) rename libs/angular-components/.eslintrc.json => .eslintrc.json (97%) delete mode 100644 .github/workflows/core-release.yml delete mode 100755 .github/workflows/publish_mirror.sh delete mode 100644 .github/workflows/react-release.yml delete mode 100644 .github/workflows/react-test-and-lint.yml rename libs/angular-components/.releaserc.json => .releaserc.json (100%) rename {libs/angular-components/.storybook => .storybook}/main.ts (72%) rename {libs/angular-components/.storybook => .storybook}/manager-head.html (100%) rename {libs/angular-components/.storybook => .storybook}/manager.js (100%) rename {libs/angular-components/.storybook => .storybook}/preview-head.html (100%) rename {libs/angular-components/.storybook => .storybook}/preview.tsx (100%) rename {libs/angular-components/.storybook => .storybook}/tehik-theme.js (100%) rename {libs/angular-components/.storybook => .storybook}/tsconfig.json (100%) rename {libs/angular-components/.storybook => .storybook}/typings.d.ts (100%) rename libs/angular-components/CHANGELOG.md => CHANGELOG.md (100%) rename libs/angular-components/angular.json => angular.json (81%) rename libs/angular-components/chromatic.config.json => chromatic.config.json (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion-icon/accordion-icon.component.html (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion-icon/accordion-icon.component.scss (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion-icon/accordion-icon.component.ts (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion-item-content/accordion-item-content.component.html (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion-item-content/accordion-item-content.component.scss (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion-item-content/accordion-item-content.component.ts (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion-item-header/accordion-item-header.component.html (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion-item-header/accordion-item-header.component.scss (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion-item-header/accordion-item-header.component.ts (95%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion-item/accordion-item.component.html (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion-item/accordion-item.component.scss (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion-item/accordion-item.component.ts (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion.stories.ts (99%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion/accordion.component.html (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion/accordion.component.scss (100%) rename {libs/angular-components/community => community}/components/cards/accordion/accordion/accordion.component.ts (100%) rename {libs/angular-components/community => community}/components/cards/accordion/index.ts (100%) rename {libs/angular-components/community => community}/components/cards/card/_card-mixins.scss (98%) rename {libs/angular-components/community => community}/components/cards/card/card-colors.directive.ts (100%) rename {libs/angular-components/community => community}/components/cards/card/card-content/card-content.component.html (100%) rename {libs/angular-components/community => community}/components/cards/card/card-content/card-content.component.scss (100%) rename {libs/angular-components/community => community}/components/cards/card/card-content/card-content.component.ts (100%) rename {libs/angular-components/community => community}/components/cards/card/card-header/card-header.component.html (100%) rename {libs/angular-components/community => community}/components/cards/card/card-header/card-header.component.scss (100%) rename {libs/angular-components/community => community}/components/cards/card/card-header/card-header.component.ts (100%) rename {libs/angular-components/community => community}/components/cards/card/card-padding.directive.ts (100%) rename {libs/angular-components/community => community}/components/cards/card/card-row/card-row.component.html (100%) rename {libs/angular-components/community => community}/components/cards/card/card-row/card-row.component.scss (100%) rename {libs/angular-components/community => community}/components/cards/card/card-row/card-row.component.ts (100%) rename {libs/angular-components/community => community}/components/cards/card/card.component.html (100%) rename {libs/angular-components/community => community}/components/cards/card/card.component.scss (98%) rename {libs/angular-components/community => community}/components/cards/card/card.component.ts (100%) rename {libs/angular-components/community => community}/components/cards/card/index.ts (100%) rename {libs/angular-components/community => community}/components/cards/card/stories/card-story-templates.ts (100%) rename {libs/angular-components/community => community}/components/cards/card/stories/card.stories.ts (97%) rename {libs/angular-components/community => community}/components/cards/index.ts (100%) rename {libs/angular-components/community => community}/components/form/checkbox/checkbox-card-group/checkbox-card-group.component.ts (96%) rename {libs/angular-components/community => community}/components/form/checkbox/checkbox-group/checkbox-group.component.html (100%) rename {libs/angular-components/community => community}/components/form/checkbox/checkbox-group/checkbox-group.component.scss (100%) rename {libs/angular-components/community => community}/components/form/checkbox/checkbox-group/checkbox-group.component.ts (93%) rename {libs/angular-components/community => community}/components/form/checkbox/checkbox.stories.ts (100%) rename {libs/angular-components/community => community}/components/form/checkbox/checkbox/checkbox.component.html (100%) rename {libs/angular-components/community => community}/components/form/checkbox/checkbox/checkbox.component.scss (98%) rename {libs/angular-components/community => community}/components/form/checkbox/checkbox/checkbox.component.ts (97%) rename {libs/angular-components/community => community}/components/form/checkbox/index.ts (100%) rename {libs/angular-components/community => community}/components/form/choicegroup/_choicegroup-card-mixins.scss (98%) rename {libs/angular-components/community => community}/components/form/choicegroup/choicegroup.directive.ts (100%) rename {libs/angular-components/community => community}/components/form/choicegroup/choicegroup.styles.scss (98%) rename {libs/angular-components/community => community}/components/form/file-dropzone/constants.ts (100%) rename {libs/angular-components/community => community}/components/form/file-dropzone/file-dropzone.component.html (100%) rename {libs/angular-components/community => community}/components/form/file-dropzone/file-dropzone.component.scss (100%) rename {libs/angular-components/community => community}/components/form/file-dropzone/file-dropzone.component.ts (99%) rename {libs/angular-components/community => community}/components/form/file-dropzone/file-dropzone.react.scss (94%) rename {libs/angular-components/community => community}/components/form/file-dropzone/file-dropzone.stories.ts (100%) rename {libs/angular-components/community => community}/components/form/file-dropzone/file.service.ts (98%) rename {libs/angular-components/community => community}/components/form/file-dropzone/index.ts (100%) rename {libs/angular-components/community => community}/components/form/file-dropzone/types.ts (97%) rename {libs/angular-components/community => community}/components/form/file-dropzone/utils.ts (100%) rename {libs/angular-components/community => community}/components/form/form-field/form-field.component.scss (100%) rename {libs/angular-components/community => community}/components/form/form-field/form-field.component.ts (100%) rename {libs/angular-components/community => community}/components/form/form-field/form-field.stories.ts (99%) rename {libs/angular-components/community => community}/components/form/index.ts (100%) rename {libs/angular-components/community => community}/components/form/input-group/input-group.component.html (100%) rename {libs/angular-components/community => community}/components/form/input-group/input-group.component.scss (92%) rename {libs/angular-components/community => community}/components/form/input-group/input-group.component.ts (97%) rename {libs/angular-components/community => community}/components/form/input-group/input-group.stories.ts (98%) rename {libs/angular-components/community => community}/components/form/input/input.component.scss (98%) rename {libs/angular-components/community => community}/components/form/input/input.component.ts (100%) rename {libs/angular-components/community => community}/components/form/input/textfield.stories.ts (100%) rename {libs/angular-components/community => community}/components/form/radio/index.ts (100%) rename {libs/angular-components/community => community}/components/form/radio/radio-card-group/radio-card-group.component.ts (93%) rename {libs/angular-components/community => community}/components/form/radio/radio-group/radio-group.component.html (100%) rename {libs/angular-components/community => community}/components/form/radio/radio-group/radio-group.component.scss (100%) rename {libs/angular-components/community => community}/components/form/radio/radio-group/radio-group.component.ts (98%) rename {libs/angular-components/community => community}/components/form/radio/radio.stories.ts (100%) rename {libs/angular-components/community => community}/components/form/radio/radio/radio.component.html (100%) rename {libs/angular-components/community => community}/components/form/radio/radio/radio.component.scss (98%) rename {libs/angular-components/community => community}/components/form/radio/radio/radio.component.ts (95%) rename {libs/angular-components/community => community}/components/form/search/search.component.html (100%) rename {libs/angular-components/community => community}/components/form/search/search.component.scss (99%) rename {libs/angular-components/community => community}/components/form/search/search.component.ts (99%) rename {libs/angular-components/community => community}/components/form/search/search.stories.ts (99%) rename {libs/angular-components/community => community}/components/form/select/index.ts (100%) rename {libs/angular-components/community => community}/components/form/select/multiselect.component.html (100%) rename {libs/angular-components/community => community}/components/form/select/multiselect.component.ts (99%) rename {libs/angular-components/community => community}/components/form/select/multiselect.stories.ts (99%) rename {libs/angular-components/community => community}/components/form/select/select-option.component.ts (100%) rename {libs/angular-components/community => community}/components/form/select/select.component.html (100%) rename {libs/angular-components/community => community}/components/form/select/select.component.scss (98%) rename {libs/angular-components/community => community}/components/form/select/select.component.ts (99%) rename {libs/angular-components/community => community}/components/form/select/select.stories.ts (99%) rename {libs/angular-components/community => community}/components/form/textarea/textarea.component.scss (90%) rename {libs/angular-components/community => community}/components/form/textarea/textarea.component.ts (100%) rename {libs/angular-components/community => community}/components/form/textarea/textarea.stories.ts (100%) rename {libs/angular-components/community => community}/components/navigation/breadcrumbs/breadcrumbs.component.html (100%) rename {libs/angular-components/community => community}/components/navigation/breadcrumbs/breadcrumbs.component.scss (100%) rename {libs/angular-components/community => community}/components/navigation/breadcrumbs/breadcrumbs.component.spec.ts (100%) rename {libs/angular-components/community => community}/components/navigation/breadcrumbs/breadcrumbs.component.ts (98%) rename {libs/angular-components/community => community}/components/navigation/breadcrumbs/breadcrumbs.stories.ts (96%) rename {libs/angular-components/community => community}/components/navigation/index.ts (100%) rename {libs/angular-components/community => community}/components/navigation/pagination/pagination-page/pagination-page.component.html (100%) rename {libs/angular-components/community => community}/components/navigation/pagination/pagination-page/pagination-page.component.scss (100%) rename {libs/angular-components/community => community}/components/navigation/pagination/pagination-page/pagination-page.component.ts (93%) rename {libs/angular-components/community => community}/components/navigation/pagination/pagination.component.html (100%) rename {libs/angular-components/community => community}/components/navigation/pagination/pagination.component.scss (96%) rename {libs/angular-components/community => community}/components/navigation/pagination/pagination.component.ts (97%) rename {libs/angular-components/community => community}/components/navigation/pagination/pagination.stories.ts (100%) rename {libs/angular-components/community => community}/components/navigation/pagination/pagination.utils.ts (100%) rename {libs/angular-components/community => community}/components/navigation/tabs/index.ts (100%) rename {libs/angular-components/community => community}/components/navigation/tabs/tab-content/tab-content.component.html (100%) rename {libs/angular-components/community => community}/components/navigation/tabs/tab-content/tab-content.component.ts (100%) rename {libs/angular-components/community => community}/components/navigation/tabs/tab/tab.component.html (100%) rename {libs/angular-components/community => community}/components/navigation/tabs/tab/tab.component.scss (97%) rename {libs/angular-components/community => community}/components/navigation/tabs/tab/tab.component.ts (100%) rename {libs/angular-components/community => community}/components/navigation/tabs/tabs.component.html (100%) rename {libs/angular-components/community => community}/components/navigation/tabs/tabs.component.scss (91%) rename {libs/angular-components/community => community}/components/navigation/tabs/tabs.component.ts (98%) rename {libs/angular-components/community => community}/components/navigation/tabs/tabs.stories.ts (100%) rename {libs/angular-components/community => community}/components/overlay/dropdown-item/dropdown-item.component.scss (97%) rename {libs/angular-components/community => community}/components/overlay/dropdown-item/dropdown-item.component.ts (100%) rename {libs/angular-components/community => community}/components/overlay/dropdown-item/dropdown-item.stories.ts (97%) rename {libs/angular-components/community => community}/components/overlay/dropdown/dropdown-trigger/dropdown-trigger.directive.ts (100%) rename {libs/angular-components/community => community}/components/overlay/dropdown/dropdown.component.html (100%) rename {libs/angular-components/community => community}/components/overlay/dropdown/dropdown.component.scss (86%) rename {libs/angular-components/community => community}/components/overlay/dropdown/dropdown.component.ts (97%) rename {libs/angular-components/community => community}/components/overlay/dropdown/dropdown.stories.ts (96%) rename {libs/angular-components/community => community}/components/overlay/index.ts (100%) rename {libs/angular-components/community => community}/components/overlay/modal/footer/modal-footer.component.html (100%) rename {libs/angular-components/community => community}/components/overlay/modal/footer/modal-footer.component.scss (85%) rename {libs/angular-components/community => community}/components/overlay/modal/footer/modal-footer.component.ts (96%) rename {libs/angular-components/community => community}/components/overlay/modal/header/modal-header.component.html (100%) rename {libs/angular-components/community => community}/components/overlay/modal/header/modal-header.component.scss (86%) rename {libs/angular-components/community => community}/components/overlay/modal/header/modal-header.component.ts (96%) rename {libs/angular-components/community => community}/components/overlay/modal/index.ts (100%) rename {libs/angular-components/community => community}/components/overlay/modal/modal.component.html (100%) rename {libs/angular-components/community => community}/components/overlay/modal/modal.component.scss (97%) rename {libs/angular-components/community => community}/components/overlay/modal/modal.component.ts (96%) rename {libs/angular-components/community => community}/components/overlay/modal/modal.stories.ts (100%) rename {libs/angular-components/community => community}/components/table/index.ts (100%) rename {libs/angular-components/community => community}/components/table/table-styles.stories.ts (100%) rename {libs/angular-components/community => community}/components/table/table-styles/table-styles.component.html (100%) rename {libs/angular-components/community => community}/components/table/table-styles/table-styles.component.scss (98%) rename {libs/angular-components/community => community}/components/table/table-styles/table-styles.component.ts (100%) rename {libs/angular-components/community => community}/components/tags/index.ts (100%) rename {libs/angular-components/community => community}/components/tags/status-badge/status-badge.component.html (100%) rename {libs/angular-components/community => community}/components/tags/status-badge/status-badge.component.scss (98%) rename {libs/angular-components/community => community}/components/tags/status-badge/status-badge.component.ts (97%) rename {libs/angular-components/community => community}/components/tags/status-badge/status-badge.stories.ts (99%) rename {libs/angular-components/community => community}/components/tags/tag/tag.component.html (100%) rename {libs/angular-components/community => community}/components/tags/tag/tag.component.scss (98%) rename {libs/angular-components/community => community}/components/tags/tag/tag.component.ts (97%) rename {libs/angular-components/community => community}/components/tags/tag/tag.stories.ts (100%) rename {libs/angular-components/community => community}/helpers/unique-id.ts (100%) rename {libs/angular-components/community => community}/index.ts (100%) rename {libs/angular-components/community => community}/ng-package.json (100%) rename libs/angular-components/jest.config.ts => jest.config.ts (92%) delete mode 100644 libs/angular-components/README.md delete mode 100644 libs/angular-components/package-lock.json delete mode 100644 libs/angular-components/package.json delete mode 100644 libs/angular-components/styles/index.scss delete mode 100644 libs/angular-components/tedi/components/form/label/label.component.scss delete mode 100644 libs/angular-components/tedi/components/layout/header/header-actions/header-actions.component.scss delete mode 100644 libs/angular-components/tedi/components/layout/header/header-language/header-language.component.scss delete mode 100644 libs/angular-components/tedi/components/layout/header/header-login/header-login.component.scss delete mode 100644 libs/angular-components/tedi/components/layout/header/header-logout/header-logout.component.scss delete mode 100644 libs/angular-components/tedi/components/layout/header/header-profile/header-profile.component.scss delete mode 100644 libs/angular-components/tedi/components/layout/header/header-role/header-role.component.scss delete mode 100644 libs/angular-components/tedi/components/layout/header/header.component.scss delete mode 100644 libs/angular-components/tsconfig.eslint.json delete mode 100644 libs/react-components/.babelrc delete mode 100644 libs/react-components/.codecov.yml delete mode 100644 libs/react-components/.eslintignore delete mode 100644 libs/react-components/.eslintrc.json delete mode 100644 libs/react-components/.prettierignore delete mode 100644 libs/react-components/.prettierrc delete mode 100644 libs/react-components/.releaserc.json delete mode 100644 libs/react-components/.storybook/main.ts delete mode 100644 libs/react-components/.storybook/manager-head.html delete mode 100644 libs/react-components/.storybook/manager.js delete mode 100644 libs/react-components/.storybook/preview-head.html delete mode 100644 libs/react-components/.storybook/preview.tsx delete mode 100644 libs/react-components/.storybook/storybook-decorator.tsx delete mode 100644 libs/react-components/.storybook/tehik-theme.js delete mode 100644 libs/react-components/.storybook/tsconfig.json delete mode 100644 libs/react-components/.stylelintrc.json delete mode 100644 libs/react-components/CHANGELOG.md delete mode 100644 libs/react-components/README.md delete mode 100644 libs/react-components/chromatic.config.json delete mode 100644 libs/react-components/customTemplate.cjs delete mode 100644 libs/react-components/declaration.d.ts delete mode 100644 libs/react-components/design-tokens/README.md delete mode 100644 libs/react-components/design-tokens/generate-variables.js delete mode 100644 libs/react-components/design-tokens/index.scss delete mode 100644 libs/react-components/design-tokens/mixins.scss delete mode 100644 libs/react-components/design-tokens/package.json delete mode 100644 libs/react-components/design-tokens/project.json delete mode 100644 libs/react-components/design-tokens/tokens.json delete mode 100644 libs/react-components/design-tokens/variables.scss delete mode 100644 libs/react-components/jest-mocks.js delete mode 100644 libs/react-components/jest-setup.js delete mode 100644 libs/react-components/jest.config.ts delete mode 100644 libs/react-components/package-lock.json delete mode 100644 libs/react-components/package.json delete mode 100644 libs/react-components/src/community/components/accordion/accordion-item-content/accordion-item-content.tsx delete mode 100644 libs/react-components/src/community/components/accordion/accordion-item-header/accordion-item-header.tsx delete mode 100644 libs/react-components/src/community/components/accordion/accordion-item/accordion-item.tsx delete mode 100644 libs/react-components/src/community/components/accordion/accordion.module.scss delete mode 100644 libs/react-components/src/community/components/accordion/accordion.stories.tsx delete mode 100644 libs/react-components/src/community/components/accordion/accordion.tsx delete mode 100644 libs/react-components/src/community/components/accordion/index.tsx delete mode 100644 libs/react-components/src/community/components/anchor/anchor-helpers.tsx delete mode 100644 libs/react-components/src/community/components/anchor/anchor.spec.tsx delete mode 100644 libs/react-components/src/community/components/anchor/anchor.stories.tsx delete mode 100644 libs/react-components/src/community/components/anchor/anchor.tsx delete mode 100644 libs/react-components/src/community/components/button-content/README.md delete mode 100644 libs/react-components/src/community/components/button-content/button-content.module.scss delete mode 100644 libs/react-components/src/community/components/button-content/button-content.tsx delete mode 100644 libs/react-components/src/community/components/button/button.spec.tsx delete mode 100644 libs/react-components/src/community/components/button/button.stories.tsx delete mode 100644 libs/react-components/src/community/components/button/button.tsx delete mode 100644 libs/react-components/src/community/components/card/card-content/card-content.tsx delete mode 100644 libs/react-components/src/community/components/card/card-context.ts delete mode 100644 libs/react-components/src/community/components/card/card-header/card-header.tsx delete mode 100644 libs/react-components/src/community/components/card/card-notification/card-notification.module.scss delete mode 100644 libs/react-components/src/community/components/card/card-notification/card-notification.tsx delete mode 100644 libs/react-components/src/community/components/card/card.module.scss delete mode 100644 libs/react-components/src/community/components/card/card.stories.tsx delete mode 100644 libs/react-components/src/community/components/card/card.tsx delete mode 100644 libs/react-components/src/community/components/card/index.ts delete mode 100644 libs/react-components/src/community/components/card/utility.ts delete mode 100644 libs/react-components/src/community/components/collapse/collapse.module.scss delete mode 100644 libs/react-components/src/community/components/collapse/collapse.spec.tsx delete mode 100644 libs/react-components/src/community/components/collapse/collapse.stories.tsx delete mode 100644 libs/react-components/src/community/components/collapse/collapse.tsx delete mode 100644 libs/react-components/src/community/components/commonTypes.tsx delete mode 100644 libs/react-components/src/community/components/dropdown/dropdown.module.scss delete mode 100644 libs/react-components/src/community/components/dropdown/dropdown.stories.tsx delete mode 100644 libs/react-components/src/community/components/dropdown/dropdown.tsx delete mode 100644 libs/react-components/src/community/components/ellipsis/ellipsis.module.scss delete mode 100644 libs/react-components/src/community/components/ellipsis/ellipsis.stories.tsx delete mode 100644 libs/react-components/src/community/components/ellipsis/ellipsis.tsx delete mode 100644 libs/react-components/src/community/components/feedback/feedback.module.scss delete mode 100644 libs/react-components/src/community/components/feedback/feedback.stories.tsx delete mode 100644 libs/react-components/src/community/components/feedback/feedback.tsx delete mode 100644 libs/react-components/src/community/components/form/check/check.module.scss delete mode 100644 libs/react-components/src/community/components/form/check/check.stories.tsx delete mode 100644 libs/react-components/src/community/components/form/check/check.tsx delete mode 100644 libs/react-components/src/community/components/form/choice-group/choice-group-context.ts delete mode 100644 libs/react-components/src/community/components/form/choice-group/choice-group.module.scss delete mode 100644 libs/react-components/src/community/components/form/choice-group/choice-group.stories.tsx delete mode 100644 libs/react-components/src/community/components/form/choice-group/choice-group.tsx delete mode 100644 libs/react-components/src/community/components/form/choice-group/choice-group.types.ts delete mode 100644 libs/react-components/src/community/components/form/choice-group/components/choice-group-check/choice-group-check.tsx delete mode 100644 libs/react-components/src/community/components/form/choice-group/components/choice-group-radio/choice-group-radio.tsx delete mode 100644 libs/react-components/src/community/components/form/choice-group/components/filter-item/filter-item.module.scss delete mode 100644 libs/react-components/src/community/components/form/choice-group/components/filter-item/filter-item.tsx delete mode 100644 libs/react-components/src/community/components/form/choice-group/components/light-item/light-item.module.scss delete mode 100644 libs/react-components/src/community/components/form/choice-group/components/light-item/light-item.tsx delete mode 100644 libs/react-components/src/community/components/form/choice-group/components/selector-item/selector-item.module.scss delete mode 100644 libs/react-components/src/community/components/form/choice-group/components/selector-item/selector-item.tsx delete mode 100644 libs/react-components/src/community/components/form/choice-group/index.ts delete mode 100644 libs/react-components/src/community/components/form/choice-input.types.ts delete mode 100644 libs/react-components/src/community/components/form/file-upload/examples/multiple-handled.tsx delete mode 100644 libs/react-components/src/community/components/form/file-upload/file-upload.module.scss delete mode 100644 libs/react-components/src/community/components/form/file-upload/file-upload.stories.tsx delete mode 100644 libs/react-components/src/community/components/form/file-upload/file-upload.tsx delete mode 100644 libs/react-components/src/community/components/form/file-upload/index.ts delete mode 100644 libs/react-components/src/community/components/form/form.stories.tsx delete mode 100644 libs/react-components/src/community/components/form/hidden-field/examples/hidden-multiselect.tsx delete mode 100644 libs/react-components/src/community/components/form/hidden-field/examples/hidden-select.tsx delete mode 100644 libs/react-components/src/community/components/form/hidden-field/examples/hidden-textfield.tsx delete mode 100644 libs/react-components/src/community/components/form/hidden-field/hidden-field.module.scss delete mode 100644 libs/react-components/src/community/components/form/hidden-field/hidden-field.stories.tsx delete mode 100644 libs/react-components/src/community/components/form/hidden-field/hidden-field.tsx delete mode 100644 libs/react-components/src/community/components/form/pickers/calendar/calendar.module.scss delete mode 100644 libs/react-components/src/community/components/form/pickers/calendar/calendar.stories.tsx delete mode 100644 libs/react-components/src/community/components/form/pickers/calendar/calendar.tsx delete mode 100644 libs/react-components/src/community/components/form/pickers/datepicker/datepicker.stories.tsx delete mode 100644 libs/react-components/src/community/components/form/pickers/datepicker/datepicker.tsx delete mode 100644 libs/react-components/src/community/components/form/pickers/datetimepicker/datetimepicker.stories.tsx delete mode 100644 libs/react-components/src/community/components/form/pickers/datetimepicker/datetimepicker.tsx delete mode 100644 libs/react-components/src/community/components/form/pickers/index.ts delete mode 100644 libs/react-components/src/community/components/form/pickers/mui-input-transition/mui-input-transition.tsx delete mode 100644 libs/react-components/src/community/components/form/pickers/timepicker/timepicker.stories.tsx delete mode 100644 libs/react-components/src/community/components/form/pickers/timepicker/timepicker.tsx delete mode 100644 libs/react-components/src/community/components/form/radio/radio.module.scss delete mode 100644 libs/react-components/src/community/components/form/radio/radio.stories.tsx delete mode 100644 libs/react-components/src/community/components/form/radio/radio.tsx delete mode 100644 libs/react-components/src/community/components/form/select/examples/async.tsx delete mode 100644 libs/react-components/src/community/components/form/select/examples/custom-option.tsx delete mode 100644 libs/react-components/src/community/components/form/select/examples/editable.tsx delete mode 100644 libs/react-components/src/community/components/form/select/examples/multiple-handled.tsx delete mode 100644 libs/react-components/src/community/components/form/select/select.module.scss delete mode 100644 libs/react-components/src/community/components/form/select/select.stories.tsx delete mode 100644 libs/react-components/src/community/components/form/select/select.tsx delete mode 100644 libs/react-components/src/community/components/form/text-editor/components/block-style-controls.tsx delete mode 100644 libs/react-components/src/community/components/form/text-editor/components/inline-style-controls.tsx delete mode 100644 libs/react-components/src/community/components/form/text-editor/components/style-button.tsx delete mode 100644 libs/react-components/src/community/components/form/text-editor/text-editor.module.scss delete mode 100644 libs/react-components/src/community/components/form/text-editor/text-editor.stories.tsx delete mode 100644 libs/react-components/src/community/components/form/text-editor/text-editor.tsx delete mode 100644 libs/react-components/src/community/components/form/toggle/toggle.module.scss delete mode 100644 libs/react-components/src/community/components/form/toggle/toggle.stories.tsx delete mode 100644 libs/react-components/src/community/components/form/toggle/toggle.tsx delete mode 100644 libs/react-components/src/community/components/icon/icon.module.scss delete mode 100644 libs/react-components/src/community/components/icon/icon.stories.tsx delete mode 100644 libs/react-components/src/community/components/icon/icon.tsx delete mode 100644 libs/react-components/src/community/components/layout/breadcrumbs/breadcrumbs.module.scss delete mode 100644 libs/react-components/src/community/components/layout/breadcrumbs/breadcrumbs.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/breadcrumbs/breadcrumbs.tsx delete mode 100644 libs/react-components/src/community/components/layout/breadcrumbs/crumb/crumb.tsx delete mode 100644 libs/react-components/src/community/components/layout/footer/footer.module.scss delete mode 100644 libs/react-components/src/community/components/layout/footer/footer.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/footer/footer.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-bottom-content/header-bottom-content.module.scss delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-bottom-content/header-bottom-content.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-bottom-content/header-bottom-content.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-content/header-content.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-content/header-content.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-dropdown/header-dropdown.module.scss delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-dropdown/header-dropdown.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-dropdown/header-dropdown.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-language/header-language.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-language/header-language.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-modal/header-modal.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-modal/header-modal.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-navigation/header-navigation.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-navigation/readme.md delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-notification/header-notification.module.scss delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-notification/header-notification.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-notification/header-notification.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-role/header-role.module.scss delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-role/header-role.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-role/header-role.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-settings/header-settings.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/header-settings/header-settings.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/logo/logo.module.scss delete mode 100644 libs/react-components/src/community/components/layout/header/components/logo/logo.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/sidenav-toggle/sidenav-toggle.module.scss delete mode 100644 libs/react-components/src/community/components/layout/header/components/sidenav-toggle/sidenav-toggle.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/skip-links/skip-links.module.scss delete mode 100644 libs/react-components/src/community/components/layout/header/components/skip-links/skip-links.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/components/skip-links/skip-links.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/header.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/header/header.module.scss delete mode 100644 libs/react-components/src/community/components/layout/header/header/header.tsx delete mode 100644 libs/react-components/src/community/components/layout/header/headerDocumentation.mdx delete mode 100644 libs/react-components/src/community/components/layout/header/index.ts delete mode 100644 libs/react-components/src/community/components/layout/index.ts delete mode 100644 libs/react-components/src/community/components/layout/layout-context.ts delete mode 100644 libs/react-components/src/community/components/layout/layout/layout.module.scss delete mode 100644 libs/react-components/src/community/components/layout/layout/layout.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/layout/layout.tsx delete mode 100644 libs/react-components/src/community/components/layout/layoutDocumentation.mdx delete mode 100644 libs/react-components/src/community/components/layout/sidenav/sidenav.module.scss delete mode 100644 libs/react-components/src/community/components/layout/sidenav/sidenav.spec.tsx delete mode 100644 libs/react-components/src/community/components/layout/sidenav/sidenav.stories.tsx delete mode 100644 libs/react-components/src/community/components/layout/sidenav/sidenav.tsx delete mode 100644 libs/react-components/src/community/components/layout/sidenav/utility.ts delete mode 100644 libs/react-components/src/community/components/map-components/base-map-selection/base-map-selection.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/base-map-selection/base-map-selection.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/base-map-selection/base-map-selection.tsx delete mode 100644 libs/react-components/src/community/components/map-components/button-group/button-group.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/button-group/button-group.tsx delete mode 100644 libs/react-components/src/community/components/map-components/carousel/carousel.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/carousel/carousel.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/carousel/carousel.tsx delete mode 100644 libs/react-components/src/community/components/map-components/color-and-icon-picker/color-and-icon-picker.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/color-and-icon-picker/color-and-icon-picker.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/color-and-icon-picker/color-and-icon-picker.tsx delete mode 100644 libs/react-components/src/community/components/map-components/comparison/comparison.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/comparison/comparison.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/comparison/comparison.tsx delete mode 100644 libs/react-components/src/community/components/map-components/directions/direction-item.tsx delete mode 100644 libs/react-components/src/community/components/map-components/directions/directions.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/directions/directions.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/directions/directions.tsx delete mode 100644 libs/react-components/src/community/components/map-components/directions/index.ts delete mode 100644 libs/react-components/src/community/components/map-components/edit-actions/editing-actions.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/edit-actions/editing-actions.tsx delete mode 100644 libs/react-components/src/community/components/map-components/left-panel/left-panel-content.tsx delete mode 100644 libs/react-components/src/community/components/map-components/left-panel/left-panel-footer.tsx delete mode 100644 libs/react-components/src/community/components/map-components/left-panel/left-panel-header.tsx delete mode 100644 libs/react-components/src/community/components/map-components/left-panel/left-panel.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/left-panel/left-panel.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/left-panel/left-panel.tsx delete mode 100644 libs/react-components/src/community/components/map-components/legend/legend.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/legend/legend.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/legend/legend.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-accordion/index.ts delete mode 100644 libs/react-components/src/community/components/map-components/map-accordion/map-accordion-item-content.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-accordion/map-accordion-item-header.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-accordion/map-accordion-item.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-accordion/map-accordion.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/map-accordion/map-accordion.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-accordion/map-accordion.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-button/map-button.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/map-button/map-button.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-button/map-button.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-dropdown/map-dropdown.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/map-dropdown/map-dropdown.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-info/map-info.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/map-info/map-info.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-info/map-info.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-layer/map-layer.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/map-layer/map-layer.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-layer/map-layer.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-preview/map-preview.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/map-preview/map-preview.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-preview/map-preview.tsx delete mode 100644 libs/react-components/src/community/components/map-components/map-select/map-select.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/map-select/map-select.tsx delete mode 100644 libs/react-components/src/community/components/map-components/resizer/resizer.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/resizer/resizer.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/resizer/resizer.tsx delete mode 100644 libs/react-components/src/community/components/map-components/right-panel/examples.tsx delete mode 100644 libs/react-components/src/community/components/map-components/right-panel/right-panel.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/right-panel/right-panel.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/right-panel/right-panel.tsx delete mode 100644 libs/react-components/src/community/components/map-components/scale-bar/scale-bar.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/scale-bar/scale-bar.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/scale-bar/scale-bar.tsx delete mode 100644 libs/react-components/src/community/components/map-components/sheet/sheet.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/sheet/sheet.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/sheet/sheet.tsx delete mode 100644 libs/react-components/src/community/components/map-components/timeline/timeline.module.scss delete mode 100644 libs/react-components/src/community/components/map-components/timeline/timeline.stories.tsx delete mode 100644 libs/react-components/src/community/components/map-components/timeline/timeline.tsx delete mode 100644 libs/react-components/src/community/components/modal/index.ts delete mode 100644 libs/react-components/src/community/components/modal/modal-closer.tsx delete mode 100644 libs/react-components/src/community/components/modal/modal-provider.tsx delete mode 100644 libs/react-components/src/community/components/modal/modal-trigger.tsx delete mode 100644 libs/react-components/src/community/components/modal/modal.module.scss delete mode 100644 libs/react-components/src/community/components/modal/modal.stories.tsx delete mode 100644 libs/react-components/src/community/components/modal/modal.tsx delete mode 100644 libs/react-components/src/community/components/placeholder/placeholder.stories.tsx delete mode 100644 libs/react-components/src/community/components/placeholder/placeholder.tsx delete mode 100644 libs/react-components/src/community/components/status/status.module.scss delete mode 100644 libs/react-components/src/community/components/status/status.stories.tsx delete mode 100644 libs/react-components/src/community/components/status/status.tsx delete mode 100644 libs/react-components/src/community/components/stepper/index.tsx delete mode 100644 libs/react-components/src/community/components/stepper/step.tsx delete mode 100644 libs/react-components/src/community/components/stepper/stepper-context.ts delete mode 100644 libs/react-components/src/community/components/stepper/stepper-nav.tsx delete mode 100644 libs/react-components/src/community/components/stepper/stepper.module.scss delete mode 100644 libs/react-components/src/community/components/stepper/stepper.stories.tsx delete mode 100644 libs/react-components/src/community/components/stepper/stepper.tsx delete mode 100644 libs/react-components/src/community/components/table-of-contents/index.ts delete mode 100644 libs/react-components/src/community/components/table-of-contents/table-of-contents-item.tsx delete mode 100644 libs/react-components/src/community/components/table-of-contents/table-of-contents-items.tsx delete mode 100644 libs/react-components/src/community/components/table-of-contents/table-of-contents-modal.tsx delete mode 100644 libs/react-components/src/community/components/table-of-contents/table-of-contents.module.scss delete mode 100644 libs/react-components/src/community/components/table-of-contents/table-of-contents.stories.tsx delete mode 100644 libs/react-components/src/community/components/table-of-contents/table-of-contents.tsx delete mode 100644 libs/react-components/src/community/components/table/components/customize-table-cell/customize-table-cell.module.scss delete mode 100644 libs/react-components/src/community/components/table/components/customize-table-cell/customize-table-cell.tsx delete mode 100644 libs/react-components/src/community/components/table/components/examples/custom-expand-row.tsx delete mode 100644 libs/react-components/src/community/components/table/components/helpers.tsx delete mode 100644 libs/react-components/src/community/components/table/components/pagination/PaginationNextButton.tsx delete mode 100644 libs/react-components/src/community/components/table/components/pagination/PaginationPageButton.tsx delete mode 100644 libs/react-components/src/community/components/table/components/pagination/pagination.module.scss delete mode 100644 libs/react-components/src/community/components/table/components/pagination/pagination.tsx delete mode 100644 libs/react-components/src/community/components/table/components/pagination/use-pagination.ts delete mode 100644 libs/react-components/src/community/components/table/components/table-filter/components/table-date-filter.tsx delete mode 100644 libs/react-components/src/community/components/table/components/table-filter/components/table-select-filter.tsx delete mode 100644 libs/react-components/src/community/components/table/components/table-filter/components/table-text-filter.tsx delete mode 100644 libs/react-components/src/community/components/table/components/table-filter/filter-fn.ts delete mode 100644 libs/react-components/src/community/components/table/components/table-filter/table-filter-context.tsx delete mode 100644 libs/react-components/src/community/components/table/components/table-filter/table-filter.tsx delete mode 100644 libs/react-components/src/community/components/table/components/table-layout/table-layout.tsx delete mode 100644 libs/react-components/src/community/components/table/components/table-loader/table-loader.tsx delete mode 100644 libs/react-components/src/community/components/table/index.ts delete mode 100644 libs/react-components/src/community/components/table/table-context.tsx delete mode 100644 libs/react-components/src/community/components/table/table.module.scss delete mode 100644 libs/react-components/src/community/components/table/table.stories.tsx delete mode 100644 libs/react-components/src/community/components/table/table.tsx delete mode 100644 libs/react-components/src/community/components/table/table.types.ts delete mode 100644 libs/react-components/src/community/components/tabs/index.ts delete mode 100644 libs/react-components/src/community/components/tabs/tabs-context.tsx delete mode 100644 libs/react-components/src/community/components/tabs/tabs-item/tabs-item.tsx delete mode 100644 libs/react-components/src/community/components/tabs/tabs-nav/tabs-nav-item.tsx delete mode 100644 libs/react-components/src/community/components/tabs/tabs-nav/tabs-nav.module.scss delete mode 100644 libs/react-components/src/community/components/tabs/tabs-nav/tabs-nav.tsx delete mode 100644 libs/react-components/src/community/components/tabs/tabs.stories.tsx delete mode 100644 libs/react-components/src/community/components/tabs/tabs/tabs.module.scss delete mode 100644 libs/react-components/src/community/components/tabs/tabs/tabs.tsx delete mode 100644 libs/react-components/src/community/components/tag/tag-examples.tsx delete mode 100644 libs/react-components/src/community/components/tag/tag.mdx delete mode 100644 libs/react-components/src/community/components/tag/tag.module.scss delete mode 100644 libs/react-components/src/community/components/tag/tag.stories.tsx delete mode 100644 libs/react-components/src/community/components/tag/tag.tsx delete mode 100644 libs/react-components/src/community/components/toggle-open/toggle-open.module.scss delete mode 100644 libs/react-components/src/community/components/toggle-open/toggle-open.stories.tsx delete mode 100644 libs/react-components/src/community/components/toggle-open/toggle-open.tsx delete mode 100644 libs/react-components/src/community/components/tooltip/index.ts delete mode 100644 libs/react-components/src/community/components/tooltip/tooltip-provider.tsx delete mode 100644 libs/react-components/src/community/components/tooltip/tooltip-trigger.tsx delete mode 100644 libs/react-components/src/community/components/tooltip/tooltip.module.scss delete mode 100644 libs/react-components/src/community/components/tooltip/tooltip.stories.tsx delete mode 100644 libs/react-components/src/community/components/tooltip/tooltip.tsx delete mode 100644 libs/react-components/src/community/components/typography/heading/heading.spec.tsx delete mode 100644 libs/react-components/src/community/components/typography/heading/heading.stories.tsx delete mode 100644 libs/react-components/src/community/components/typography/heading/heading.tsx delete mode 100644 libs/react-components/src/community/components/typography/text/text.stories.tsx delete mode 100644 libs/react-components/src/community/components/typography/text/text.tsx delete mode 100644 libs/react-components/src/community/components/vertical-progress/index.ts delete mode 100644 libs/react-components/src/community/components/vertical-progress/vertical-progress-item.stories.tsx delete mode 100644 libs/react-components/src/community/components/vertical-progress/vertical-progress-item.tsx delete mode 100644 libs/react-components/src/community/components/vertical-progress/vertical-progress.stories.tsx delete mode 100644 libs/react-components/src/community/components/vertical-progress/vertical-progress.tsx delete mode 100644 libs/react-components/src/community/components/vertical-stepper/index.ts delete mode 100644 libs/react-components/src/community/components/vertical-stepper/step-item/step-item.tsx delete mode 100644 libs/react-components/src/community/components/vertical-stepper/sub-item/sub-item.tsx delete mode 100644 libs/react-components/src/community/components/vertical-stepper/vertical-stepper.module.scss delete mode 100644 libs/react-components/src/community/components/vertical-stepper/vertical-stepper.stories.tsx delete mode 100644 libs/react-components/src/community/components/vertical-stepper/vertical-stepper.tsx delete mode 100644 libs/react-components/src/community/docs/buttons/button-groups.mdx delete mode 100644 libs/react-components/src/community/docs/buttons/button-groups.tsx delete mode 100644 libs/react-components/src/community/docs/buttons/buttons-documentation.tsx delete mode 100644 libs/react-components/src/community/docs/buttons/buttons.mdx delete mode 100644 libs/react-components/src/community/docs/colors/guidelines.tsx delete mode 100644 libs/react-components/src/community/docs/scale-layout/breaking-points.tsx delete mode 100644 libs/react-components/src/community/docs/scale-layout/development.mdx delete mode 100644 libs/react-components/src/community/docs/scale-layout/grid.mdx delete mode 100644 libs/react-components/src/community/docs/scale-layout/grid.tsx delete mode 100644 libs/react-components/src/community/docs/scale-layout/spacing.mdx delete mode 100644 libs/react-components/src/community/docs/scale-layout/spacing.tsx delete mode 100644 libs/react-components/src/community/helpers/background-colors/background-colors.module.scss delete mode 100644 libs/react-components/src/community/helpers/background-colors/background-colors.stories.tsx delete mode 100644 libs/react-components/src/community/helpers/background-colors/background-colors.tsx delete mode 100644 libs/react-components/src/community/helpers/hooks/use-breakpoint-props.mdx delete mode 100644 libs/react-components/src/community/helpers/hooks/use-breakpoint-props.ts delete mode 100644 libs/react-components/src/community/helpers/hooks/use-breakpoint.ts delete mode 100644 libs/react-components/src/community/helpers/hooks/use-first-render.ts delete mode 100644 libs/react-components/src/community/helpers/hooks/use-layout.ts delete mode 100644 libs/react-components/src/community/helpers/index.ts delete mode 100644 libs/react-components/src/community/helpers/polymorphic/types.ts delete mode 100644 libs/react-components/src/community/index.ts delete mode 100644 libs/react-components/src/community/providers/style-provider/style-provider.tsx delete mode 100644 libs/react-components/src/community/styles/_base.scss delete mode 100644 libs/react-components/src/community/styles/_fonts.scss delete mode 100644 libs/react-components/src/community/styles/_helpers.scss delete mode 100644 libs/react-components/src/community/styles/_map-component.variables.scss delete mode 100644 libs/react-components/src/community/styles/_mixins.scss delete mode 100644 libs/react-components/src/community/styles/_typography.scss delete mode 100644 libs/react-components/src/community/styles/components/_calendar.scss delete mode 100644 libs/react-components/src/community/styles/components/_datepicker.scss delete mode 100644 libs/react-components/src/community/styles/components/_text-editor.scss delete mode 100644 libs/react-components/src/community/styles/components/_toast.scss delete mode 100644 libs/react-components/src/community/styles/index.scss delete mode 100644 libs/react-components/src/community/styles/storybook.scss delete mode 100644 libs/react-components/src/community/types/index.ts delete mode 100644 libs/react-components/src/tedi/components/base/icon/icon.module.scss delete mode 100644 libs/react-components/src/tedi/components/base/icon/icon.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/base/icon/icon.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/base/icon/icon.tsx delete mode 100644 libs/react-components/src/tedi/components/base/typography/heading/heading.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/base/typography/heading/heading.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/base/typography/heading/heading.tsx delete mode 100644 libs/react-components/src/tedi/components/base/typography/text/text.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/base/typography/text/text.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/base/typography/text/text.tsx delete mode 100644 libs/react-components/src/tedi/components/base/typography/typography.mdx delete mode 100644 libs/react-components/src/tedi/components/buttons/button-content/README.md delete mode 100644 libs/react-components/src/tedi/components/buttons/button-content/button-content.module.scss delete mode 100644 libs/react-components/src/tedi/components/buttons/button-content/button-content.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/button-content/button-content.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/button-group/button-group.module.scss delete mode 100644 libs/react-components/src/tedi/components/buttons/button-group/button-group.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/button-group/button-group.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/button-group/button-group.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/button/button.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/button/button.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/button/button.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/closing-button/closing-button.module.scss delete mode 100644 libs/react-components/src/tedi/components/buttons/closing-button/closing-button.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/closing-button/closing-button.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/closing-button/closing-button.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/collapse/collapse.module.scss delete mode 100644 libs/react-components/src/tedi/components/buttons/collapse/collapse.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/collapse/collapse.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/collapse/collapse.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/floating-button/floating-button.module.scss delete mode 100644 libs/react-components/src/tedi/components/buttons/floating-button/floating-button.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/floating-button/floating-button.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/floating-button/floating-button.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/info-button/info-button.module.scss delete mode 100644 libs/react-components/src/tedi/components/buttons/info-button/info-button.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/info-button/info-button.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/buttons/info-button/info-button.tsx delete mode 100644 libs/react-components/src/tedi/components/cards/card/card-content/card-content.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/cards/card/card-content/card-content.tsx delete mode 100644 libs/react-components/src/tedi/components/cards/card/card-context.ts delete mode 100644 libs/react-components/src/tedi/components/cards/card/card-header/card-header.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/cards/card/card-header/card-header.tsx delete mode 100644 libs/react-components/src/tedi/components/cards/card/card-notification/card-notification.module.scss delete mode 100644 libs/react-components/src/tedi/components/cards/card/card-notification/card-notification.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/cards/card/card-notification/card-notification.tsx delete mode 100644 libs/react-components/src/tedi/components/cards/card/card-stories-templates.tsx delete mode 100644 libs/react-components/src/tedi/components/cards/card/card.module.scss delete mode 100644 libs/react-components/src/tedi/components/cards/card/card.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/cards/card/card.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/cards/card/card.tsx delete mode 100644 libs/react-components/src/tedi/components/cards/card/index.ts delete mode 100644 libs/react-components/src/tedi/components/cards/card/utility.ts delete mode 100644 libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.module.scss delete mode 100644 libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.tsx delete mode 100644 libs/react-components/src/tedi/components/content/label/label.module.scss delete mode 100644 libs/react-components/src/tedi/components/content/label/label.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/content/label/label.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/content/label/label.tsx delete mode 100644 libs/react-components/src/tedi/components/content/list/index.ts delete mode 100644 libs/react-components/src/tedi/components/content/list/list-item.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/content/list/list-item.tsx delete mode 100644 libs/react-components/src/tedi/components/content/list/list.module.scss delete mode 100644 libs/react-components/src/tedi/components/content/list/list.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/content/list/list.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/content/list/list.tsx delete mode 100644 libs/react-components/src/tedi/components/content/section/section.module.scss delete mode 100644 libs/react-components/src/tedi/components/content/section/section.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/content/section/section.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/content/section/section.tsx delete mode 100644 libs/react-components/src/tedi/components/content/text-group/text-group.module.scss delete mode 100644 libs/react-components/src/tedi/components/content/text-group/text-group.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/content/text-group/text-group.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/content/text-group/text-group.tsx delete mode 100644 libs/react-components/src/tedi/components/content/truncate/truncate.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/content/truncate/truncate.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/content/truncate/truncate.tsx delete mode 100644 libs/react-components/src/tedi/components/form/checkbox/checkbox.module.scss delete mode 100644 libs/react-components/src/tedi/components/form/checkbox/checkbox.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/checkbox/checkbox.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/form/checkbox/checkbox.tsx delete mode 100644 libs/react-components/src/tedi/components/form/choice-group/choice-group-context.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/choice-group/choice-group-context.ts delete mode 100644 libs/react-components/src/tedi/components/form/choice-group/choice-group.module.scss delete mode 100644 libs/react-components/src/tedi/components/form/choice-group/choice-group.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/choice-group/choice-group.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/form/choice-group/choice-group.tsx delete mode 100644 libs/react-components/src/tedi/components/form/choice-group/choice-group.types.ts delete mode 100644 libs/react-components/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.module.scss delete mode 100644 libs/react-components/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.tsx delete mode 100644 libs/react-components/src/tedi/components/form/choice-group/index.ts delete mode 100644 libs/react-components/src/tedi/components/form/choice-input.types.ts delete mode 100644 libs/react-components/src/tedi/components/form/feedback-text/feedback-text.module.scss delete mode 100644 libs/react-components/src/tedi/components/form/feedback-text/feedback-text.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/feedback-text/feedback-text.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/form/feedback-text/feedback-text.tsx delete mode 100644 libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.module.scss delete mode 100644 libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.tsx delete mode 100644 libs/react-components/src/tedi/components/form/file-upload/examples/multiple-handled.tsx delete mode 100644 libs/react-components/src/tedi/components/form/file-upload/file-upload.module.scss delete mode 100644 libs/react-components/src/tedi/components/form/file-upload/file-upload.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/file-upload/file-upload.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/form/file-upload/file-upload.tsx delete mode 100644 libs/react-components/src/tedi/components/form/file-upload/index.ts delete mode 100644 libs/react-components/src/tedi/components/form/form-label/form-label.module.scss delete mode 100644 libs/react-components/src/tedi/components/form/form-label/form-label.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/form-label/form-label.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/form/form-label/form-label.tsx delete mode 100644 libs/react-components/src/tedi/components/form/number-field/number-field.module.scss delete mode 100644 libs/react-components/src/tedi/components/form/number-field/number-field.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/number-field/number-field.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/form/number-field/number-field.tsx delete mode 100644 libs/react-components/src/tedi/components/form/radio/radio.module.scss delete mode 100644 libs/react-components/src/tedi/components/form/radio/radio.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/radio/radio.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/form/radio/radio.tsx delete mode 100644 libs/react-components/src/tedi/components/form/search/search.module.scss delete mode 100644 libs/react-components/src/tedi/components/form/search/search.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/search/search.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/form/search/search.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-clear-indicator.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-control.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-dropdown-indicator.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-group-heading.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-group.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-indicators-container.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-input.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-loading-indicator.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-menu-list.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-menu-portal.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-menu.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-multi-option.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-multi-value-remove.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-multi-value.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-option.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-single-option.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/components/select-value-container.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/examples/async.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/examples/custom-option.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/examples/editable.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/examples/multiple-handled.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/select.module.scss delete mode 100644 libs/react-components/src/tedi/components/form/select/select.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/select.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/form/select/select.tsx delete mode 100644 libs/react-components/src/tedi/components/form/textarea/textarea.module.scss delete mode 100644 libs/react-components/src/tedi/components/form/textarea/textarea.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/textarea/textarea.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/form/textarea/textarea.tsx delete mode 100644 libs/react-components/src/tedi/components/form/textfield/textfield.module.scss delete mode 100644 libs/react-components/src/tedi/components/form/textfield/textfield.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/form/textfield/textfield.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/form/textfield/textfield.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/grid/col.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/grid/col.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/grid/grid.module.scss delete mode 100644 libs/react-components/src/tedi/components/layout/grid/grid.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/grid/index.ts delete mode 100644 libs/react-components/src/tedi/components/layout/grid/row-context.ts delete mode 100644 libs/react-components/src/tedi/components/layout/grid/row.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/grid/row.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/components/sidenav-dropdown/sidenav-dropdown.module.scss delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/components/sidenav-dropdown/sidenav-dropdown.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/components/sidenav-dropdown/sidenav-dropdown.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/components/sidenav-item/sidenav-item.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/components/sidenav-item/sidenav-item.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/components/sidenav-mobile/sidenav-mobile.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/components/sidenav-mobile/sidenav-mobile.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/components/sidenav-toggle/sidenav-toggle.module.scss delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/components/sidenav-toggle/sidenav-toggle.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/components/sidenav-toggle/sidenav-toggle.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/documentation.mdx delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/examples.ts delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/index.ts delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/sidenav.module.scss delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/sidenav.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/sidenav.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/sidenav/sidenav.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/vertical-spacing/index.ts delete mode 100644 libs/react-components/src/tedi/components/layout/vertical-spacing/vertical-spacing-item.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/vertical-spacing/vertical-spacing-item.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/vertical-spacing/vertical-spacing.module.scss delete mode 100644 libs/react-components/src/tedi/components/layout/vertical-spacing/vertical-spacing.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/vertical-spacing/vertical-spacing.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/layout/vertical-spacing/vertical-spacing.tsx delete mode 100644 libs/react-components/src/tedi/components/loaders/skeleton/index.tsx delete mode 100644 libs/react-components/src/tedi/components/loaders/skeleton/skeleton-block/skeleton-block.module.scss delete mode 100644 libs/react-components/src/tedi/components/loaders/skeleton/skeleton-block/skeleton-block.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/loaders/skeleton/skeleton-block/skeleton-block.tsx delete mode 100644 libs/react-components/src/tedi/components/loaders/skeleton/skeleton.module.scss delete mode 100644 libs/react-components/src/tedi/components/loaders/skeleton/skeleton.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/loaders/skeleton/skeleton.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/loaders/skeleton/skeleton.tsx delete mode 100644 libs/react-components/src/tedi/components/loaders/spinner/spinner.module.scss delete mode 100644 libs/react-components/src/tedi/components/loaders/spinner/spinner.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/loaders/spinner/spinner.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/loaders/spinner/spinner.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/affix/affix.module.scss delete mode 100644 libs/react-components/src/tedi/components/misc/affix/affix.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/affix/affix.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/affix/affix.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/ellipsis/ellipsis.module.scss delete mode 100644 libs/react-components/src/tedi/components/misc/ellipsis/ellipsis.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/ellipsis/ellipsis.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/ellipsis/ellipsis.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/print/print.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/print/print.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/print/print.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/print/printing.mdx delete mode 100644 libs/react-components/src/tedi/components/misc/scroll-fade/scroll-fade.module.scss delete mode 100644 libs/react-components/src/tedi/components/misc/scroll-fade/scroll-fade.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/scroll-fade/scroll-fade.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/scroll-fade/scroll-fade.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/scroll-visibility/scroll-visibility.module.scss delete mode 100644 libs/react-components/src/tedi/components/misc/scroll-visibility/scroll-visibility.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/scroll-visibility/scroll-visibility.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/scroll-visibility/scroll-visibility.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/separator/separator.module.scss delete mode 100644 libs/react-components/src/tedi/components/misc/separator/separator.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/separator/separator.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/separator/separator.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/stretch-content/stretch-content.module.scss delete mode 100644 libs/react-components/src/tedi/components/misc/stretch-content/stretch-content.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/stretch-content/stretch-content.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/misc/stretch-content/stretch-content.tsx delete mode 100644 libs/react-components/src/tedi/components/navigation/hash-trigger/hash-trigger.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/navigation/hash-trigger/hash-trigger.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/navigation/hash-trigger/hash-trigger.tsx delete mode 100644 libs/react-components/src/tedi/components/navigation/link/link-helpers.tsx delete mode 100644 libs/react-components/src/tedi/components/navigation/link/link.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/navigation/link/link.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/navigation/link/link.tsx delete mode 100644 libs/react-components/src/tedi/components/notifications/alert/alert.module.scss delete mode 100644 libs/react-components/src/tedi/components/notifications/alert/alert.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/notifications/alert/alert.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/notifications/alert/alert.tsx delete mode 100644 libs/react-components/src/tedi/components/notifications/toast/documentation.mdx delete mode 100644 libs/react-components/src/tedi/components/notifications/toast/toast.module.scss delete mode 100644 libs/react-components/src/tedi/components/notifications/toast/toast.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/notifications/toast/toast.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/notifications/toast/toast.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/overlay/overlay-content.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/overlay/overlay-trigger.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/overlay/overlay.module.scss delete mode 100644 libs/react-components/src/tedi/components/overlays/overlay/overlay.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/overlay/overlay.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/popover/index.ts delete mode 100644 libs/react-components/src/tedi/components/overlays/popover/popover-content.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/popover/popover-trigger.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/popover/popover.module.scss delete mode 100644 libs/react-components/src/tedi/components/overlays/popover/popover.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/popover/popover.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/popover/popover.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/tooltip/index.ts delete mode 100644 libs/react-components/src/tedi/components/overlays/tooltip/tooltip-content.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/tooltip/tooltip-trigger.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/tooltip/tooltip.module.scss delete mode 100644 libs/react-components/src/tedi/components/overlays/tooltip/tooltip.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/tooltip/tooltip.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/overlays/tooltip/tooltip.tsx delete mode 100644 libs/react-components/src/tedi/components/tags/status-badge/status-badge.module.scss delete mode 100644 libs/react-components/src/tedi/components/tags/status-badge/status-badge.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/tags/status-badge/status-badge.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/tags/status-badge/status-badge.tsx delete mode 100644 libs/react-components/src/tedi/components/tags/tag/tag.module.scss delete mode 100644 libs/react-components/src/tedi/components/tags/tag/tag.spec.tsx delete mode 100644 libs/react-components/src/tedi/components/tags/tag/tag.stories.tsx delete mode 100644 libs/react-components/src/tedi/components/tags/tag/tag.tsx delete mode 100644 libs/react-components/src/tedi/docs/_badges.mdx delete mode 100644 libs/react-components/src/tedi/docs/_welcome.mdx delete mode 100644 libs/react-components/src/tedi/docs/changelog.mdx delete mode 100644 libs/react-components/src/tedi/docs/colors/base-color-variables.json delete mode 100644 libs/react-components/src/tedi/docs/colors/brand-color-variables.json delete mode 100644 libs/react-components/src/tedi/docs/colors/color-tokens.tsx delete mode 100644 libs/react-components/src/tedi/docs/colors/tedi-colors.mdx delete mode 100644 libs/react-components/src/tedi/docs/getStarted.mdx delete mode 100644 libs/react-components/src/tedi/helpers/background-colors/background-colors.module.scss delete mode 100644 libs/react-components/src/tedi/helpers/background-colors/background-colors.tsx delete mode 100644 libs/react-components/src/tedi/helpers/hooks/use-breakpoint-props.ts delete mode 100644 libs/react-components/src/tedi/helpers/hooks/use-breakpoint.ts delete mode 100644 libs/react-components/src/tedi/helpers/hooks/use-element-size.ts delete mode 100644 libs/react-components/src/tedi/helpers/hooks/use-file-upload.ts delete mode 100644 libs/react-components/src/tedi/helpers/hooks/use-is-mounted.ts delete mode 100644 libs/react-components/src/tedi/helpers/hooks/use-is-touch-device.ts delete mode 100644 libs/react-components/src/tedi/helpers/hooks/use-print.ts delete mode 100644 libs/react-components/src/tedi/helpers/hooks/use-scroll.ts delete mode 100644 libs/react-components/src/tedi/helpers/hooks/use-sidenav-state.ts delete mode 100644 libs/react-components/src/tedi/helpers/hooks/use-what-input.ts delete mode 100644 libs/react-components/src/tedi/helpers/index.ts delete mode 100644 libs/react-components/src/tedi/helpers/polymorphic/types.ts delete mode 100644 libs/react-components/src/tedi/index.ts delete mode 100644 libs/react-components/src/tedi/providers/accessibility-provider/accessibility-provider.tsx delete mode 100644 libs/react-components/src/tedi/providers/accessibility-provider/use-declare-loader.tsx delete mode 100644 libs/react-components/src/tedi/providers/label-provider/adding-labels.mdx delete mode 100644 libs/react-components/src/tedi/providers/label-provider/index.ts delete mode 100644 libs/react-components/src/tedi/providers/label-provider/label-provider.mdx delete mode 100644 libs/react-components/src/tedi/providers/label-provider/label-provider.stories.tsx delete mode 100644 libs/react-components/src/tedi/providers/label-provider/label-provider.tsx delete mode 100644 libs/react-components/src/tedi/providers/label-provider/labels-map.ts delete mode 100644 libs/react-components/src/tedi/providers/label-provider/labels-table.tsx delete mode 100644 libs/react-components/src/tedi/providers/label-provider/labels.mdx delete mode 100644 libs/react-components/src/tedi/providers/label-provider/migration-guide.mdx delete mode 100644 libs/react-components/src/tedi/providers/label-provider/use-labels.tsx delete mode 100644 libs/react-components/src/tedi/providers/storybook-provider/storybook-provider.tsx delete mode 100644 libs/react-components/src/tedi/providers/style-provider/style-provider.tsx delete mode 100644 libs/react-components/src/tedi/styles/index.scss delete mode 100644 libs/react-components/src/tedi/types/commonTypes.tsx delete mode 100644 libs/react-components/tsconfig.json delete mode 100644 libs/react-components/tsconfig.lib.json delete mode 100644 libs/react-components/tsconfig.spec.json delete mode 100644 libs/react-components/vite.config.ts delete mode 100644 libs/tedi-core/.prettierignore delete mode 100644 libs/tedi-core/.prettierrc delete mode 100644 libs/tedi-core/.releaserc.json delete mode 100644 libs/tedi-core/.stylelintrc.json delete mode 100644 libs/tedi-core/CHANGELOG.md delete mode 100644 libs/tedi-core/README.md delete mode 100644 libs/tedi-core/package-lock.json delete mode 100644 libs/tedi-core/package.json delete mode 100644 libs/tedi-core/public/buttons/central-alignment.svg delete mode 100644 libs/tedi-core/public/buttons/left-alignment.svg delete mode 100644 libs/tedi-core/public/buttons/right-alignment-back.svg delete mode 100644 libs/tedi-core/public/buttons/right-alignment.svg delete mode 100644 libs/tedi-core/public/colors/backgrounds-inverted.svg delete mode 100644 libs/tedi-core/public/colors/backgrounds.svg delete mode 100644 libs/tedi-core/public/colors/disabled.svg delete mode 100644 libs/tedi-core/public/colors/foregrounds-inverted.svg delete mode 100644 libs/tedi-core/public/colors/foregrounds.svg delete mode 100644 libs/tedi-core/public/layout/columns.svg delete mode 100644 libs/tedi-core/public/layout/gutter.svg delete mode 100644 libs/tedi-core/public/layout/header-areas.svg delete mode 100644 libs/tedi-core/public/layout/layout-variatsions.svg delete mode 100644 libs/tedi-core/public/layout/offset.svg delete mode 100644 libs/tedi-core/public/layout/spacing-in-elements.svg delete mode 100644 libs/tedi-core/public/layout/spacing.svg delete mode 100644 libs/tedi-core/scss.d.ts delete mode 100644 libs/tedi-core/src/_base.scss delete mode 100644 libs/tedi-core/src/_fonts.scss delete mode 100644 libs/tedi-core/src/_helpers.scss delete mode 100644 libs/tedi-core/src/_icons.scss delete mode 100644 libs/tedi-core/src/_mixins.scss delete mode 100644 libs/tedi-core/src/_print.scss delete mode 100644 libs/tedi-core/src/_typography.scss delete mode 100644 libs/tedi-core/src/bootstrap-utility/_breakpoints.scss delete mode 100644 libs/tedi-core/src/bootstrap-utility/_grid.scss delete mode 100644 libs/tedi-core/src/bootstrap-utility/_mixin-utilities.scss delete mode 100644 libs/tedi-core/src/bootstrap-utility/_utilities-api.scss delete mode 100644 libs/tedi-core/src/bootstrap-utility/_utilities.scss delete mode 100644 libs/tedi-core/src/index.scss delete mode 100644 libs/tedi-core/src/tedi-storybook-styles.scss delete mode 100644 libs/tedi-core/src/variables/_base-variables.scss delete mode 100644 libs/tedi-core/src/variables/_bootstrap-variables.scss delete mode 100644 libs/tedi-core/src/variables/_color-variables.scss delete mode 100644 libs/tedi-core/src/variables/_dimensional-variables.scss delete mode 100644 libs/tedi-core/src/variables/_font-variables.scss delete mode 100644 libs/tedi-core/src/variables/_utility-variables.scss delete mode 100644 libs/tedi-core/tsconfig.json rename libs/angular-components/ng-package.json => ng-package.json (59%) rename libs/angular-components/public-api.ts => public-api.ts (100%) rename {libs/tedi-core/public => public}/404.svg (100%) rename {libs/tedi-core/public => public}/SF-horizontal.png (100%) rename {libs/tedi-core/public => public}/SF-vertical.png (100%) rename {libs/tedi-core/public => public}/TEHIK_logo.svg (100%) rename {libs/tedi-core/public => public}/TEHIK_logo2.svg (100%) rename {libs/tedi-core/public => public}/card-background-example.svg (100%) rename {libs/tedi-core/public => public}/fonts/README.md (100%) rename {libs/tedi-core/public => public}/fonts/material-symbols-outlined.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/material-symbols-rounded.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/material-symbols-sharp.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-cyrillic-300-italic.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-cyrillic-300.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-cyrillic-400-italic.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-cyrillic-400.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-cyrillic-700-italic.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-cyrillic-700.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-cyrillic-ext-300-italic.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-cyrillic-ext-300.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-cyrillic-ext-400-italic.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-cyrillic-ext-400.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-cyrillic-ext-700-italic.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-cyrillic-ext-700.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-latin-300-italic.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-latin-300.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-latin-400-italic.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-latin-400.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-latin-700-italic.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-latin-700.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-latin-ext-300-italic.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-latin-ext-300.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-latin-ext-400-italic.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-latin-ext-400.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-latin-ext-700-italic.woff2 (100%) rename {libs/tedi-core/public => public}/fonts/roboto-v30-latin-ext-700.woff2 (100%) rename {libs/tedi-core/public => public}/header-logo.svg (100%) rename {libs/tedi-core/public => public}/logo.svg (100%) rename {libs/tedi-core/public => public}/sf_logod.jpg (100%) rename {libs/tedi-core/public => public}/sf_logod_vertikaalne.jpg (100%) rename {libs/tedi-core/public => public}/tehik_logo.png (100%) rename libs/angular-components/setup-jest.ts => setup-jest.ts (100%) rename {libs/angular-components => src}/dev-tools/createBreakpointArgTypes.ts (100%) rename {libs/angular-components => src}/dev-tools/index.ts (100%) rename {libs/angular-components => src}/docs/badges.mdx (100%) rename {libs/angular-components => src}/docs/changelog.mdx (79%) rename {libs/angular-components => src}/docs/colors/base-color-variables.json (100%) rename {libs/angular-components => src}/docs/colors/brand-color-variables.json (100%) rename {libs/angular-components => src}/docs/colors/colors.component.ts (100%) rename {libs/angular-components => src}/docs/colors/colors.mdx (100%) rename {libs/angular-components => src}/docs/colors/colors.stories.ts (100%) rename {libs/angular-components => src}/docs/get-started.mdx (61%) rename {libs/angular-components => src}/docs/welcome.mdx (59%) create mode 100644 src/styles/index.scss rename {libs/angular-components => src}/styles/vertical-spacing.scss (100%) rename {libs/angular-components/tedi => tedi}/components/base/icon/icon.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/base/icon/icon.component.scss (97%) rename {libs/angular-components/tedi => tedi}/components/base/icon/icon.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/base/icon/icon.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/base/icon/icon.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/base/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/base/text/text.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/base/text/text.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/base/text/text.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/base/text/text.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/button/button.component.scss (73%) rename {libs/angular-components/tedi => tedi}/components/buttons/button/button.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/button/button.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/button/button.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/closing-button/closing-button.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/closing-button/closing-button.component.scss (96%) rename {libs/angular-components/tedi => tedi}/components/buttons/closing-button/closing-button.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/closing-button/closing-button.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/closing-button/closing-button.stories.ts (98%) rename {libs/angular-components/tedi => tedi}/components/buttons/collapse/collapse.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/collapse/collapse.component.scss (97%) rename {libs/angular-components/tedi => tedi}/components/buttons/collapse/collapse.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/collapse/collapse.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/collapse/collapse.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/info-button/info-button.component.scss (96%) rename {libs/angular-components/tedi => tedi}/components/buttons/info-button/info-button.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/info-button/info-button.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/buttons/info-button/info-button.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/content/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/content/list/list.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/content/list/list.component.scss (98%) rename {libs/angular-components/tedi => tedi}/components/content/list/list.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/content/list/list.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/content/list/list.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/content/text-group/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/content/text-group/text-group-label.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/content/text-group/text-group-value.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/content/text-group/text-group.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/content/text-group/text-group.component.scss (90%) rename {libs/angular-components/tedi => tedi}/components/content/text-group/text-group.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/content/text-group/text-group.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/content/text-group/text-group.stories.ts (98%) rename {libs/angular-components/tedi => tedi}/components/form/feedback-text/feedback-text.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/form/feedback-text/feedback-text.component.scss (69%) rename {libs/angular-components/tedi => tedi}/components/form/feedback-text/feedback-text.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/form/feedback-text/feedback-text.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/form/feedback-text/feedback-text.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/form/index.ts (100%) create mode 100644 tedi/components/form/label/label.component.scss rename {libs/angular-components/tedi => tedi}/components/form/label/label.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/form/label/label.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/form/label/label.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/form/number-field/number-field.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/form/number-field/number-field.component.scss (97%) rename {libs/angular-components/tedi => tedi}/components/form/number-field/number-field.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/form/number-field/number-field.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/form/number-field/number-field.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/form/toggle/toggle.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/form/toggle/toggle.component.scss (72%) rename {libs/angular-components/tedi => tedi}/components/form/toggle/toggle.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/form/toggle/toggle.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/form/toggle/toggle.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/grid/col/col.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/grid/col/col.component.scss (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/grid/col/col.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/grid/col/col.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/grid/col/col.stories.ts (96%) rename {libs/angular-components/tedi => tedi}/components/helpers/grid/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/grid/row/row.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/grid/row/row.component.scss (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/grid/row/row.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/grid/row/row.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/grid/row/row.stories.ts (97%) rename {libs/angular-components/tedi => tedi}/components/helpers/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/separator/separator.component.scss (99%) rename {libs/angular-components/tedi => tedi}/components/helpers/separator/separator.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/separator/separator.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/separator/separator.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/timeline/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/timeline/timeline-description/timeline-description.component.scss (92%) rename {libs/angular-components/tedi => tedi}/components/helpers/timeline/timeline-description/timeline-description.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/timeline/timeline-item/timeline-item.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/timeline/timeline-item/timeline-item.component.scss (95%) rename {libs/angular-components/tedi => tedi}/components/helpers/timeline/timeline-item/timeline-item.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/timeline/timeline-title/timeline-title.component.scss (92%) rename {libs/angular-components/tedi => tedi}/components/helpers/timeline/timeline-title/timeline-title.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/timeline/timeline.component.scss (75%) rename {libs/angular-components/tedi => tedi}/components/helpers/timeline/timeline.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/timeline/timeline.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/helpers/timeline/timeline.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-body/footer-body.component.scss (92%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-body/footer-body.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-body/footer-body.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-bottom/footer-bottom.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-bottom/footer-bottom.component.scss (94%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-bottom/footer-bottom.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-bottom/footer-bottom.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-section/footer-section.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-section/footer-section.component.scss (96%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-section/footer-section.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-section/footer-section.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-side/footer-side.component.scss (93%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-side/footer-side.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer-side/footer-side.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer.component.scss (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/footer.stories.ts (98%) rename {libs/angular-components/tedi => tedi}/components/layout/footer/index.ts (100%) create mode 100644 tedi/components/layout/header/header-actions/header-actions.component.scss rename {libs/angular-components/tedi => tedi}/components/layout/header/header-actions/header-actions.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header-content/header-content.component.scss (92%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header-content/header-content.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header-language/header-language.component.html (100%) create mode 100644 tedi/components/layout/header/header-language/header-language.component.scss rename {libs/angular-components/tedi => tedi}/components/layout/header/header-language/header-language.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header-language/header-language.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header-login/header-login.component.html (100%) create mode 100644 tedi/components/layout/header/header-login/header-login.component.scss rename {libs/angular-components/tedi => tedi}/components/layout/header/header-login/header-login.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header-login/header-login.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header-logout/header-logout.component.html (100%) create mode 100644 tedi/components/layout/header/header-logout/header-logout.component.scss rename {libs/angular-components/tedi => tedi}/components/layout/header/header-logout/header-logout.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header-logout/header-logout.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header-profile/header-profile.component.html (100%) create mode 100644 tedi/components/layout/header/header-profile/header-profile.component.scss rename {libs/angular-components/tedi => tedi}/components/layout/header/header-profile/header-profile.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header-profile/header-profile.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header-role/header-role.component.html (100%) create mode 100644 tedi/components/layout/header/header-role/header-role.component.scss rename {libs/angular-components/tedi => tedi}/components/layout/header/header-role/header-role.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header-role/header-role.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header.component.html (100%) create mode 100644 tedi/components/layout/header/header.component.scss rename {libs/angular-components/tedi => tedi}/components/layout/header/header.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/header.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/header/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-dropdown-group/sidenav-dropdown-group.component.scss (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-dropdown-group/sidenav-dropdown-group.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-dropdown-group/sidenav-dropdown-group.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-dropdown-item/sidenav-dropdown-item.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-dropdown-item/sidenav-dropdown-item.component.scss (97%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-dropdown-item/sidenav-dropdown-item.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-dropdown-item/sidenav-dropdown-item.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-dropdown/sidenav-dropdown.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-dropdown/sidenav-dropdown.component.scss (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-dropdown/sidenav-dropdown.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-dropdown/sidenav-dropdown.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-group-title/sidenav-group-title.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-group-title/sidenav-group-title.component.scss (91%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-group-title/sidenav-group-title.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-group-title/sidenav-group-title.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-item/sidenav-item.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-item/sidenav-item.component.scss (98%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-item/sidenav-item.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-item/sidenav-item.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-overlay/sidenav-overlay.component.scss (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-overlay/sidenav-overlay.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-overlay/sidenav-overlay.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-toggle/sidenav-toggle.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-toggle/sidenav-toggle.component.scss (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-toggle/sidenav-toggle.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav-toggle/sidenav-toggle.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav.component.scss (97%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/layout/sidenav/sidenav.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/loader/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/loader/spinner/spinner.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/loader/spinner/spinner.component.scss (100%) rename {libs/angular-components/tedi => tedi}/components/loader/spinner/spinner.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/loader/spinner/spinner.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/loader/spinner/spinner.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/navigation/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/navigation/link/link.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/navigation/link/link.component.scss (97%) rename {libs/angular-components/tedi => tedi}/components/navigation/link/link.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/navigation/link/link.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/navigation/link/link.stories.ts (98%) rename {libs/angular-components/tedi => tedi}/components/notifications/alert/alert.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/notifications/alert/alert.component.scss (97%) rename {libs/angular-components/tedi => tedi}/components/notifications/alert/alert.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/notifications/alert/alert.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/notifications/alert/alert.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/notifications/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/popover/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/popover/popover-content/popover-content.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/popover/popover-content/popover-content.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/popover/popover-content/popover-content.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/popover/popover-trigger/popover-trigger.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/popover/popover.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/popover/popover.component.scss (97%) rename {libs/angular-components/tedi => tedi}/components/overlay/popover/popover.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/popover/popover.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/popover/popover.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/tooltip/index.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/tooltip/tooltip-content.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/tooltip/tooltip-trigger.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/tooltip/tooltip.component.html (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/tooltip/tooltip.component.scss (88%) rename {libs/angular-components/tedi => tedi}/components/overlay/tooltip/tooltip.component.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/tooltip/tooltip.component.ts (100%) rename {libs/angular-components/tedi => tedi}/components/overlay/tooltip/tooltip.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/directives/hide-at/hide-at.directive.ts (100%) rename {libs/angular-components/tedi => tedi}/directives/index.ts (100%) rename {libs/angular-components/tedi => tedi}/directives/show-at/show-at.directive.ts (100%) rename {libs/angular-components/tedi => tedi}/directives/vertical-spacing/index.ts (100%) rename {libs/angular-components/tedi => tedi}/directives/vertical-spacing/vertical-spacing-item.directive.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/directives/vertical-spacing/vertical-spacing-item.directive.ts (100%) rename {libs/angular-components/tedi => tedi}/directives/vertical-spacing/vertical-spacing-item.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/directives/vertical-spacing/vertical-spacing.directive.spec.ts (100%) rename {libs/angular-components/tedi => tedi}/directives/vertical-spacing/vertical-spacing.directive.ts (100%) rename {libs/angular-components/tedi => tedi}/directives/vertical-spacing/vertical-spacing.stories.ts (100%) rename {libs/angular-components/tedi => tedi}/helpers/generate-uuid.ts (100%) rename {libs/angular-components/tedi => tedi}/helpers/index.ts (100%) rename {libs/angular-components/tedi => tedi}/index.ts (100%) rename {libs/angular-components/tedi => tedi}/ng-package.json (100%) rename {libs/angular-components/tedi => tedi}/services/breakpoint/breakpoint.service.ts (100%) rename {libs/angular-components/tedi => tedi}/services/index.ts (100%) rename {libs/angular-components/tedi => tedi}/services/sidenav/sidenav.service.ts (100%) rename {libs/angular-components/tedi => tedi}/services/translation/translation.pipe.ts (100%) rename {libs/angular-components/tedi => tedi}/services/translation/translation.service.ts (100%) rename {libs/angular-components/tedi => tedi}/services/translation/translations.ts (100%) rename {libs/angular-components/tedi => tedi}/types/index.ts (100%) rename {libs/angular-components/tedi => tedi}/types/inputs.type.ts (100%) create mode 100644 tsconfig.eslint.json rename libs/angular-components/tsconfig.json => tsconfig.json (84%) rename libs/angular-components/tsconfig.lib.json => tsconfig.lib.json (64%) rename libs/angular-components/tsconfig.lib.prod.json => tsconfig.lib.prod.json (100%) rename libs/angular-components/tsconfig.spec.json => tsconfig.spec.json (77%) diff --git a/libs/angular-components/.codecov.yml b/.codecov.yml similarity index 100% rename from libs/angular-components/.codecov.yml rename to .codecov.yml diff --git a/libs/angular-components/.eslintrc.json b/.eslintrc.json similarity index 97% rename from libs/angular-components/.eslintrc.json rename to .eslintrc.json index 3ee53a897..047f80b48 100644 --- a/libs/angular-components/.eslintrc.json +++ b/.eslintrc.json @@ -1,7 +1,7 @@ { "overrides": [ { - "files": ["*.ts"], + "files": ["*.ts", "**/*.ts"], "parserOptions": { "project": ["tsconfig.eslint.json"] }, diff --git a/.github/workflows/angular-release.yml b/.github/workflows/angular-release.yml index 4986521a6..9303b465e 100644 --- a/.github/workflows/angular-release.yml +++ b/.github/workflows/angular-release.yml @@ -5,8 +5,6 @@ on: branches: - rc - main - paths-ignore: - - "libs/react-components/**" jobs: lint: @@ -22,8 +20,6 @@ jobs: node-version: "lts/*" - name: Lint run: | - npm ci --cache .npm --prefer-offline - cd libs/angular-components npm ci --cache .npm --prefer-offline npm run lint @@ -38,8 +34,6 @@ jobs: node-version: "lts/*" - name: Test run: | - npm ci --cache .npm --prefer-offline - cd libs/angular-components npm ci --cache .npm --prefer-offline npm run test @@ -59,16 +53,12 @@ jobs: - name: Install dependencies run: | npm ci --cache .npm --prefer-offline - cd libs/angular-components - npm ci --cache .npm --prefer-offline - name: Build Storybook run: | - cd libs/angular-components npm run build:sb - name: Publish to Chromatic run: | - cd libs/angular-components - CHROMATIC_PROJECT_TOKEN=${{ secrets.CHROMATIC_TOKEN_ANGULAR }} npm run chromatic + CHROMATIC_PROJECT_TOKEN=${{ secrets.CHROMATIC_TOKEN }} npm run chromatic build-and-deploy: needs: [lint, test] @@ -88,8 +78,6 @@ jobs: run: | HUSKY=0 npm ci - cd libs/angular-components - npm ci npm run build git pull npm run release diff --git a/.github/workflows/angular-test-and-lint.yml b/.github/workflows/angular-test-and-lint.yml index 8905b1dab..b0f22c744 100644 --- a/.github/workflows/angular-test-and-lint.yml +++ b/.github/workflows/angular-test-and-lint.yml @@ -5,8 +5,6 @@ on: branches: - main - rc - paths-ignore: - - "libs/react-components/**" jobs: lint: runs-on: ubuntu-latest @@ -21,8 +19,6 @@ jobs: node-version: "lts/*" - name: Lint run: | - npm ci --cache .npm --prefer-offline - cd libs/angular-components npm ci --cache .npm --prefer-offline npm run lint @@ -37,8 +33,6 @@ jobs: node-version: "lts/*" - name: Test run: | - npm ci --cache .npm --prefer-offline - cd libs/angular-components npm ci --cache .npm --prefer-offline npm run test @@ -56,19 +50,16 @@ jobs: - name: Install dependencies run: | npm ci --cache .npm --prefer-offline - cd libs/angular-components - npm ci --cache .npm --prefer-offline - name: Run coverage tests run: | - cd libs/angular-components npm run test:coverage - name: Upload results to Codecov uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} - working-directory: ./libs/angular-components + working-directory: ./ chromatic: runs-on: ubuntu-latest @@ -98,16 +89,12 @@ jobs: - name: Install dependencies run: | npm ci --cache .npm --prefer-offline - cd libs/angular-components - npm ci --cache .npm --prefer-offline - name: Build Storybook run: | - cd libs/angular-components npm run build:sb - name: Publish to Chromatic run: | - cd libs/angular-components - echo "CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_TOKEN_ANGULAR }}" - CHROMATIC_PROJECT_TOKEN=${{ secrets.CHROMATIC_TOKEN_ANGULAR }} npm run chromatic + echo "CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_TOKEN }}" + CHROMATIC_PROJECT_TOKEN=${{ secrets.CHROMATIC_TOKEN }} npm run chromatic diff --git a/.github/workflows/core-release.yml b/.github/workflows/core-release.yml deleted file mode 100644 index b1f2b8f3d..000000000 --- a/.github/workflows/core-release.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Release TEDI Core library - -on: - push: - branches: - - rc - paths-ignore: - - "libs/react-components/**" - - "libs/angular-components/**" - -jobs: - build-and-deploy: - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Use Node.js - uses: actions/setup-node@v4 - with: - node-version: "lts/*" - - name: Build and publish npm package - run: | - HUSKY=0 - npm ci - cd libs/tedi-core - npm ci - npm run build - git pull - npm run release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPMJS_TEDI_AUTH_TOKEN }} diff --git a/.github/workflows/deploy-github-pages.yml b/.github/workflows/deploy-github-pages.yml index 0f3baeceb..ce1a2eaab 100644 --- a/.github/workflows/deploy-github-pages.yml +++ b/.github/workflows/deploy-github-pages.yml @@ -2,19 +2,16 @@ name: Continuous Deployment on: workflow_dispatch: - push: branches: - "**" -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: contents: read pages: write id-token: write actions: read -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. concurrency: group: "pages" cancel-in-progress: true @@ -37,8 +34,7 @@ jobs: build: runs-on: ubuntu-latest name: Build - needs: - - build_matrix + needs: build_matrix strategy: fail-fast: false matrix: @@ -52,19 +48,12 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 20 - - name: Build + - name: Install and Build Storybook run: | - npm ci - cd libs/angular-components - npm ci - npm run build:sb - cd ../react-components npm ci npm run build:sb - cd ../.. - mkdir compiled-storybook - mv libs/angular-components/dist/storybook-static compiled-storybook/angular - mv libs/react-components/dist/storybook/react-components compiled-storybook/react + mkdir -p compiled-storybook + mv dist/storybook-static compiled-storybook/ - uses: actions/upload-artifact@v4 with: name: ${{ strategy.job-index }} diff --git a/.github/workflows/index_suffix.html b/.github/workflows/index_suffix.html index baef21e45..d6936cf10 100644 --- a/.github/workflows/index_suffix.html +++ b/.github/workflows/index_suffix.html @@ -3,16 +3,15 @@ let featureBranchRoot = document.getElementById("feature-branches"); branches.forEach(branch => { -let li = document.createElement("li"); + let li = document.createElement("li"); + li.className = "py-2"; + li.innerHTML = `${branch} - <a href="./${branch}/">View</a>`; -li.className = "py-2"; -li.innerHTML = `${branch} - <a href="./${branch}/react">React</a> | <a href="./${branch}/angular">Angular</a>`; - -if (mainBranches.indexOf(branch) !== -1) { -mainBranchRoot.appendChild(li); -} else { -featureBranchRoot.appendChild(li); -} + if (mainBranches.indexOf(branch) !== -1) { + mainBranchRoot.appendChild(li); + } else { + featureBranchRoot.appendChild(li); + } }); }); </script> diff --git a/.github/workflows/publish_mirror.sh b/.github/workflows/publish_mirror.sh deleted file mode 100755 index 443141f7e..000000000 --- a/.github/workflows/publish_mirror.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -package_json="dist/package.json" - -ignorable_version="0.0.0-semantic-version" -current_version=$(grep version $package_json | awk -F \" '{print $4}') - -echo "$ignorable_version != $current_version" -if [ "$ignorable_version" != "$current_version" ] ; then - echo "Overriding package json with new name" - echo "Running sed with \"s/$1/$2/g\" on $package_json" - sed -i "s/$1/$2/g" $package_json - - cd dist - cat package.json - echo "Running npm publish" - npm publish --userconfig ../.npmrc -else - echo "versions $ignorable_version and $current_version match, aborting!" -fi - diff --git a/.github/workflows/react-release.yml b/.github/workflows/react-release.yml deleted file mode 100644 index 658478a40..000000000 --- a/.github/workflows/react-release.yml +++ /dev/null @@ -1,100 +0,0 @@ -name: Release TEDI React library - -on: - push: - branches: - - rc - - main - paths-ignore: - - "libs/angular-components/**" - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "lts/*" - - name: Lint - run: | - npm ci --cache .npm --prefer-offline - cd libs/react-components - npm ci --cache .npm --prefer-offline - npm run lint - - test: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "lts/*" - - name: Test - run: | - npm ci --cache .npm --prefer-offline - cd libs/react-components - npm ci --cache .npm --prefer-offline - npm run test - - chromatic: - needs: [lint, test] - runs-on: ubuntu-latest - if: github.event_name == 'push' && (github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/main') - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "lts/*" - - name: Install dependencies - run: | - npm ci --cache .npm --prefer-offline - cd libs/react-components - npm ci --cache .npm --prefer-offline - - name: Build Storybook - run: | - cd libs/react-components - npm run build:sb - - name: Publish to Chromatic - run: | - cd libs/react-components - CHROMATIC_PROJECT_TOKEN=${{ secrets.CHROMATIC_TOKEN_REACT }} npm run chromatic - - build-and-deploy: - needs: [lint, test] - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Use Node.js - uses: actions/setup-node@v4 - with: - node-version: "lts/*" - - name: Build and publish npm package - run: | - HUSKY=0 - npm ci - cd libs/react-components - npm ci - npm run build - ls -la dist - git pull - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > .npmrc - npm run release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPMJS_TEDI_AUTH_TOKEN }} diff --git a/.github/workflows/react-test-and-lint.yml b/.github/workflows/react-test-and-lint.yml deleted file mode 100644 index a1f429770..000000000 --- a/.github/workflows/react-test-and-lint.yml +++ /dev/null @@ -1,109 +0,0 @@ -name: Test and lint React - -on: - pull_request: - branches: - - main - - rc - paths-ignore: - - "libs/angular-components/**" - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "lts/*" - - name: Lint - run: | - npm ci --cache .npm --prefer-offline - cd libs/react-components - npm ci --cache .npm --prefer-offline - npm run lint - - test: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "lts/*" - - name: Test - run: | - npm ci --cache .npm --prefer-offline - cd libs/react-components - npm ci --cache .npm --prefer-offline - npm run test - - test-coverage: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up Node - uses: actions/setup-node@v4 - - - name: Install dependencies - run: | - npm ci --cache .npm --prefer-offline - cd libs/react-components - npm ci --cache .npm --prefer-offline - - - name: Run coverage tests - run: | - cd libs/react-components - npm run test:coverage - - - name: Upload results to Codecov - uses: codecov/codecov-action@v5 - with: - token: ${{ secrets.CODECOV_TOKEN }} - working-directory: ./libs/react-components - - chromatic: - runs-on: ubuntu-latest - if: | - ( - github.event_name == 'pull_request' && - github.event.pull_request.head.repo.full_name == github.repository && - github.event.pull_request.draft == false && - github.actor != 'dependabot[bot]' - ) || ( - github.event_name == 'push' && - github.ref == 'refs/heads/rc' - ) - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up Node - uses: actions/setup-node@v4 - - - name: Install dependencies - run: | - npm ci --cache .npm --prefer-offline - cd libs/react-components - npm ci --cache .npm --prefer-offline - - - name: Build Storybook - run: | - cd libs/react-components - npm run build:sb - - - name: Publish to Chromatic - run: | - cd libs/react-components - CHROMATIC_PROJECT_TOKEN=${{ secrets.CHROMATIC_TOKEN_REACT }} npm run chromatic diff --git a/.gitignore b/.gitignore index d53aa3841..7b7211861 100644 --- a/.gitignore +++ b/.gitignore @@ -4,9 +4,6 @@ # compiled output /dist -/libs/react-components/dist -/libs/angular-components/dist -/libs/tedi-core/dist /tmp /out-tsc @@ -57,5 +54,4 @@ documentation.json *storybook.log # Coverage -/libs/react-components/coverage -/libs/angular-components/coverage +/coverage diff --git a/libs/angular-components/.releaserc.json b/.releaserc.json similarity index 100% rename from libs/angular-components/.releaserc.json rename to .releaserc.json diff --git a/libs/angular-components/.storybook/main.ts b/.storybook/main.ts similarity index 72% rename from libs/angular-components/.storybook/main.ts rename to .storybook/main.ts index 62257f4d3..dc6d5fd37 100644 --- a/libs/angular-components/.storybook/main.ts +++ b/.storybook/main.ts @@ -2,12 +2,12 @@ import { StorybookConfig } from "@storybook/angular"; const config: StorybookConfig = { stories: [ - "../docs/welcome.mdx", - "../docs/get-started.mdx", - "../docs/changelog.mdx", - "../docs/badges.mdx", - "../docs/colors/colors.mdx", - "../docs/**/*.stories.@(js|jsx|mjs|ts|tsx)", + "../src/docs/welcome.mdx", + "../src/docs/get-started.mdx", + "../src/docs/changelog.mdx", + "../src/docs/badges.mdx", + "../src/docs/colors/colors.mdx", + "../src/docs/**/*.stories.@(js|jsx|mjs|ts|tsx)", "../tedi/**/*.stories.@(js|jsx|mjs|ts|tsx)", "../community/**/*.stories.@(js|jsx|mjs|ts|tsx)", ], @@ -25,7 +25,7 @@ const config: StorybookConfig = { builder: "angular", }, }, - staticDirs: ["../../tedi-core/public"], + staticDirs: ["../public"], docs: { autodocs: true, }, diff --git a/libs/angular-components/.storybook/manager-head.html b/.storybook/manager-head.html similarity index 100% rename from libs/angular-components/.storybook/manager-head.html rename to .storybook/manager-head.html diff --git a/libs/angular-components/.storybook/manager.js b/.storybook/manager.js similarity index 100% rename from libs/angular-components/.storybook/manager.js rename to .storybook/manager.js diff --git a/libs/angular-components/.storybook/preview-head.html b/.storybook/preview-head.html similarity index 100% rename from libs/angular-components/.storybook/preview-head.html rename to .storybook/preview-head.html diff --git a/libs/angular-components/.storybook/preview.tsx b/.storybook/preview.tsx similarity index 100% rename from libs/angular-components/.storybook/preview.tsx rename to .storybook/preview.tsx diff --git a/libs/angular-components/.storybook/tehik-theme.js b/.storybook/tehik-theme.js similarity index 100% rename from libs/angular-components/.storybook/tehik-theme.js rename to .storybook/tehik-theme.js diff --git a/libs/angular-components/.storybook/tsconfig.json b/.storybook/tsconfig.json similarity index 100% rename from libs/angular-components/.storybook/tsconfig.json rename to .storybook/tsconfig.json diff --git a/libs/angular-components/.storybook/typings.d.ts b/.storybook/typings.d.ts similarity index 100% rename from libs/angular-components/.storybook/typings.d.ts rename to .storybook/typings.d.ts diff --git a/libs/angular-components/CHANGELOG.md b/CHANGELOG.md similarity index 100% rename from libs/angular-components/CHANGELOG.md rename to CHANGELOG.md diff --git a/README.md b/README.md index b2838c382..2e7b3d3ca 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,44 @@ -# TEDI Design System +# TEDI Design System for Angular [![codecov](https://codecov.io/gh/TEHIK-EE/tedi-design-system/graph/badge.svg?token=NKNNJSG19D)](https://codecov.io/gh/TEHIK-EE/tedi-design-system) [![semantic-release](https://img.shields.io/badge/semantic--release-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release) -The TEDI Design System provides reusable UI components for multiple frameworks. +`@tedi-design-system/angular` is a library of Angular components implementing the TEDI Design System. +It provides reusable, accessible, and consistent UI components to streamline building Angular applications. -Usage instructions can be found in the [wiki](https://github.com/TEHIK-EE/tedi-design-system/wiki). +Usage instructions and detailed documentation can be found in the [TEDI Design System wiki](https://github.com/TEDI-Design-System/general). --- -## Development Guide - -### Setting Up the Project - -Components are separated into packages by framework. Each package is managed separately. - -#### 1. Installing dependencies. - -Run the following command at the root to install shared dependencies: +## Installation -``` -npm install -``` - -Then, install dependencies for the specific library you are working on: - -For **React components**: +Install the dependencies for your Angular library: ``` -npm run install:react +npm run i ``` -For **Angular components**: - -``` -npm run install:angular -``` - -Alternatively, you can install everything from root `package.json`: +--- -``` - npm run install:all -``` +## Development Guide -#### 2. Running Storybook +### Running Storybook -Run your desired Storybook from root: +To view and develop components in isolation, start Storybook for Angular: ``` -npm run start:react -npm run start:angular +npm run start ``` ---- - -### **Additional Resources** +## Contributing -Check the [wiki](https://github.com/TEHIK-EE/tedi-design-system/wiki) for detailed documentation. -Report issues or contribute via [GitHub Issues](https://github.com/TEHIK-EE/tedi-design-system/issues). +Check the [wiki](https://github.com/TEDI-Design-System/general) for component guidelines and coding standards. +Report issues or contribute via [GitHub Issues](https://github.com/TEDI-Design-System/angular/issues). --- -### Thanks +## Visual Testing <a href="https://www.chromatic.com/"><img src="https://user-images.githubusercontent.com/321738/84662277-e3db4f80-af1b-11ea-88f5-91d67a5e59f6.png" width="153" height="30" alt="Chromatic" /></a> -Thanks to [Chromatic](https://www.chromatic.com/) for providing the visual testing platform that helps us review UI changes and catch visual regressions. +We use [Chromatic](https://www.chromatic.com/) for visual testing, reviewing UI changes, and preventing visual regressions. diff --git a/libs/angular-components/angular.json b/angular.json similarity index 81% rename from libs/angular-components/angular.json rename to angular.json index c2525478f..59e9c5f30 100644 --- a/libs/angular-components/angular.json +++ b/angular.json @@ -5,8 +5,8 @@ "angular-components": { "projectType": "library", "prefix": "tedi", - "root": ".", - "sourceRoot": ".", + "root": "src/", + "sourceRoot": "src/", "architect": { "build": { "builder": "@angular/build:ng-packagr", @@ -32,8 +32,8 @@ "compodocArgs": ["-e", "json", "-d", "."], "port": 6006, "styles": [ - "styles/index", - "../tedi-core/src/tedi-storybook-styles" + "./src/styles/index", + "./node_modules/@tedi-design-system/core/index.scss" ], "experimentalZoneless": true } @@ -46,8 +46,8 @@ "compodocArgs": ["-e", "json", "-d", "."], "outputDir": "dist/storybook-static", "styles": [ - "styles/index", - "../tedi-core/src/tedi-storybook-styles" + "./src/styles/index", + "./node_modules/@tedi-design-system/core/index.scss" ], "experimentalZoneless": true } @@ -56,12 +56,12 @@ "builder": "@angular-eslint/builder:lint", "options": { "lintFilePatterns": [ - "docs/**/*.ts", - "docs/**/*.html", - "tedi/**/*.ts", - "tedi/**/*.html", - "community/**/*.ts", - "community/**/*.html" + "./src/docs/**/*.ts", + "./src/docs/**/*.html", + "./tedi/**/*.ts", + "./tedi/**/*.html", + "./community/**/*.ts", + "./community/**/*.html" ] } } diff --git a/libs/angular-components/chromatic.config.json b/chromatic.config.json similarity index 100% rename from libs/angular-components/chromatic.config.json rename to chromatic.config.json diff --git a/libs/angular-components/community/components/cards/accordion/accordion-icon/accordion-icon.component.html b/community/components/cards/accordion/accordion-icon/accordion-icon.component.html similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion-icon/accordion-icon.component.html rename to community/components/cards/accordion/accordion-icon/accordion-icon.component.html diff --git a/libs/angular-components/community/components/cards/accordion/accordion-icon/accordion-icon.component.scss b/community/components/cards/accordion/accordion-icon/accordion-icon.component.scss similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion-icon/accordion-icon.component.scss rename to community/components/cards/accordion/accordion-icon/accordion-icon.component.scss diff --git a/libs/angular-components/community/components/cards/accordion/accordion-icon/accordion-icon.component.ts b/community/components/cards/accordion/accordion-icon/accordion-icon.component.ts similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion-icon/accordion-icon.component.ts rename to community/components/cards/accordion/accordion-icon/accordion-icon.component.ts diff --git a/libs/angular-components/community/components/cards/accordion/accordion-item-content/accordion-item-content.component.html b/community/components/cards/accordion/accordion-item-content/accordion-item-content.component.html similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion-item-content/accordion-item-content.component.html rename to community/components/cards/accordion/accordion-item-content/accordion-item-content.component.html diff --git a/libs/angular-components/community/components/cards/accordion/accordion-item-content/accordion-item-content.component.scss b/community/components/cards/accordion/accordion-item-content/accordion-item-content.component.scss similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion-item-content/accordion-item-content.component.scss rename to community/components/cards/accordion/accordion-item-content/accordion-item-content.component.scss diff --git a/libs/angular-components/community/components/cards/accordion/accordion-item-content/accordion-item-content.component.ts b/community/components/cards/accordion/accordion-item-content/accordion-item-content.component.ts similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion-item-content/accordion-item-content.component.ts rename to community/components/cards/accordion/accordion-item-content/accordion-item-content.component.ts diff --git a/libs/angular-components/community/components/cards/accordion/accordion-item-header/accordion-item-header.component.html b/community/components/cards/accordion/accordion-item-header/accordion-item-header.component.html similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion-item-header/accordion-item-header.component.html rename to community/components/cards/accordion/accordion-item-header/accordion-item-header.component.html diff --git a/libs/angular-components/community/components/cards/accordion/accordion-item-header/accordion-item-header.component.scss b/community/components/cards/accordion/accordion-item-header/accordion-item-header.component.scss similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion-item-header/accordion-item-header.component.scss rename to community/components/cards/accordion/accordion-item-header/accordion-item-header.component.scss diff --git a/libs/angular-components/community/components/cards/accordion/accordion-item-header/accordion-item-header.component.ts b/community/components/cards/accordion/accordion-item-header/accordion-item-header.component.ts similarity index 95% rename from libs/angular-components/community/components/cards/accordion/accordion-item-header/accordion-item-header.component.ts rename to community/components/cards/accordion/accordion-item-header/accordion-item-header.component.ts index c1c85edf0..6c77a811d 100644 --- a/libs/angular-components/community/components/cards/accordion/accordion-item-header/accordion-item-header.component.ts +++ b/community/components/cards/accordion/accordion-item-header/accordion-item-header.component.ts @@ -12,7 +12,7 @@ import { CardHeaderComponent, CardHeaderVariant, } from "../../card/card-header/card-header.component"; -import { IconColor, IconComponent, ButtonComponent } from "@tehik-ee/tedi-angular/tedi"; +import { IconColor, IconComponent, ButtonComponent } from "@tedi-design-system/angular/tedi"; const WHITE_ICON_VARIANTS = ["brand", "brand-dark"]; diff --git a/libs/angular-components/community/components/cards/accordion/accordion-item/accordion-item.component.html b/community/components/cards/accordion/accordion-item/accordion-item.component.html similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion-item/accordion-item.component.html rename to community/components/cards/accordion/accordion-item/accordion-item.component.html diff --git a/libs/angular-components/community/components/cards/accordion/accordion-item/accordion-item.component.scss b/community/components/cards/accordion/accordion-item/accordion-item.component.scss similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion-item/accordion-item.component.scss rename to community/components/cards/accordion/accordion-item/accordion-item.component.scss diff --git a/libs/angular-components/community/components/cards/accordion/accordion-item/accordion-item.component.ts b/community/components/cards/accordion/accordion-item/accordion-item.component.ts similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion-item/accordion-item.component.ts rename to community/components/cards/accordion/accordion-item/accordion-item.component.ts diff --git a/libs/angular-components/community/components/cards/accordion/accordion.stories.ts b/community/components/cards/accordion/accordion.stories.ts similarity index 99% rename from libs/angular-components/community/components/cards/accordion/accordion.stories.ts rename to community/components/cards/accordion/accordion.stories.ts index 0b68b4114..9601a1e91 100644 --- a/libs/angular-components/community/components/cards/accordion/accordion.stories.ts +++ b/community/components/cards/accordion/accordion.stories.ts @@ -5,7 +5,7 @@ import { IconComponent, TextComponent, ButtonComponent, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; import { AccordionIconComponent } from "./accordion-icon/accordion-icon.component"; import { AccordionItemContentComponent } from "./accordion-item-content/accordion-item-content.component"; import { AccordionItemHeaderComponent } from "./accordion-item-header/accordion-item-header.component"; diff --git a/libs/angular-components/community/components/cards/accordion/accordion/accordion.component.html b/community/components/cards/accordion/accordion/accordion.component.html similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion/accordion.component.html rename to community/components/cards/accordion/accordion/accordion.component.html diff --git a/libs/angular-components/community/components/cards/accordion/accordion/accordion.component.scss b/community/components/cards/accordion/accordion/accordion.component.scss similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion/accordion.component.scss rename to community/components/cards/accordion/accordion/accordion.component.scss diff --git a/libs/angular-components/community/components/cards/accordion/accordion/accordion.component.ts b/community/components/cards/accordion/accordion/accordion.component.ts similarity index 100% rename from libs/angular-components/community/components/cards/accordion/accordion/accordion.component.ts rename to community/components/cards/accordion/accordion/accordion.component.ts diff --git a/libs/angular-components/community/components/cards/accordion/index.ts b/community/components/cards/accordion/index.ts similarity index 100% rename from libs/angular-components/community/components/cards/accordion/index.ts rename to community/components/cards/accordion/index.ts diff --git a/libs/angular-components/community/components/cards/card/_card-mixins.scss b/community/components/cards/card/_card-mixins.scss similarity index 98% rename from libs/angular-components/community/components/cards/card/_card-mixins.scss rename to community/components/cards/card/_card-mixins.scss index d80adf695..e17f63670 100644 --- a/libs/angular-components/community/components/cards/card/_card-mixins.scss +++ b/community/components/cards/card/_card-mixins.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; @use "sass:map"; $card-colors: ( diff --git a/libs/angular-components/community/components/cards/card/card-colors.directive.ts b/community/components/cards/card/card-colors.directive.ts similarity index 100% rename from libs/angular-components/community/components/cards/card/card-colors.directive.ts rename to community/components/cards/card/card-colors.directive.ts diff --git a/libs/angular-components/community/components/cards/card/card-content/card-content.component.html b/community/components/cards/card/card-content/card-content.component.html similarity index 100% rename from libs/angular-components/community/components/cards/card/card-content/card-content.component.html rename to community/components/cards/card/card-content/card-content.component.html diff --git a/libs/angular-components/community/components/cards/card/card-content/card-content.component.scss b/community/components/cards/card/card-content/card-content.component.scss similarity index 100% rename from libs/angular-components/community/components/cards/card/card-content/card-content.component.scss rename to community/components/cards/card/card-content/card-content.component.scss diff --git a/libs/angular-components/community/components/cards/card/card-content/card-content.component.ts b/community/components/cards/card/card-content/card-content.component.ts similarity index 100% rename from libs/angular-components/community/components/cards/card/card-content/card-content.component.ts rename to community/components/cards/card/card-content/card-content.component.ts diff --git a/libs/angular-components/community/components/cards/card/card-header/card-header.component.html b/community/components/cards/card/card-header/card-header.component.html similarity index 100% rename from libs/angular-components/community/components/cards/card/card-header/card-header.component.html rename to community/components/cards/card/card-header/card-header.component.html diff --git a/libs/angular-components/community/components/cards/card/card-header/card-header.component.scss b/community/components/cards/card/card-header/card-header.component.scss similarity index 100% rename from libs/angular-components/community/components/cards/card/card-header/card-header.component.scss rename to community/components/cards/card/card-header/card-header.component.scss diff --git a/libs/angular-components/community/components/cards/card/card-header/card-header.component.ts b/community/components/cards/card/card-header/card-header.component.ts similarity index 100% rename from libs/angular-components/community/components/cards/card/card-header/card-header.component.ts rename to community/components/cards/card/card-header/card-header.component.ts diff --git a/libs/angular-components/community/components/cards/card/card-padding.directive.ts b/community/components/cards/card/card-padding.directive.ts similarity index 100% rename from libs/angular-components/community/components/cards/card/card-padding.directive.ts rename to community/components/cards/card/card-padding.directive.ts diff --git a/libs/angular-components/community/components/cards/card/card-row/card-row.component.html b/community/components/cards/card/card-row/card-row.component.html similarity index 100% rename from libs/angular-components/community/components/cards/card/card-row/card-row.component.html rename to community/components/cards/card/card-row/card-row.component.html diff --git a/libs/angular-components/community/components/cards/card/card-row/card-row.component.scss b/community/components/cards/card/card-row/card-row.component.scss similarity index 100% rename from libs/angular-components/community/components/cards/card/card-row/card-row.component.scss rename to community/components/cards/card/card-row/card-row.component.scss diff --git a/libs/angular-components/community/components/cards/card/card-row/card-row.component.ts b/community/components/cards/card/card-row/card-row.component.ts similarity index 100% rename from libs/angular-components/community/components/cards/card/card-row/card-row.component.ts rename to community/components/cards/card/card-row/card-row.component.ts diff --git a/libs/angular-components/community/components/cards/card/card.component.html b/community/components/cards/card/card.component.html similarity index 100% rename from libs/angular-components/community/components/cards/card/card.component.html rename to community/components/cards/card/card.component.html diff --git a/libs/angular-components/community/components/cards/card/card.component.scss b/community/components/cards/card/card.component.scss similarity index 98% rename from libs/angular-components/community/components/cards/card/card.component.scss rename to community/components/cards/card/card.component.scss index e610ecee0..df280e01b 100644 --- a/libs/angular-components/community/components/cards/card/card.component.scss +++ b/community/components/cards/card/card.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; @use "./card-mixins"; .tedi-card { diff --git a/libs/angular-components/community/components/cards/card/card.component.ts b/community/components/cards/card/card.component.ts similarity index 100% rename from libs/angular-components/community/components/cards/card/card.component.ts rename to community/components/cards/card/card.component.ts diff --git a/libs/angular-components/community/components/cards/card/index.ts b/community/components/cards/card/index.ts similarity index 100% rename from libs/angular-components/community/components/cards/card/index.ts rename to community/components/cards/card/index.ts diff --git a/libs/angular-components/community/components/cards/card/stories/card-story-templates.ts b/community/components/cards/card/stories/card-story-templates.ts similarity index 100% rename from libs/angular-components/community/components/cards/card/stories/card-story-templates.ts rename to community/components/cards/card/stories/card-story-templates.ts diff --git a/libs/angular-components/community/components/cards/card/stories/card.stories.ts b/community/components/cards/card/stories/card.stories.ts similarity index 97% rename from libs/angular-components/community/components/cards/card/stories/card.stories.ts rename to community/components/cards/card/stories/card.stories.ts index e2d8e5055..3f52620a2 100644 --- a/libs/angular-components/community/components/cards/card/stories/card.stories.ts +++ b/community/components/cards/card/stories/card.stories.ts @@ -19,7 +19,7 @@ import { CardRowComponent } from "../card-row/card-row.component"; import { CardHeaderComponent } from "../card-header/card-header.component"; import { CardContentComponent } from "../card-content/card-content.component"; import { CardComponent } from "../card.component"; -import { IconComponent, TextComponent } from "@tehik-ee/tedi-angular/tedi"; +import { IconComponent, TextComponent } from "@tedi-design-system/angular/tedi"; export default { title: "Community/Cards/Card", diff --git a/libs/angular-components/community/components/cards/index.ts b/community/components/cards/index.ts similarity index 100% rename from libs/angular-components/community/components/cards/index.ts rename to community/components/cards/index.ts diff --git a/libs/angular-components/community/components/form/checkbox/checkbox-card-group/checkbox-card-group.component.ts b/community/components/form/checkbox/checkbox-card-group/checkbox-card-group.component.ts similarity index 96% rename from libs/angular-components/community/components/form/checkbox/checkbox-card-group/checkbox-card-group.component.ts rename to community/components/form/checkbox/checkbox-card-group/checkbox-card-group.component.ts index ed2e00940..43e00097c 100644 --- a/libs/angular-components/community/components/form/checkbox/checkbox-card-group/checkbox-card-group.component.ts +++ b/community/components/form/checkbox/checkbox-card-group/checkbox-card-group.component.ts @@ -11,7 +11,7 @@ import { } from "@angular/core"; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; import { ChoiceGroupDirective } from "../../choicegroup/choicegroup.directive"; -import { LabelComponent, FeedbackTextComponent } from "@tehik-ee/tedi-angular/tedi"; +import { LabelComponent, FeedbackTextComponent } from "@tedi-design-system/angular/tedi"; import { CheckboxGroupComponent } from "../checkbox-group/checkbox-group.component"; import { CheckboxComponent } from "../checkbox/checkbox.component"; diff --git a/libs/angular-components/community/components/form/checkbox/checkbox-group/checkbox-group.component.html b/community/components/form/checkbox/checkbox-group/checkbox-group.component.html similarity index 100% rename from libs/angular-components/community/components/form/checkbox/checkbox-group/checkbox-group.component.html rename to community/components/form/checkbox/checkbox-group/checkbox-group.component.html diff --git a/libs/angular-components/community/components/form/checkbox/checkbox-group/checkbox-group.component.scss b/community/components/form/checkbox/checkbox-group/checkbox-group.component.scss similarity index 100% rename from libs/angular-components/community/components/form/checkbox/checkbox-group/checkbox-group.component.scss rename to community/components/form/checkbox/checkbox-group/checkbox-group.component.scss diff --git a/libs/angular-components/community/components/form/checkbox/checkbox-group/checkbox-group.component.ts b/community/components/form/checkbox/checkbox-group/checkbox-group.component.ts similarity index 93% rename from libs/angular-components/community/components/form/checkbox/checkbox-group/checkbox-group.component.ts rename to community/components/form/checkbox/checkbox-group/checkbox-group.component.ts index c7f70b332..cd95588e7 100644 --- a/libs/angular-components/community/components/form/checkbox/checkbox-group/checkbox-group.component.ts +++ b/community/components/form/checkbox/checkbox-group/checkbox-group.component.ts @@ -10,8 +10,8 @@ import { ComponentInputs, LabelComponent, FeedbackTextComponent, -} from "@tehik-ee/tedi-angular/tedi"; -import { generateUUID } from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; +import { generateUUID } from "@tedi-design-system/angular/tedi"; @Component({ standalone: true, diff --git a/libs/angular-components/community/components/form/checkbox/checkbox.stories.ts b/community/components/form/checkbox/checkbox.stories.ts similarity index 100% rename from libs/angular-components/community/components/form/checkbox/checkbox.stories.ts rename to community/components/form/checkbox/checkbox.stories.ts diff --git a/libs/angular-components/community/components/form/checkbox/checkbox/checkbox.component.html b/community/components/form/checkbox/checkbox/checkbox.component.html similarity index 100% rename from libs/angular-components/community/components/form/checkbox/checkbox/checkbox.component.html rename to community/components/form/checkbox/checkbox/checkbox.component.html diff --git a/libs/angular-components/community/components/form/checkbox/checkbox/checkbox.component.scss b/community/components/form/checkbox/checkbox/checkbox.component.scss similarity index 98% rename from libs/angular-components/community/components/form/checkbox/checkbox/checkbox.component.scss rename to community/components/form/checkbox/checkbox/checkbox.component.scss index 4de3255ab..72a38b196 100644 --- a/libs/angular-components/community/components/form/checkbox/checkbox/checkbox.component.scss +++ b/community/components/form/checkbox/checkbox/checkbox.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; .tedi-checkbox { --_checkbox-bg: var(--form-checkbox-radio-default-background-default); diff --git a/libs/angular-components/community/components/form/checkbox/checkbox/checkbox.component.ts b/community/components/form/checkbox/checkbox/checkbox.component.ts similarity index 97% rename from libs/angular-components/community/components/form/checkbox/checkbox/checkbox.component.ts rename to community/components/form/checkbox/checkbox/checkbox.component.ts index bdcd26ffa..21947b3dd 100644 --- a/libs/angular-components/community/components/form/checkbox/checkbox/checkbox.component.ts +++ b/community/components/form/checkbox/checkbox/checkbox.component.ts @@ -15,11 +15,11 @@ import { ComponentInputs, IconComponent, FeedbackTextComponent, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; import { CheckboxCardGroupComponent } from "../checkbox-card-group/checkbox-card-group.component"; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; import { CheckboxGroupComponent } from "../checkbox-group/checkbox-group.component"; -import { generateUUID } from "@tehik-ee/tedi-angular/tedi"; +import { generateUUID } from "@tedi-design-system/angular/tedi"; export type CheckboxSize = "default" | "large"; diff --git a/libs/angular-components/community/components/form/checkbox/index.ts b/community/components/form/checkbox/index.ts similarity index 100% rename from libs/angular-components/community/components/form/checkbox/index.ts rename to community/components/form/checkbox/index.ts diff --git a/libs/angular-components/community/components/form/choicegroup/_choicegroup-card-mixins.scss b/community/components/form/choicegroup/_choicegroup-card-mixins.scss similarity index 98% rename from libs/angular-components/community/components/form/choicegroup/_choicegroup-card-mixins.scss rename to community/components/form/choicegroup/_choicegroup-card-mixins.scss index ab23e81fa..32ebccfa1 100644 --- a/libs/angular-components/community/components/form/choicegroup/_choicegroup-card-mixins.scss +++ b/community/components/form/choicegroup/_choicegroup-card-mixins.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; @mixin padding-variables { --_choicegroup-card-padding-top: var(--_choicegroup-card-padding-vertical); diff --git a/libs/angular-components/community/components/form/choicegroup/choicegroup.directive.ts b/community/components/form/choicegroup/choicegroup.directive.ts similarity index 100% rename from libs/angular-components/community/components/form/choicegroup/choicegroup.directive.ts rename to community/components/form/choicegroup/choicegroup.directive.ts diff --git a/libs/angular-components/community/components/form/choicegroup/choicegroup.styles.scss b/community/components/form/choicegroup/choicegroup.styles.scss similarity index 98% rename from libs/angular-components/community/components/form/choicegroup/choicegroup.styles.scss rename to community/components/form/choicegroup/choicegroup.styles.scss index fb60e719a..66cb24c4b 100644 --- a/libs/angular-components/community/components/form/choicegroup/choicegroup.styles.scss +++ b/community/components/form/choicegroup/choicegroup.styles.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; @use "./choicegroup-card-mixins"; @mixin choicegroup-card-error-variables { diff --git a/libs/angular-components/community/components/form/file-dropzone/constants.ts b/community/components/form/file-dropzone/constants.ts similarity index 100% rename from libs/angular-components/community/components/form/file-dropzone/constants.ts rename to community/components/form/file-dropzone/constants.ts diff --git a/libs/angular-components/community/components/form/file-dropzone/file-dropzone.component.html b/community/components/form/file-dropzone/file-dropzone.component.html similarity index 100% rename from libs/angular-components/community/components/form/file-dropzone/file-dropzone.component.html rename to community/components/form/file-dropzone/file-dropzone.component.html diff --git a/libs/angular-components/community/components/form/file-dropzone/file-dropzone.component.scss b/community/components/form/file-dropzone/file-dropzone.component.scss similarity index 100% rename from libs/angular-components/community/components/form/file-dropzone/file-dropzone.component.scss rename to community/components/form/file-dropzone/file-dropzone.component.scss diff --git a/libs/angular-components/community/components/form/file-dropzone/file-dropzone.component.ts b/community/components/form/file-dropzone/file-dropzone.component.ts similarity index 99% rename from libs/angular-components/community/components/form/file-dropzone/file-dropzone.component.ts rename to community/components/form/file-dropzone/file-dropzone.component.ts index f798e2224..1e55edae6 100644 --- a/libs/angular-components/community/components/form/file-dropzone/file-dropzone.component.ts +++ b/community/components/form/file-dropzone/file-dropzone.component.ts @@ -27,7 +27,7 @@ import { TediTranslationPipe, TediTranslationService, VerticalSpacingDirective, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; import { CardComponent, CardContentComponent } from "../../cards"; import { DropzoneValidatorFunction, diff --git a/libs/angular-components/community/components/form/file-dropzone/file-dropzone.react.scss b/community/components/form/file-dropzone/file-dropzone.react.scss similarity index 94% rename from libs/angular-components/community/components/form/file-dropzone/file-dropzone.react.scss rename to community/components/form/file-dropzone/file-dropzone.react.scss index 4a4050b7f..47c247f9b 100644 --- a/libs/angular-components/community/components/form/file-dropzone/file-dropzone.react.scss +++ b/community/components/form/file-dropzone/file-dropzone.react.scss @@ -1,12 +1,14 @@ // identical to libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.module.scss, -@use '@tehik-ee/tedi-core/mixins'; +@use "@tedi-design-system/core/mixins"; .tedi-file-dropzone { text-align: center; cursor: pointer; background-color: var(--file-dropzone-background-default); border: 2px dotted var(--file-dropzone-border-default); - transition: border-color 0.2s ease-in-out, background-color 0.2s ease-in-out; + transition: + border-color 0.2s ease-in-out, + background-color 0.2s ease-in-out; @include mixins.responsive-styles(border-radius, form-field-radius); @include mixins.responsive-styles(padding-left, file-dropzone-padding-x); diff --git a/libs/angular-components/community/components/form/file-dropzone/file-dropzone.stories.ts b/community/components/form/file-dropzone/file-dropzone.stories.ts similarity index 100% rename from libs/angular-components/community/components/form/file-dropzone/file-dropzone.stories.ts rename to community/components/form/file-dropzone/file-dropzone.stories.ts diff --git a/libs/angular-components/community/components/form/file-dropzone/file.service.ts b/community/components/form/file-dropzone/file.service.ts similarity index 98% rename from libs/angular-components/community/components/form/file-dropzone/file.service.ts rename to community/components/form/file-dropzone/file.service.ts index 0c27f76a5..4106ab7e2 100644 --- a/libs/angular-components/community/components/form/file-dropzone/file.service.ts +++ b/community/components/form/file-dropzone/file.service.ts @@ -6,7 +6,7 @@ import { SizeDisplayStandard, ValidationState, } from "./types"; -import { TediTranslationService } from "@tehik-ee/tedi-angular/tedi"; +import { TediTranslationService } from "@tedi-design-system/angular/tedi"; @Injectable() export class FileService { diff --git a/libs/angular-components/community/components/form/file-dropzone/index.ts b/community/components/form/file-dropzone/index.ts similarity index 100% rename from libs/angular-components/community/components/form/file-dropzone/index.ts rename to community/components/form/file-dropzone/index.ts diff --git a/libs/angular-components/community/components/form/file-dropzone/types.ts b/community/components/form/file-dropzone/types.ts similarity index 97% rename from libs/angular-components/community/components/form/file-dropzone/types.ts rename to community/components/form/file-dropzone/types.ts index e21189fe8..092e72391 100644 --- a/libs/angular-components/community/components/form/file-dropzone/types.ts +++ b/community/components/form/file-dropzone/types.ts @@ -1,7 +1,7 @@ import { ComponentInputs, FeedbackTextComponent, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; type PartialExcept<T, K extends keyof T> = Partial<T> & Required<Pick<T, K>>; diff --git a/libs/angular-components/community/components/form/file-dropzone/utils.ts b/community/components/form/file-dropzone/utils.ts similarity index 100% rename from libs/angular-components/community/components/form/file-dropzone/utils.ts rename to community/components/form/file-dropzone/utils.ts diff --git a/libs/angular-components/community/components/form/form-field/form-field.component.scss b/community/components/form/form-field/form-field.component.scss similarity index 100% rename from libs/angular-components/community/components/form/form-field/form-field.component.scss rename to community/components/form/form-field/form-field.component.scss diff --git a/libs/angular-components/community/components/form/form-field/form-field.component.ts b/community/components/form/form-field/form-field.component.ts similarity index 100% rename from libs/angular-components/community/components/form/form-field/form-field.component.ts rename to community/components/form/form-field/form-field.component.ts diff --git a/libs/angular-components/community/components/form/form-field/form-field.stories.ts b/community/components/form/form-field/form-field.stories.ts similarity index 99% rename from libs/angular-components/community/components/form/form-field/form-field.stories.ts rename to community/components/form/form-field/form-field.stories.ts index 0fd32880f..fd4fa748b 100644 --- a/libs/angular-components/community/components/form/form-field/form-field.stories.ts +++ b/community/components/form/form-field/form-field.stories.ts @@ -7,7 +7,7 @@ import { IconComponent, LabelComponent, FeedbackTextComponent, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; export default { title: "Community/Form/FormField", diff --git a/libs/angular-components/community/components/form/index.ts b/community/components/form/index.ts similarity index 100% rename from libs/angular-components/community/components/form/index.ts rename to community/components/form/index.ts diff --git a/libs/angular-components/community/components/form/input-group/input-group.component.html b/community/components/form/input-group/input-group.component.html similarity index 100% rename from libs/angular-components/community/components/form/input-group/input-group.component.html rename to community/components/form/input-group/input-group.component.html diff --git a/libs/angular-components/community/components/form/input-group/input-group.component.scss b/community/components/form/input-group/input-group.component.scss similarity index 92% rename from libs/angular-components/community/components/form/input-group/input-group.component.scss rename to community/components/form/input-group/input-group.component.scss index c43581d6e..fd8bfd2ba 100644 --- a/libs/angular-components/community/components/form/input-group/input-group.component.scss +++ b/community/components/form/input-group/input-group.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; @use "sass:list"; @mixin left-round-corners() { @@ -97,18 +97,18 @@ } &:has( - .tedi-input-group__prefix tedi-select .tedi-select__trigger:focus, - .tedi-input-group__prefix tedi-select .tedi-select__trigger:hover - ) { + .tedi-input-group__prefix tedi-select .tedi-select__trigger:focus, + .tedi-input-group__prefix tedi-select .tedi-select__trigger:hover + ) { .tedi-input-group__center .tedi-input { border-left: var(--_input-group-share-border-size); } } &:has( - .tedi-input-group__suffix tedi-select .tedi-select__trigger:focus, - .tedi-input-group__suffix tedi-select .tedi-select__trigger:hover - ) { + .tedi-input-group__suffix tedi-select .tedi-select__trigger:focus, + .tedi-input-group__suffix tedi-select .tedi-select__trigger:hover + ) { .tedi-input-group__center .tedi-input { border-right: var(--_input-group-share-border-size); } diff --git a/libs/angular-components/community/components/form/input-group/input-group.component.ts b/community/components/form/input-group/input-group.component.ts similarity index 97% rename from libs/angular-components/community/components/form/input-group/input-group.component.ts rename to community/components/form/input-group/input-group.component.ts index 55dfeabf0..8857cb066 100644 --- a/libs/angular-components/community/components/form/input-group/input-group.component.ts +++ b/community/components/form/input-group/input-group.component.ts @@ -1,5 +1,5 @@ import { Component, input, ViewEncapsulation } from "@angular/core"; -import { ComponentInputs, LabelComponent, FeedbackTextComponent } from "@tehik-ee/tedi-angular/tedi"; +import { ComponentInputs, LabelComponent, FeedbackTextComponent } from "@tedi-design-system/angular/tedi"; /** * InputGroupComponent is a component that allows you to group multiple input elements together. diff --git a/libs/angular-components/community/components/form/input-group/input-group.stories.ts b/community/components/form/input-group/input-group.stories.ts similarity index 98% rename from libs/angular-components/community/components/form/input-group/input-group.stories.ts rename to community/components/form/input-group/input-group.stories.ts index 3e9d0d3d1..9c1a1c7fe 100644 --- a/libs/angular-components/community/components/form/input-group/input-group.stories.ts +++ b/community/components/form/input-group/input-group.stories.ts @@ -1,6 +1,6 @@ import { moduleMetadata, type Meta, type StoryObj } from "@storybook/angular"; import { InputGroupComponent } from "./input-group.component"; -import { FeedbackTextType, LabelComponent } from "@tehik-ee/tedi-angular/tedi"; +import { FeedbackTextType, LabelComponent } from "@tedi-design-system/angular/tedi"; import { InputComponent } from "../input/input.component"; import { SelectComponent } from "../select/select.component"; import { SelectOptionComponent } from "../select/select-option.component"; diff --git a/libs/angular-components/community/components/form/input/input.component.scss b/community/components/form/input/input.component.scss similarity index 98% rename from libs/angular-components/community/components/form/input/input.component.scss rename to community/components/form/input/input.component.scss index 58974d20e..467503b32 100644 --- a/libs/angular-components/community/components/form/input/input.component.scss +++ b/community/components/form/input/input.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; @mixin textfield-focus($border-color: null) { @if $border-color { diff --git a/libs/angular-components/community/components/form/input/input.component.ts b/community/components/form/input/input.component.ts similarity index 100% rename from libs/angular-components/community/components/form/input/input.component.ts rename to community/components/form/input/input.component.ts diff --git a/libs/angular-components/community/components/form/input/textfield.stories.ts b/community/components/form/input/textfield.stories.ts similarity index 100% rename from libs/angular-components/community/components/form/input/textfield.stories.ts rename to community/components/form/input/textfield.stories.ts diff --git a/libs/angular-components/community/components/form/radio/index.ts b/community/components/form/radio/index.ts similarity index 100% rename from libs/angular-components/community/components/form/radio/index.ts rename to community/components/form/radio/index.ts diff --git a/libs/angular-components/community/components/form/radio/radio-card-group/radio-card-group.component.ts b/community/components/form/radio/radio-card-group/radio-card-group.component.ts similarity index 93% rename from libs/angular-components/community/components/form/radio/radio-card-group/radio-card-group.component.ts rename to community/components/form/radio/radio-card-group/radio-card-group.component.ts index 9d6e9638f..93c882790 100644 --- a/libs/angular-components/community/components/form/radio/radio-card-group/radio-card-group.component.ts +++ b/community/components/form/radio/radio-card-group/radio-card-group.component.ts @@ -7,7 +7,7 @@ import { } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import { ChoiceGroupDirective } from "../../choicegroup/choicegroup.directive"; -import { LabelComponent, FeedbackTextComponent } from "@tehik-ee/tedi-angular/tedi"; +import { LabelComponent, FeedbackTextComponent } from "@tedi-design-system/angular/tedi"; import { RadioGroupComponent } from "../radio-group/radio-group.component"; @Component({ standalone: true, diff --git a/libs/angular-components/community/components/form/radio/radio-group/radio-group.component.html b/community/components/form/radio/radio-group/radio-group.component.html similarity index 100% rename from libs/angular-components/community/components/form/radio/radio-group/radio-group.component.html rename to community/components/form/radio/radio-group/radio-group.component.html diff --git a/libs/angular-components/community/components/form/radio/radio-group/radio-group.component.scss b/community/components/form/radio/radio-group/radio-group.component.scss similarity index 100% rename from libs/angular-components/community/components/form/radio/radio-group/radio-group.component.scss rename to community/components/form/radio/radio-group/radio-group.component.scss diff --git a/libs/angular-components/community/components/form/radio/radio-group/radio-group.component.ts b/community/components/form/radio/radio-group/radio-group.component.ts similarity index 98% rename from libs/angular-components/community/components/form/radio/radio-group/radio-group.component.ts rename to community/components/form/radio/radio-group/radio-group.component.ts index 7a651dd99..82819c9af 100644 --- a/libs/angular-components/community/components/form/radio/radio-group/radio-group.component.ts +++ b/community/components/form/radio/radio-group/radio-group.component.ts @@ -10,7 +10,7 @@ import { } from "@angular/core"; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; import { RadioValue } from "../radio/radio.component"; -import { ComponentInputs, LabelComponent, FeedbackTextComponent } from "@tehik-ee/tedi-angular/tedi"; +import { ComponentInputs, LabelComponent, FeedbackTextComponent } from "@tedi-design-system/angular/tedi"; export type RadioGroupSize = "default" | "large"; diff --git a/libs/angular-components/community/components/form/radio/radio.stories.ts b/community/components/form/radio/radio.stories.ts similarity index 100% rename from libs/angular-components/community/components/form/radio/radio.stories.ts rename to community/components/form/radio/radio.stories.ts diff --git a/libs/angular-components/community/components/form/radio/radio/radio.component.html b/community/components/form/radio/radio/radio.component.html similarity index 100% rename from libs/angular-components/community/components/form/radio/radio/radio.component.html rename to community/components/form/radio/radio/radio.component.html diff --git a/libs/angular-components/community/components/form/radio/radio/radio.component.scss b/community/components/form/radio/radio/radio.component.scss similarity index 98% rename from libs/angular-components/community/components/form/radio/radio/radio.component.scss rename to community/components/form/radio/radio/radio.component.scss index 0db24f471..8445d080f 100644 --- a/libs/angular-components/community/components/form/radio/radio/radio.component.scss +++ b/community/components/form/radio/radio/radio.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; .tedi-radio { --_radio-bg: var(--form-checkbox-radio-default-background-default); diff --git a/libs/angular-components/community/components/form/radio/radio/radio.component.ts b/community/components/form/radio/radio/radio.component.ts similarity index 95% rename from libs/angular-components/community/components/form/radio/radio/radio.component.ts rename to community/components/form/radio/radio/radio.component.ts index 3bb0e54c4..d282c85fc 100644 --- a/libs/angular-components/community/components/form/radio/radio/radio.component.ts +++ b/community/components/form/radio/radio/radio.component.ts @@ -14,8 +14,8 @@ import { RadioGroupComponent } from "../radio-group/radio-group.component"; import { ComponentInputs, FeedbackTextComponent, -} from "@tehik-ee/tedi-angular/tedi"; -import { generateUUID } from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; +import { generateUUID } from "@tedi-design-system/angular/tedi"; export type RadioValue = string; diff --git a/libs/angular-components/community/components/form/search/search.component.html b/community/components/form/search/search.component.html similarity index 100% rename from libs/angular-components/community/components/form/search/search.component.html rename to community/components/form/search/search.component.html diff --git a/libs/angular-components/community/components/form/search/search.component.scss b/community/components/form/search/search.component.scss similarity index 99% rename from libs/angular-components/community/components/form/search/search.component.scss rename to community/components/form/search/search.component.scss index 10cf5bc71..b3e2e1828 100644 --- a/libs/angular-components/community/components/form/search/search.component.scss +++ b/community/components/form/search/search.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; @mixin textfield-focus($border-color: null) { @if $border-color { diff --git a/libs/angular-components/community/components/form/search/search.component.ts b/community/components/form/search/search.component.ts similarity index 99% rename from libs/angular-components/community/components/form/search/search.component.ts rename to community/components/form/search/search.component.ts index 4c862d749..dbac3b056 100644 --- a/libs/angular-components/community/components/form/search/search.component.ts +++ b/community/components/form/search/search.component.ts @@ -22,7 +22,7 @@ import { ComponentInputs, FeedbackTextComponent, LabelComponent, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; import { FormsModule } from "@angular/forms"; import { CdkOverlayOrigin, OverlayModule } from "@angular/cdk/overlay"; import { CardComponent } from "../../cards/card/card.component"; diff --git a/libs/angular-components/community/components/form/search/search.stories.ts b/community/components/form/search/search.stories.ts similarity index 99% rename from libs/angular-components/community/components/form/search/search.stories.ts rename to community/components/form/search/search.stories.ts index 1b5a1ceb5..578f49c99 100644 --- a/libs/angular-components/community/components/form/search/search.stories.ts +++ b/community/components/form/search/search.stories.ts @@ -5,7 +5,7 @@ import { moduleMetadata, } from "@storybook/angular"; import { SearchComponent, AutocompleteOption } from "./search.component"; -import { RowComponent } from "@tehik-ee/tedi-angular/tedi"; +import { RowComponent } from "@tedi-design-system/angular/tedi"; import { FormControl, FormGroup, ReactiveFormsModule } from "@angular/forms"; import { JsonPipe } from "@angular/common"; diff --git a/libs/angular-components/community/components/form/select/index.ts b/community/components/form/select/index.ts similarity index 100% rename from libs/angular-components/community/components/form/select/index.ts rename to community/components/form/select/index.ts diff --git a/libs/angular-components/community/components/form/select/multiselect.component.html b/community/components/form/select/multiselect.component.html similarity index 100% rename from libs/angular-components/community/components/form/select/multiselect.component.html rename to community/components/form/select/multiselect.component.html diff --git a/libs/angular-components/community/components/form/select/multiselect.component.ts b/community/components/form/select/multiselect.component.ts similarity index 99% rename from libs/angular-components/community/components/form/select/multiselect.component.ts rename to community/components/form/select/multiselect.component.ts index 18dcbd32b..08f7db57f 100644 --- a/libs/angular-components/community/components/form/select/multiselect.component.ts +++ b/community/components/form/select/multiselect.component.ts @@ -33,7 +33,7 @@ import { LabelComponent, TediTranslationPipe, TextComponent, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; import { CardComponent, CardContentComponent } from "../../../components/cards"; import { DropdownItemComponent } from "../../../components/overlay"; import { TagComponent } from "../../../components/tags"; diff --git a/libs/angular-components/community/components/form/select/multiselect.stories.ts b/community/components/form/select/multiselect.stories.ts similarity index 99% rename from libs/angular-components/community/components/form/select/multiselect.stories.ts rename to community/components/form/select/multiselect.stories.ts index 466c34549..dfea3d56d 100644 --- a/libs/angular-components/community/components/form/select/multiselect.stories.ts +++ b/community/components/form/select/multiselect.stories.ts @@ -10,7 +10,7 @@ import { SelectOptionComponent } from "./select-option.component"; import { IconComponent, FeedbackTextComponent, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; const meta: Meta<MultiselectComponent> = { title: "Community/Form/Select/Multiselect", diff --git a/libs/angular-components/community/components/form/select/select-option.component.ts b/community/components/form/select/select-option.component.ts similarity index 100% rename from libs/angular-components/community/components/form/select/select-option.component.ts rename to community/components/form/select/select-option.component.ts diff --git a/libs/angular-components/community/components/form/select/select.component.html b/community/components/form/select/select.component.html similarity index 100% rename from libs/angular-components/community/components/form/select/select.component.html rename to community/components/form/select/select.component.html diff --git a/libs/angular-components/community/components/form/select/select.component.scss b/community/components/form/select/select.component.scss similarity index 98% rename from libs/angular-components/community/components/form/select/select.component.scss rename to community/components/form/select/select.component.scss index 0b7d6ab62..8c9b1e4fe 100644 --- a/libs/angular-components/community/components/form/select/select.component.scss +++ b/community/components/form/select/select.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; .tedi-select { display: block; diff --git a/libs/angular-components/community/components/form/select/select.component.ts b/community/components/form/select/select.component.ts similarity index 99% rename from libs/angular-components/community/components/form/select/select.component.ts rename to community/components/form/select/select.component.ts index c70246f9c..a1c7a48cf 100644 --- a/libs/angular-components/community/components/form/select/select.component.ts +++ b/community/components/form/select/select.component.ts @@ -33,7 +33,7 @@ import { LabelComponent, TediTranslationPipe, TextComponent, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; import { CardComponent, CardContentComponent } from "../../../components/cards"; @Component({ diff --git a/libs/angular-components/community/components/form/select/select.stories.ts b/community/components/form/select/select.stories.ts similarity index 99% rename from libs/angular-components/community/components/form/select/select.stories.ts rename to community/components/form/select/select.stories.ts index 9b577428e..fb4a4687c 100644 --- a/libs/angular-components/community/components/form/select/select.stories.ts +++ b/community/components/form/select/select.stories.ts @@ -8,7 +8,7 @@ import { import { SelectComponent } from "./select.component"; import { MultiselectComponent } from "./multiselect.component"; import { SelectOptionComponent } from "./select-option.component"; -import { IconComponent } from "@tehik-ee/tedi-angular/tedi"; +import { IconComponent } from "@tedi-design-system/angular/tedi"; /** * The Select component provides users with a dropdown of options to choose from. diff --git a/libs/angular-components/community/components/form/textarea/textarea.component.scss b/community/components/form/textarea/textarea.component.scss similarity index 90% rename from libs/angular-components/community/components/form/textarea/textarea.component.scss rename to community/components/form/textarea/textarea.component.scss index 9a4ced361..425dd1927 100644 --- a/libs/angular-components/community/components/form/textarea/textarea.component.scss +++ b/community/components/form/textarea/textarea.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; .tedi-textarea { width: 100%; diff --git a/libs/angular-components/community/components/form/textarea/textarea.component.ts b/community/components/form/textarea/textarea.component.ts similarity index 100% rename from libs/angular-components/community/components/form/textarea/textarea.component.ts rename to community/components/form/textarea/textarea.component.ts diff --git a/libs/angular-components/community/components/form/textarea/textarea.stories.ts b/community/components/form/textarea/textarea.stories.ts similarity index 100% rename from libs/angular-components/community/components/form/textarea/textarea.stories.ts rename to community/components/form/textarea/textarea.stories.ts diff --git a/libs/angular-components/community/components/navigation/breadcrumbs/breadcrumbs.component.html b/community/components/navigation/breadcrumbs/breadcrumbs.component.html similarity index 100% rename from libs/angular-components/community/components/navigation/breadcrumbs/breadcrumbs.component.html rename to community/components/navigation/breadcrumbs/breadcrumbs.component.html diff --git a/libs/angular-components/community/components/navigation/breadcrumbs/breadcrumbs.component.scss b/community/components/navigation/breadcrumbs/breadcrumbs.component.scss similarity index 100% rename from libs/angular-components/community/components/navigation/breadcrumbs/breadcrumbs.component.scss rename to community/components/navigation/breadcrumbs/breadcrumbs.component.scss diff --git a/libs/angular-components/community/components/navigation/breadcrumbs/breadcrumbs.component.spec.ts b/community/components/navigation/breadcrumbs/breadcrumbs.component.spec.ts similarity index 100% rename from libs/angular-components/community/components/navigation/breadcrumbs/breadcrumbs.component.spec.ts rename to community/components/navigation/breadcrumbs/breadcrumbs.component.spec.ts diff --git a/libs/angular-components/community/components/navigation/breadcrumbs/breadcrumbs.component.ts b/community/components/navigation/breadcrumbs/breadcrumbs.component.ts similarity index 98% rename from libs/angular-components/community/components/navigation/breadcrumbs/breadcrumbs.component.ts rename to community/components/navigation/breadcrumbs/breadcrumbs.component.ts index dfa5ec83c..6a6b0aa79 100644 --- a/libs/angular-components/community/components/navigation/breadcrumbs/breadcrumbs.component.ts +++ b/community/components/navigation/breadcrumbs/breadcrumbs.component.ts @@ -7,7 +7,7 @@ import { BreakpointService, BreakpointInputs, LinkComponent -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; export type Breadcrumb = { label: string; diff --git a/libs/angular-components/community/components/navigation/breadcrumbs/breadcrumbs.stories.ts b/community/components/navigation/breadcrumbs/breadcrumbs.stories.ts similarity index 96% rename from libs/angular-components/community/components/navigation/breadcrumbs/breadcrumbs.stories.ts rename to community/components/navigation/breadcrumbs/breadcrumbs.stories.ts index 0d26b3995..bfa9397f1 100644 --- a/libs/angular-components/community/components/navigation/breadcrumbs/breadcrumbs.stories.ts +++ b/community/components/navigation/breadcrumbs/breadcrumbs.stories.ts @@ -1,7 +1,7 @@ import { argsToTemplate, type Meta, type StoryObj } from "@storybook/angular"; import { BreadcrumbsComponent } from "./breadcrumbs.component"; -import { createBreakpointArgTypes } from "../../../../dev-tools/createBreakpointArgTypes"; +import { createBreakpointArgTypes } from "../../../../src/dev-tools/createBreakpointArgTypes"; /** <a href="https://www.figma.com/design/jWiRIXhHRxwVdMSimKX2FF/TEDI-READY-2.8.9--work-in-progress-?node-id=2370-14804&m=dev" target="_BLANK">Figma ↗</a><br/> * Breadcrumbs provide users with a clear path of where they are within the application. diff --git a/libs/angular-components/community/components/navigation/index.ts b/community/components/navigation/index.ts similarity index 100% rename from libs/angular-components/community/components/navigation/index.ts rename to community/components/navigation/index.ts diff --git a/libs/angular-components/community/components/navigation/pagination/pagination-page/pagination-page.component.html b/community/components/navigation/pagination/pagination-page/pagination-page.component.html similarity index 100% rename from libs/angular-components/community/components/navigation/pagination/pagination-page/pagination-page.component.html rename to community/components/navigation/pagination/pagination-page/pagination-page.component.html diff --git a/libs/angular-components/community/components/navigation/pagination/pagination-page/pagination-page.component.scss b/community/components/navigation/pagination/pagination-page/pagination-page.component.scss similarity index 100% rename from libs/angular-components/community/components/navigation/pagination/pagination-page/pagination-page.component.scss rename to community/components/navigation/pagination/pagination-page/pagination-page.component.scss diff --git a/libs/angular-components/community/components/navigation/pagination/pagination-page/pagination-page.component.ts b/community/components/navigation/pagination/pagination-page/pagination-page.component.ts similarity index 93% rename from libs/angular-components/community/components/navigation/pagination/pagination-page/pagination-page.component.ts rename to community/components/navigation/pagination/pagination-page/pagination-page.component.ts index d5b72b4d1..b35c07269 100644 --- a/libs/angular-components/community/components/navigation/pagination/pagination-page/pagination-page.component.ts +++ b/community/components/navigation/pagination/pagination-page/pagination-page.component.ts @@ -7,7 +7,7 @@ import { import { TediTranslationPipe, TextComponent, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; @Component({ selector: "tedi-pagination-page", diff --git a/libs/angular-components/community/components/navigation/pagination/pagination.component.html b/community/components/navigation/pagination/pagination.component.html similarity index 100% rename from libs/angular-components/community/components/navigation/pagination/pagination.component.html rename to community/components/navigation/pagination/pagination.component.html diff --git a/libs/angular-components/community/components/navigation/pagination/pagination.component.scss b/community/components/navigation/pagination/pagination.component.scss similarity index 96% rename from libs/angular-components/community/components/navigation/pagination/pagination.component.scss rename to community/components/navigation/pagination/pagination.component.scss index a7bf5c752..9d0970124 100644 --- a/libs/angular-components/community/components/navigation/pagination/pagination.component.scss +++ b/community/components/navigation/pagination/pagination.component.scss @@ -1,5 +1,5 @@ -@use "@tehik-ee/tedi-core/mixins"; -@use "@tehik-ee/tedi-core/bootstrap-utility/breakpoints"; +@use "@tedi-design-system/core/mixins"; +@use "@tedi-design-system/core/bootstrap-utility/breakpoints"; .tedi-pagination { --_pagination-border: var(--general-border-secondary, #9293a4); diff --git a/libs/angular-components/community/components/navigation/pagination/pagination.component.ts b/community/components/navigation/pagination/pagination.component.ts similarity index 97% rename from libs/angular-components/community/components/navigation/pagination/pagination.component.ts rename to community/components/navigation/pagination/pagination.component.ts index d0c0c20fe..039bb5fe5 100644 --- a/libs/angular-components/community/components/navigation/pagination/pagination.component.ts +++ b/community/components/navigation/pagination/pagination.component.ts @@ -15,7 +15,7 @@ import { IconComponent, TediTranslationPipe, TextComponent, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; @Component({ selector: "tedi-pagination", diff --git a/libs/angular-components/community/components/navigation/pagination/pagination.stories.ts b/community/components/navigation/pagination/pagination.stories.ts similarity index 100% rename from libs/angular-components/community/components/navigation/pagination/pagination.stories.ts rename to community/components/navigation/pagination/pagination.stories.ts diff --git a/libs/angular-components/community/components/navigation/pagination/pagination.utils.ts b/community/components/navigation/pagination/pagination.utils.ts similarity index 100% rename from libs/angular-components/community/components/navigation/pagination/pagination.utils.ts rename to community/components/navigation/pagination/pagination.utils.ts diff --git a/libs/angular-components/community/components/navigation/tabs/index.ts b/community/components/navigation/tabs/index.ts similarity index 100% rename from libs/angular-components/community/components/navigation/tabs/index.ts rename to community/components/navigation/tabs/index.ts diff --git a/libs/angular-components/community/components/navigation/tabs/tab-content/tab-content.component.html b/community/components/navigation/tabs/tab-content/tab-content.component.html similarity index 100% rename from libs/angular-components/community/components/navigation/tabs/tab-content/tab-content.component.html rename to community/components/navigation/tabs/tab-content/tab-content.component.html diff --git a/libs/angular-components/community/components/navigation/tabs/tab-content/tab-content.component.ts b/community/components/navigation/tabs/tab-content/tab-content.component.ts similarity index 100% rename from libs/angular-components/community/components/navigation/tabs/tab-content/tab-content.component.ts rename to community/components/navigation/tabs/tab-content/tab-content.component.ts diff --git a/libs/angular-components/community/components/navigation/tabs/tab/tab.component.html b/community/components/navigation/tabs/tab/tab.component.html similarity index 100% rename from libs/angular-components/community/components/navigation/tabs/tab/tab.component.html rename to community/components/navigation/tabs/tab/tab.component.html diff --git a/libs/angular-components/community/components/navigation/tabs/tab/tab.component.scss b/community/components/navigation/tabs/tab/tab.component.scss similarity index 97% rename from libs/angular-components/community/components/navigation/tabs/tab/tab.component.scss rename to community/components/navigation/tabs/tab/tab.component.scss index 47b22f55f..cca02aab1 100644 --- a/libs/angular-components/community/components/navigation/tabs/tab/tab.component.scss +++ b/community/components/navigation/tabs/tab/tab.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; .tedi-tab { --_tab-background: var(--tab-item-default-background); diff --git a/libs/angular-components/community/components/navigation/tabs/tab/tab.component.ts b/community/components/navigation/tabs/tab/tab.component.ts similarity index 100% rename from libs/angular-components/community/components/navigation/tabs/tab/tab.component.ts rename to community/components/navigation/tabs/tab/tab.component.ts diff --git a/libs/angular-components/community/components/navigation/tabs/tabs.component.html b/community/components/navigation/tabs/tabs.component.html similarity index 100% rename from libs/angular-components/community/components/navigation/tabs/tabs.component.html rename to community/components/navigation/tabs/tabs.component.html diff --git a/libs/angular-components/community/components/navigation/tabs/tabs.component.scss b/community/components/navigation/tabs/tabs.component.scss similarity index 91% rename from libs/angular-components/community/components/navigation/tabs/tabs.component.scss rename to community/components/navigation/tabs/tabs.component.scss index cbfaaaad2..192c108d4 100644 --- a/libs/angular-components/community/components/navigation/tabs/tabs.component.scss +++ b/community/components/navigation/tabs/tabs.component.scss @@ -1,5 +1,5 @@ -@use "@tehik-ee/tedi-core/bootstrap-utility/breakpoints"; -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/bootstrap-utility/breakpoints"; +@use "@tedi-design-system/core/mixins"; .tedi-tabs { --_tab-list-background: var(--tab-background); diff --git a/libs/angular-components/community/components/navigation/tabs/tabs.component.ts b/community/components/navigation/tabs/tabs.component.ts similarity index 98% rename from libs/angular-components/community/components/navigation/tabs/tabs.component.ts rename to community/components/navigation/tabs/tabs.component.ts index a0ea23633..36e40cadf 100644 --- a/libs/angular-components/community/components/navigation/tabs/tabs.component.ts +++ b/community/components/navigation/tabs/tabs.component.ts @@ -15,7 +15,7 @@ import { ClosingButtonComponent, IconComponent, TediTranslationPipe, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; import { TabContentComponent } from "./tab-content/tab-content.component"; import { TabComponent } from "./tab/tab.component"; diff --git a/libs/angular-components/community/components/navigation/tabs/tabs.stories.ts b/community/components/navigation/tabs/tabs.stories.ts similarity index 100% rename from libs/angular-components/community/components/navigation/tabs/tabs.stories.ts rename to community/components/navigation/tabs/tabs.stories.ts diff --git a/libs/angular-components/community/components/overlay/dropdown-item/dropdown-item.component.scss b/community/components/overlay/dropdown-item/dropdown-item.component.scss similarity index 97% rename from libs/angular-components/community/components/overlay/dropdown-item/dropdown-item.component.scss rename to community/components/overlay/dropdown-item/dropdown-item.component.scss index 0dd508f53..776d79a9e 100644 --- a/libs/angular-components/community/components/overlay/dropdown-item/dropdown-item.component.scss +++ b/community/components/overlay/dropdown-item/dropdown-item.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; .tedi-dropdown-item { --_background-color: var(--dropdown-item-default-background); diff --git a/libs/angular-components/community/components/overlay/dropdown-item/dropdown-item.component.ts b/community/components/overlay/dropdown-item/dropdown-item.component.ts similarity index 100% rename from libs/angular-components/community/components/overlay/dropdown-item/dropdown-item.component.ts rename to community/components/overlay/dropdown-item/dropdown-item.component.ts diff --git a/libs/angular-components/community/components/overlay/dropdown-item/dropdown-item.stories.ts b/community/components/overlay/dropdown-item/dropdown-item.stories.ts similarity index 97% rename from libs/angular-components/community/components/overlay/dropdown-item/dropdown-item.stories.ts rename to community/components/overlay/dropdown-item/dropdown-item.stories.ts index 4e6ee67c3..0ebedabbb 100644 --- a/libs/angular-components/community/components/overlay/dropdown-item/dropdown-item.stories.ts +++ b/community/components/overlay/dropdown-item/dropdown-item.stories.ts @@ -1,6 +1,6 @@ import { Meta, StoryObj, moduleMetadata } from "@storybook/angular"; import { DropdownItemComponent } from "./dropdown-item.component"; -import { IconComponent } from "@tehik-ee/tedi-angular/tedi"; +import { IconComponent } from "@tedi-design-system/angular/tedi"; const meta: Meta<DropdownItemComponent> = { title: "Community/Overlay/Dropdown Item", diff --git a/libs/angular-components/community/components/overlay/dropdown/dropdown-trigger/dropdown-trigger.directive.ts b/community/components/overlay/dropdown/dropdown-trigger/dropdown-trigger.directive.ts similarity index 100% rename from libs/angular-components/community/components/overlay/dropdown/dropdown-trigger/dropdown-trigger.directive.ts rename to community/components/overlay/dropdown/dropdown-trigger/dropdown-trigger.directive.ts diff --git a/libs/angular-components/community/components/overlay/dropdown/dropdown.component.html b/community/components/overlay/dropdown/dropdown.component.html similarity index 100% rename from libs/angular-components/community/components/overlay/dropdown/dropdown.component.html rename to community/components/overlay/dropdown/dropdown.component.html diff --git a/libs/angular-components/community/components/overlay/dropdown/dropdown.component.scss b/community/components/overlay/dropdown/dropdown.component.scss similarity index 86% rename from libs/angular-components/community/components/overlay/dropdown/dropdown.component.scss rename to community/components/overlay/dropdown/dropdown.component.scss index 045394b61..f3d7e5fb9 100644 --- a/libs/angular-components/community/components/overlay/dropdown/dropdown.component.scss +++ b/community/components/overlay/dropdown/dropdown.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/bootstrap-utility/breakpoints"; +@use "@tedi-design-system/core/bootstrap-utility/breakpoints"; .tedi-dropdown { &__card.tedi-card { diff --git a/libs/angular-components/community/components/overlay/dropdown/dropdown.component.ts b/community/components/overlay/dropdown/dropdown.component.ts similarity index 97% rename from libs/angular-components/community/components/overlay/dropdown/dropdown.component.ts rename to community/components/overlay/dropdown/dropdown.component.ts index 01ec622f3..688853691 100644 --- a/libs/angular-components/community/components/overlay/dropdown/dropdown.component.ts +++ b/community/components/overlay/dropdown/dropdown.component.ts @@ -19,7 +19,7 @@ import { DropdownItemComponent } from "../dropdown-item/dropdown-item.component" import { BreakpointService, ClosingButtonComponent, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; import { FocusKeyManager } from "@angular/cdk/a11y"; @Component({ diff --git a/libs/angular-components/community/components/overlay/dropdown/dropdown.stories.ts b/community/components/overlay/dropdown/dropdown.stories.ts similarity index 96% rename from libs/angular-components/community/components/overlay/dropdown/dropdown.stories.ts rename to community/components/overlay/dropdown/dropdown.stories.ts index a04d42896..8d9c76532 100644 --- a/libs/angular-components/community/components/overlay/dropdown/dropdown.stories.ts +++ b/community/components/overlay/dropdown/dropdown.stories.ts @@ -2,7 +2,7 @@ import { Meta, StoryObj, moduleMetadata } from "@storybook/angular"; import { DropdownItemComponent } from "../dropdown-item/dropdown-item.component"; import { DropdownComponent } from "./dropdown.component"; import { DropdownTriggerDirective } from "./dropdown-trigger/dropdown-trigger.directive"; -import { ButtonComponent } from "@tehik-ee/tedi-angular/tedi"; +import { ButtonComponent } from "@tedi-design-system/angular/tedi"; /** * <p>Dropdown can be used to display hidden menus on selectable items. Use `[tedi-dropdown-trigger]` directive on element that opens the dropwdown</p> diff --git a/libs/angular-components/community/components/overlay/index.ts b/community/components/overlay/index.ts similarity index 100% rename from libs/angular-components/community/components/overlay/index.ts rename to community/components/overlay/index.ts diff --git a/libs/angular-components/community/components/overlay/modal/footer/modal-footer.component.html b/community/components/overlay/modal/footer/modal-footer.component.html similarity index 100% rename from libs/angular-components/community/components/overlay/modal/footer/modal-footer.component.html rename to community/components/overlay/modal/footer/modal-footer.component.html diff --git a/libs/angular-components/community/components/overlay/modal/footer/modal-footer.component.scss b/community/components/overlay/modal/footer/modal-footer.component.scss similarity index 85% rename from libs/angular-components/community/components/overlay/modal/footer/modal-footer.component.scss rename to community/components/overlay/modal/footer/modal-footer.component.scss index 7dfc7ef1d..44c1ca059 100644 --- a/libs/angular-components/community/components/overlay/modal/footer/modal-footer.component.scss +++ b/community/components/overlay/modal/footer/modal-footer.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; .tedi-modal-footer { --_modal-footer-gap: 0.5rem; diff --git a/libs/angular-components/community/components/overlay/modal/footer/modal-footer.component.ts b/community/components/overlay/modal/footer/modal-footer.component.ts similarity index 96% rename from libs/angular-components/community/components/overlay/modal/footer/modal-footer.component.ts rename to community/components/overlay/modal/footer/modal-footer.component.ts index 0a587d16b..1ecfc13ad 100644 --- a/libs/angular-components/community/components/overlay/modal/footer/modal-footer.component.ts +++ b/community/components/overlay/modal/footer/modal-footer.component.ts @@ -5,7 +5,7 @@ import { ButtonSize, ButtonVariant, IconComponent, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; import { DialogData } from "../modal.component"; import { DIALOG_DATA } from "@angular/cdk/dialog"; diff --git a/libs/angular-components/community/components/overlay/modal/header/modal-header.component.html b/community/components/overlay/modal/header/modal-header.component.html similarity index 100% rename from libs/angular-components/community/components/overlay/modal/header/modal-header.component.html rename to community/components/overlay/modal/header/modal-header.component.html diff --git a/libs/angular-components/community/components/overlay/modal/header/modal-header.component.scss b/community/components/overlay/modal/header/modal-header.component.scss similarity index 86% rename from libs/angular-components/community/components/overlay/modal/header/modal-header.component.scss rename to community/components/overlay/modal/header/modal-header.component.scss index 80bcd81e3..a5adcacc2 100644 --- a/libs/angular-components/community/components/overlay/modal/header/modal-header.component.scss +++ b/community/components/overlay/modal/header/modal-header.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; .tedi-modal-header { border-bottom: var(--_modal-border); diff --git a/libs/angular-components/community/components/overlay/modal/header/modal-header.component.ts b/community/components/overlay/modal/header/modal-header.component.ts similarity index 96% rename from libs/angular-components/community/components/overlay/modal/header/modal-header.component.ts rename to community/components/overlay/modal/header/modal-header.component.ts index 4e3ac5dd6..b38b489d8 100644 --- a/libs/angular-components/community/components/overlay/modal/header/modal-header.component.ts +++ b/community/components/overlay/modal/header/modal-header.component.ts @@ -6,7 +6,7 @@ import { TextComponent, ClosingButtonComponent, ComponentInputs, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; @Component({ selector: "tedi-modal-header", diff --git a/libs/angular-components/community/components/overlay/modal/index.ts b/community/components/overlay/modal/index.ts similarity index 100% rename from libs/angular-components/community/components/overlay/modal/index.ts rename to community/components/overlay/modal/index.ts diff --git a/libs/angular-components/community/components/overlay/modal/modal.component.html b/community/components/overlay/modal/modal.component.html similarity index 100% rename from libs/angular-components/community/components/overlay/modal/modal.component.html rename to community/components/overlay/modal/modal.component.html diff --git a/libs/angular-components/community/components/overlay/modal/modal.component.scss b/community/components/overlay/modal/modal.component.scss similarity index 97% rename from libs/angular-components/community/components/overlay/modal/modal.component.scss rename to community/components/overlay/modal/modal.component.scss index 7d793e28e..7db1b677a 100644 --- a/libs/angular-components/community/components/overlay/modal/modal.component.scss +++ b/community/components/overlay/modal/modal.component.scss @@ -1,5 +1,5 @@ @use "@angular/cdk" as cdk; -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; @include cdk.overlay(); @mixin pane-max-width($size) { diff --git a/libs/angular-components/community/components/overlay/modal/modal.component.ts b/community/components/overlay/modal/modal.component.ts similarity index 96% rename from libs/angular-components/community/components/overlay/modal/modal.component.ts rename to community/components/overlay/modal/modal.component.ts index f73413cde..d5f95b7e6 100644 --- a/libs/angular-components/community/components/overlay/modal/modal.component.ts +++ b/community/components/overlay/modal/modal.component.ts @@ -9,7 +9,7 @@ import { import { DIALOG_DATA, DialogModule, DialogRef } from "@angular/cdk/dialog"; import { ModalHeaderComponent } from "./header/modal-header.component"; import { ModalFooterComponent } from "./footer/modal-footer.component"; -import { ComponentInputs } from "@tehik-ee/tedi-angular/tedi"; +import { ComponentInputs } from "@tedi-design-system/angular/tedi"; import { CdkScrollable } from "@angular/cdk/scrolling"; export type DialogData = ComponentInputs< diff --git a/libs/angular-components/community/components/overlay/modal/modal.stories.ts b/community/components/overlay/modal/modal.stories.ts similarity index 100% rename from libs/angular-components/community/components/overlay/modal/modal.stories.ts rename to community/components/overlay/modal/modal.stories.ts diff --git a/libs/angular-components/community/components/table/index.ts b/community/components/table/index.ts similarity index 100% rename from libs/angular-components/community/components/table/index.ts rename to community/components/table/index.ts diff --git a/libs/angular-components/community/components/table/table-styles.stories.ts b/community/components/table/table-styles.stories.ts similarity index 100% rename from libs/angular-components/community/components/table/table-styles.stories.ts rename to community/components/table/table-styles.stories.ts diff --git a/libs/angular-components/community/components/table/table-styles/table-styles.component.html b/community/components/table/table-styles/table-styles.component.html similarity index 100% rename from libs/angular-components/community/components/table/table-styles/table-styles.component.html rename to community/components/table/table-styles/table-styles.component.html diff --git a/libs/angular-components/community/components/table/table-styles/table-styles.component.scss b/community/components/table/table-styles/table-styles.component.scss similarity index 98% rename from libs/angular-components/community/components/table/table-styles/table-styles.component.scss rename to community/components/table/table-styles/table-styles.component.scss index 1e7fc33d9..f0a336586 100644 --- a/libs/angular-components/community/components/table/table-styles/table-styles.component.scss +++ b/community/components/table/table-styles/table-styles.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; .tedi-table-styles { --_table-bg: var(--table-default); diff --git a/libs/angular-components/community/components/table/table-styles/table-styles.component.ts b/community/components/table/table-styles/table-styles.component.ts similarity index 100% rename from libs/angular-components/community/components/table/table-styles/table-styles.component.ts rename to community/components/table/table-styles/table-styles.component.ts diff --git a/libs/angular-components/community/components/tags/index.ts b/community/components/tags/index.ts similarity index 100% rename from libs/angular-components/community/components/tags/index.ts rename to community/components/tags/index.ts diff --git a/libs/angular-components/community/components/tags/status-badge/status-badge.component.html b/community/components/tags/status-badge/status-badge.component.html similarity index 100% rename from libs/angular-components/community/components/tags/status-badge/status-badge.component.html rename to community/components/tags/status-badge/status-badge.component.html diff --git a/libs/angular-components/community/components/tags/status-badge/status-badge.component.scss b/community/components/tags/status-badge/status-badge.component.scss similarity index 98% rename from libs/angular-components/community/components/tags/status-badge/status-badge.component.scss rename to community/components/tags/status-badge/status-badge.component.scss index fcbbd903c..3b8011038 100644 --- a/libs/angular-components/community/components/tags/status-badge/status-badge.component.scss +++ b/community/components/tags/status-badge/status-badge.component.scss @@ -1,5 +1,5 @@ // Redo this file to share styles with libs/react-components/src/tedi/components/tags/status-badge/status-badge.module.scss -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; .tedi-status-badge__inner-text:empty { display: none; diff --git a/libs/angular-components/community/components/tags/status-badge/status-badge.component.ts b/community/components/tags/status-badge/status-badge.component.ts similarity index 97% rename from libs/angular-components/community/components/tags/status-badge/status-badge.component.ts rename to community/components/tags/status-badge/status-badge.component.ts index 14b099fc0..a7815cb50 100644 --- a/libs/angular-components/community/components/tags/status-badge/status-badge.component.ts +++ b/community/components/tags/status-badge/status-badge.component.ts @@ -1,5 +1,5 @@ import { Component, computed, input, ViewEncapsulation } from "@angular/core"; -import { IconColor, IconComponent } from "@tehik-ee/tedi-angular/tedi"; +import { IconColor, IconComponent } from "@tedi-design-system/angular/tedi"; // StatusBadgeColor, StatusBadgeVariant, StatusBadgeSize, StatusBadgeStatus are identical to libs/react-components/src/tedi/components/tags/status-badge/status-badge.tsx, // redo to use shared constants when possible diff --git a/libs/angular-components/community/components/tags/status-badge/status-badge.stories.ts b/community/components/tags/status-badge/status-badge.stories.ts similarity index 99% rename from libs/angular-components/community/components/tags/status-badge/status-badge.stories.ts rename to community/components/tags/status-badge/status-badge.stories.ts index c5abbeed4..119dc6b68 100644 --- a/libs/angular-components/community/components/tags/status-badge/status-badge.stories.ts +++ b/community/components/tags/status-badge/status-badge.stories.ts @@ -18,7 +18,7 @@ import { RowComponent, VerticalSpacingDirective, ComponentInputs, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; // colors, variants, statuses, colorToIconMap, statusToIconMap are identical to libs/react-components/src/tedi/components/tags/status-badge/status-badge.stories.tsx, // redo to use shared constants when possible diff --git a/libs/angular-components/community/components/tags/tag/tag.component.html b/community/components/tags/tag/tag.component.html similarity index 100% rename from libs/angular-components/community/components/tags/tag/tag.component.html rename to community/components/tags/tag/tag.component.html diff --git a/libs/angular-components/community/components/tags/tag/tag.component.scss b/community/components/tags/tag/tag.component.scss similarity index 98% rename from libs/angular-components/community/components/tags/tag/tag.component.scss rename to community/components/tags/tag/tag.component.scss index 83e8ffbcc..078bc4a90 100644 --- a/libs/angular-components/community/components/tags/tag/tag.component.scss +++ b/community/components/tags/tag/tag.component.scss @@ -1,4 +1,4 @@ -@use "@tehik-ee/tedi-core/mixins"; +@use "@tedi-design-system/core/mixins"; .tedi-tag { --_background-color: var(--tag-primary-background); diff --git a/libs/angular-components/community/components/tags/tag/tag.component.ts b/community/components/tags/tag/tag.component.ts similarity index 97% rename from libs/angular-components/community/components/tags/tag/tag.component.ts rename to community/components/tags/tag/tag.component.ts index d84f00585..0c0afe7d9 100644 --- a/libs/angular-components/community/components/tags/tag/tag.component.ts +++ b/community/components/tags/tag/tag.component.ts @@ -10,7 +10,7 @@ import { IconComponent, SpinnerComponent, TediTranslationPipe, -} from "@tehik-ee/tedi-angular/tedi"; +} from "@tedi-design-system/angular/tedi"; export type TagType = "primary" | "secondary" | "danger"; diff --git a/libs/angular-components/community/components/tags/tag/tag.stories.ts b/community/components/tags/tag/tag.stories.ts similarity index 100% rename from libs/angular-components/community/components/tags/tag/tag.stories.ts rename to community/components/tags/tag/tag.stories.ts diff --git a/libs/angular-components/community/helpers/unique-id.ts b/community/helpers/unique-id.ts similarity index 100% rename from libs/angular-components/community/helpers/unique-id.ts rename to community/helpers/unique-id.ts diff --git a/libs/angular-components/community/index.ts b/community/index.ts similarity index 100% rename from libs/angular-components/community/index.ts rename to community/index.ts diff --git a/libs/angular-components/community/ng-package.json b/community/ng-package.json similarity index 100% rename from libs/angular-components/community/ng-package.json rename to community/ng-package.json diff --git a/libs/angular-components/jest.config.ts b/jest.config.ts similarity index 92% rename from libs/angular-components/jest.config.ts rename to jest.config.ts index 6e8112604..80a5af5df 100644 --- a/libs/angular-components/jest.config.ts +++ b/jest.config.ts @@ -14,7 +14,7 @@ export default { resolver: "jest-preset-angular/build/resolvers/ng-jest-resolver.js", testEnvironment: "jsdom", collectCoverage: true, - collectCoverageFrom: ["tedi/components/**/*.{js,ts,tsx}"], + collectCoverageFrom: ["./tedi/components/**/*.{js,ts,tsx}"], coveragePathIgnorePatterns: ["\\.stories\\.ts$"], coverageThreshold: { global: { diff --git a/libs/angular-components/README.md b/libs/angular-components/README.md deleted file mode 100644 index 0f2467a5b..000000000 --- a/libs/angular-components/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# TEDI Design System for Angular - -`@tehik-ee/tedi-angular` is a library of Angular components designed to implement the TEDI Design System, ensuring consistency, accessibility, and efficiency in building user interfaces. -For installation and usage instructions, visit the [documentation](https://github.com/TEHIK-EE/tedi-design-system/wiki). diff --git a/libs/angular-components/package-lock.json b/libs/angular-components/package-lock.json deleted file mode 100644 index 00302ae16..000000000 --- a/libs/angular-components/package-lock.json +++ /dev/null @@ -1,23426 +0,0 @@ -{ - "name": "@tehik-ee/tedi-angular", - "version": "0.0.0-semantic-version", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@tehik-ee/tedi-angular", - "version": "0.0.0-semantic-version", - "dependencies": { - "@tehik-ee/tedi-core": "^1.15.4" - }, - "devDependencies": { - "@angular-devkit/core": "^19.2.14", - "@angular-devkit/schematics": "^19.2.14", - "@angular-eslint/builder": "^19.7.0", - "@angular-eslint/eslint-plugin": "^19.7.0", - "@angular-eslint/eslint-plugin-template": "^19.7.0", - "@angular-eslint/schematics": "^19.7.0", - "@angular-eslint/template-parser": "^19.7.0", - "@angular/cli": "^19.2.14", - "@angular/compiler-cli": "^19.2.14", - "@angular/forms": "^19.2.14", - "@angular/language-service": "^19.2.14", - "@angular/platform-browser-dynamic": "^19.2.14", - "@angular/router": "^19.2.14", - "@compodoc/compodoc": "^1.1.26", - "@etchteam/storybook-addon-status": "^5.0.0", - "@schematics/angular": "^19.2.14", - "@storybook/addon-a11y": "^8.6.8", - "@storybook/addon-docs": "^8.6.8", - "@storybook/addon-essentials": "^8.6.8", - "@storybook/addon-interactions": "^8.6.8", - "@storybook/addon-onboarding": "^8.6.8", - "@storybook/angular": "^8.6.12", - "@storybook/blocks": "^8.6.8", - "@storybook/manager-api": "^8.6.8", - "@storybook/test": "^8.6.8", - "@storybook/theming": "^8.6.8", - "@testing-library/angular": "^17.3.7", - "@types/jest": "^29.5.14", - "@types/node": "^22.10.5", - "@typescript-eslint/eslint-plugin": "^8.28.0", - "angular-eslint": "^19.4.0", - "chokidar": "^4.0.3", - "chromatic": "^11.27.0", - "eslint-plugin-prettier": "^5.2.1", - "identity-obj-proxy": "^3.0.0", - "jest": "^29.7.0", - "jest-preset-angular": "^14.5.3", - "ng-packagr": "^19.2.0", - "prettier": "^3.4.2", - "readdirp": "3.6.0", - "replace-in-file": "^8.3.0", - "sass": "^1.86.1", - "storybook": "^8.4.7", - "storybook-addon-angular-router": "^1.10.1", - "storybook-addon-pseudo-states": "^4.0.3", - "ts-node": "^10.9.2", - "tslib": "^2.5.0" - }, - "peerDependencies": { - "@angular/animations": "^18.0.0 || ^19.0.0", - "@angular/cdk": "^18.0.0 || ^19.0.0", - "@angular/common": "^18.0.0 || ^19.0.0", - "@angular/core": "^18.0.0 || ^19.0.0", - "@angular/forms": "^18.0.0 || ^19.0.0", - "@angular/platform-browser": "^18.0.0 || ^19.0.0", - "ngx-float-ui": "^19.0.1" - } - }, - "node_modules/@adobe/css-tools": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.3.tgz", - "integrity": "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@aduh95/viz.js": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz", - "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1902.14", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.14.tgz", - "integrity": "sha512-rgMkqOrxedzqLZ8w59T/0YrpWt7LDmGwt+ZhNHE7cn27jZ876yGC2Bhcn58YZh2+R03WEJ9q0ePblaBYz03SMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "19.2.14", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/architect/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@angular-devkit/build-angular": { - "version": "19.2.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.2.15.tgz", - "integrity": "sha512-mqudAcyrSp/E7ZQdQoHfys0/nvQuwyJDaAzj3qL3HUStuUzb5ULNOj2f6sFBo+xYo+/WT8IzmzDN9DCqDgvFaA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1902.15", - "@angular-devkit/build-webpack": "0.1902.15", - "@angular-devkit/core": "19.2.15", - "@angular/build": "19.2.15", - "@babel/core": "7.26.10", - "@babel/generator": "7.26.10", - "@babel/helper-annotate-as-pure": "7.25.9", - "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-transform-async-generator-functions": "7.26.8", - "@babel/plugin-transform-async-to-generator": "7.25.9", - "@babel/plugin-transform-runtime": "7.26.10", - "@babel/preset-env": "7.26.9", - "@babel/runtime": "7.26.10", - "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "19.2.15", - "@vitejs/plugin-basic-ssl": "1.2.0", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.20", - "babel-loader": "9.2.1", - "browserslist": "^4.21.5", - "copy-webpack-plugin": "12.0.2", - "css-loader": "7.1.2", - "esbuild-wasm": "0.25.4", - "fast-glob": "3.3.3", - "http-proxy-middleware": "3.0.5", - "istanbul-lib-instrument": "6.0.3", - "jsonc-parser": "3.3.1", - "karma-source-map-support": "1.4.0", - "less": "4.2.2", - "less-loader": "12.2.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.3.1", - "mini-css-extract-plugin": "2.9.2", - "open": "10.1.0", - "ora": "5.4.1", - "picomatch": "4.0.2", - "piscina": "4.8.0", - "postcss": "8.5.2", - "postcss-loader": "8.1.1", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.85.0", - "sass-loader": "16.0.5", - "semver": "7.7.1", - "source-map-loader": "5.0.0", - "source-map-support": "0.5.21", - "terser": "5.39.0", - "tree-kill": "1.2.2", - "tslib": "2.8.1", - "webpack": "5.98.0", - "webpack-dev-middleware": "7.4.2", - "webpack-dev-server": "5.2.2", - "webpack-merge": "6.0.1", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.25.4" - }, - "peerDependencies": { - "@angular/compiler-cli": "^19.0.0 || ^19.2.0-next.0", - "@angular/localize": "^19.0.0 || ^19.2.0-next.0", - "@angular/platform-server": "^19.0.0 || ^19.2.0-next.0", - "@angular/service-worker": "^19.0.0 || ^19.2.0-next.0", - "@angular/ssr": "^19.2.15", - "@web/test-runner": "^0.20.0", - "browser-sync": "^3.0.2", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "karma": "^6.3.0", - "ng-packagr": "^19.0.0 || ^19.2.0-next.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "typescript": ">=5.5 <5.9" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "@angular/ssr": { - "optional": true - }, - "@web/test-runner": { - "optional": true - }, - "browser-sync": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": { - "version": "0.1902.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.15.tgz", - "integrity": "sha512-RbqhStc6ZoRv57ZqLB36VOkBkAdU3nNezCvIs0AJV5V4+vLPMrb0hpIB0sF+9yMlMjWsolnRsj0/Fil+zQG3bw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@angular-devkit/core": "19.2.15", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { - "version": "19.2.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.15.tgz", - "integrity": "sha512-pU2RZYX6vhd7uLSdLwPnuBcr0mXJSjp3EgOXKsrlQFQZevc+Qs+2JdXgIElnOT/aDqtRtriDmLlSbtdE8n3ZbA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "8.17.1", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^4.0.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/sass": { - "version": "1.85.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.85.0.tgz", - "integrity": "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1902.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1902.15.tgz", - "integrity": "sha512-pIfZeizWsViXx8bsMoBLZw7Tl7uFf7bM7hAfmNwk0bb0QGzx5k1BiW6IKWyaG+Dg6U4UCrlNpIiut2b78HwQZw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@angular-devkit/architect": "0.1902.15", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^5.0.2" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { - "version": "0.1902.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.15.tgz", - "integrity": "sha512-RbqhStc6ZoRv57ZqLB36VOkBkAdU3nNezCvIs0AJV5V4+vLPMrb0hpIB0sF+9yMlMjWsolnRsj0/Fil+zQG3bw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@angular-devkit/core": "19.2.15", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": { - "version": "19.2.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.15.tgz", - "integrity": "sha512-pU2RZYX6vhd7uLSdLwPnuBcr0mXJSjp3EgOXKsrlQFQZevc+Qs+2JdXgIElnOT/aDqtRtriDmLlSbtdE8n3ZbA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "8.17.1", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^4.0.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.14.tgz", - "integrity": "sha512-aaPEnRNIBoYT4XrrYcZlHadX8vFDTUR+4wUgcmr0cNDLeWzWtoPFeVq8TQD6kFDeqovSx/UVEblGgg/28WvHyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.17.1", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^4.0.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/core/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.14.tgz", - "integrity": "sha512-s89/MWXHy8+GP/cRfFbSECIG3FQQQwNVv44OOmghPVgKQgQ+EoE/zygL2hqKYTUPoPaS/IhNXdXjSE5pS9yLeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "19.2.14", - "jsonc-parser": "3.3.1", - "magic-string": "0.30.17", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@angular-eslint/builder": { - "version": "19.7.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-19.7.1.tgz", - "integrity": "sha512-11zk4JngV4KgnDNtaiYzx0EhwMFdSbZjSF+CMHN4yB90e8vukhQDg/L8PEdSUEnkBKMymK9xN1JLIE+n6ESPaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": ">= 0.1900.0 < 0.2000.0", - "@angular-devkit/core": ">= 19.0.0 < 20.0.0" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "19.7.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.7.1.tgz", - "integrity": "sha512-L2xpEbyT3EJQ/dTmPntBu6MBeEG+3SKARJ9xuA4nnm6n7nn9EARmUmaGlBQZ2DFMOFeKcqR802gdPi8vCADXRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular-eslint/eslint-plugin": { - "version": "19.7.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-19.7.1.tgz", - "integrity": "sha512-VdNES8AxOHpSKTBfEkUtlvm/EV4BlpvWvMK2T0Eu2y2oHjxtBB6V4vYZR0PlSWS9IrE1MPfuH1htHPovBxiEdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.7.1", - "@angular-eslint/utils": "19.7.1" - }, - "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "19.7.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-19.7.1.tgz", - "integrity": "sha512-VQMlNF29Xbff6KMkUBWHbUyl0tIos1yI//q+ha+DCNYD7l41uoKnRIJ9c5vehXdgsqHWm4XBCVB3HKKMbrabrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.7.1", - "@angular-eslint/utils": "19.7.1", - "aria-query": "5.3.2", - "axobject-query": "4.1.0" - }, - "peerDependencies": { - "@angular-eslint/template-parser": "19.7.1", - "@typescript-eslint/types": "^7.11.0 || ^8.0.0", - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/schematics": { - "version": "19.7.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-19.7.1.tgz", - "integrity": "sha512-IlfzqpAx+491G0yCa+qaqsAbPWZxRywfNc4SGjIGgze8Nal0PbTy8VLZgAJ7/u/rEUowSvt3oKytb9rGS5u9kw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": ">= 19.0.0 < 20.0.0", - "@angular-devkit/schematics": ">= 19.0.0 < 20.0.0", - "@angular-eslint/eslint-plugin": "19.7.1", - "@angular-eslint/eslint-plugin-template": "19.7.1", - "ignore": "7.0.5", - "semver": "7.7.2", - "strip-json-comments": "3.1.1" - } - }, - "node_modules/@angular-eslint/schematics/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-eslint/template-parser": { - "version": "19.7.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-19.7.1.tgz", - "integrity": "sha512-SEuOjQJBTOOJ2DK0Wfiu1nO1F+fkXVehIk8xabEKZBY+t2mqbAiwBeWZsCSm4xx4BE689FwCHjVEF2c0yLvq1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.7.1", - "eslint-scope": "^8.0.2" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/utils": { - "version": "19.7.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.7.1.tgz", - "integrity": "sha512-iNfAwnQFBwNwh64BnTIdypFnBwyjjxtdEtAwNxM0u5ApX2MAu+koHdwGiXvyeJPq+g7stXwVpuvaAnHlxTzcig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.7.1" - }, - "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, - "node_modules/@angular/animations": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.2.14.tgz", - "integrity": "sha512-xhl8fLto5HHJdVj8Nb6EoBEiTAcXuWDYn1q5uHcGxyVH3kiwENWy/2OQXgCr2CuWo2e6hNUGzSLf/cjbsMNqEA==", - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "19.2.14", - "@angular/core": "19.2.14" - } - }, - "node_modules/@angular/build": { - "version": "19.2.15", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.2.15.tgz", - "integrity": "sha512-iE4fp4d5ALu702uoL6/YkjM2JlGEXZ5G+RVzq3W2jg/Ft6ISAQnRKB6mymtetDD6oD7i87e8uSu9kFVNBauX2w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1902.15", - "@babel/core": "7.26.10", - "@babel/helper-annotate-as-pure": "7.25.9", - "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-syntax-import-attributes": "7.26.0", - "@inquirer/confirm": "5.1.6", - "@vitejs/plugin-basic-ssl": "1.2.0", - "beasties": "0.3.2", - "browserslist": "^4.23.0", - "esbuild": "0.25.4", - "fast-glob": "3.3.3", - "https-proxy-agent": "7.0.6", - "istanbul-lib-instrument": "6.0.3", - "listr2": "8.2.5", - "magic-string": "0.30.17", - "mrmime": "2.0.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.2", - "piscina": "4.8.0", - "rollup": "4.34.8", - "sass": "1.85.0", - "semver": "7.7.1", - "source-map-support": "0.5.21", - "vite": "6.2.7", - "watchpack": "2.4.2" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "lmdb": "3.2.6" - }, - "peerDependencies": { - "@angular/compiler": "^19.0.0 || ^19.2.0-next.0", - "@angular/compiler-cli": "^19.0.0 || ^19.2.0-next.0", - "@angular/localize": "^19.0.0 || ^19.2.0-next.0", - "@angular/platform-server": "^19.0.0 || ^19.2.0-next.0", - "@angular/service-worker": "^19.0.0 || ^19.2.0-next.0", - "@angular/ssr": "^19.2.15", - "karma": "^6.4.0", - "less": "^4.2.0", - "ng-packagr": "^19.0.0 || ^19.2.0-next.0", - "postcss": "^8.4.0", - "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "typescript": ">=5.5 <5.9" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "@angular/ssr": { - "optional": true - }, - "karma": { - "optional": true - }, - "less": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular/build/node_modules/@angular-devkit/architect": { - "version": "0.1902.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.15.tgz", - "integrity": "sha512-RbqhStc6ZoRv57ZqLB36VOkBkAdU3nNezCvIs0AJV5V4+vLPMrb0hpIB0sF+9yMlMjWsolnRsj0/Fil+zQG3bw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@angular-devkit/core": "19.2.15", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/build/node_modules/@angular-devkit/core": { - "version": "19.2.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.15.tgz", - "integrity": "sha512-pU2RZYX6vhd7uLSdLwPnuBcr0mXJSjp3EgOXKsrlQFQZevc+Qs+2JdXgIElnOT/aDqtRtriDmLlSbtdE8n3ZbA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "8.17.1", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^4.0.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular/build/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@angular/build/node_modules/sass": { - "version": "1.85.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.85.0.tgz", - "integrity": "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, - "node_modules/@angular/build/node_modules/vite": { - "version": "6.2.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.7.tgz", - "integrity": "sha512-qg3LkeuinTrZoJHHF94coSaTfIPyBYoywp+ys4qu20oSJFbKMYoIJo0FWJT9q6Vp49l6z9IsJRbHdcGtiKbGoQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "esbuild": "^0.25.0", - "postcss": "^8.5.3", - "rollup": "^4.30.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/@angular/build/node_modules/vite/node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/@angular/cdk": { - "version": "19.2.18", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-19.2.18.tgz", - "integrity": "sha512-aGMHOYK/VV9PhxGTUDwiu/4ozoR/RKz8cimI+QjRxEBhzn4EPqjUDSganvlhmgS7cTN3+aqozdvF/GopMRJjLg==", - "license": "MIT", - "peer": true, - "dependencies": { - "parse5": "^7.1.2", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^19.0.0 || ^20.0.0", - "@angular/core": "^19.0.0 || ^20.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/cli": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.2.14.tgz", - "integrity": "sha512-jZvNHAwmyhgUqSIs6OW8YH1rX9XKytm4zPxJol1Xk56F8yAhnrUtukcOi3b7Dv19Z+9eXkwV/Db+2dGjWIE0DA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": "0.1902.14", - "@angular-devkit/core": "19.2.14", - "@angular-devkit/schematics": "19.2.14", - "@inquirer/prompts": "7.3.2", - "@listr2/prompt-adapter-inquirer": "2.0.18", - "@schematics/angular": "19.2.14", - "@yarnpkg/lockfile": "1.1.0", - "ini": "5.0.0", - "jsonc-parser": "3.3.1", - "listr2": "8.2.5", - "npm-package-arg": "12.0.2", - "npm-pick-manifest": "10.0.0", - "pacote": "20.0.0", - "resolve": "1.22.10", - "semver": "7.7.1", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/common": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.2.14.tgz", - "integrity": "sha512-NcNklcuyqaTjOVGf7aru8APX9mjsnZ01gFZrn47BxHozhaR0EMRrotYQTdi8YdVjPkeYFYanVntSLfhyobq/jg==", - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "19.2.14", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.14.tgz", - "integrity": "sha512-ZqJDYOdhgKpVGNq3+n/Gbxma8DVYElDsoRe0tvNtjkWBVdaOxdZZUqmJ3kdCBsqD/aqTRvRBu0KGo9s2fCChkA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - } - }, - "node_modules/@angular/compiler-cli": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.14.tgz", - "integrity": "sha512-e9/h86ETjoIK2yTLE9aUeMCKujdg/du2pq7run/aINjop4RtnNOw+ZlSTUa6R65lP5CVwDup1kPytpAoifw8cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "7.26.9", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^4.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.2.0", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/compiler": "19.2.14", - "typescript": ">=5.5 <5.9" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", - "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.9", - "@babel/parser": "^7.26.9", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.9", - "@babel/types": "^7.26.9", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@angular/core": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-19.2.14.tgz", - "integrity": "sha512-EVErpW9tGqJ/wNcAN3G/ErH8pHCJ8mM1E6bsJ8UJIpDTZkpqqYjBMtZS9YWH5n3KwUd1tAkAB2w8FK125AjDUQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.15.0" - } - }, - "node_modules/@angular/forms": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.2.14.tgz", - "integrity": "sha512-hWtDOj2B0AuRTf+nkMJeodnFpDpmEK9OIhIv1YxcRe73ooaxrIdjgugkElO8I9Tj0E4/7m117ezhWDUkbqm1zA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "19.2.14", - "@angular/core": "19.2.14", - "@angular/platform-browser": "19.2.14", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/language-service": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-19.2.14.tgz", - "integrity": "sha512-XgzZdBCe/obCrck5I6GIG4qSI9UGaOtbrvNuw0QAK0DySKaW5inRm6/QwCMPRmPkJBY0wLeYUVz//rtHpEjeTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.14.tgz", - "integrity": "sha512-hzkT5nmA64oVBQl6PRjdL4dIFT1n7lfM9rm5cAoS+6LUUKRgiE2d421Kpn/Hz3jaCJfo+calMIdtSMIfUJBmww==", - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/animations": "19.2.14", - "@angular/common": "19.2.14", - "@angular/core": "19.2.14" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.2.14.tgz", - "integrity": "sha512-Hfz0z1KDQmIdnFXVFCwCPykuIsHPkr1uW2aY396eARwZ6PK8i0Aadcm1ZOnpd3MR1bMyDrJo30VRS5kx89QWvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "19.2.14", - "@angular/compiler": "19.2.14", - "@angular/core": "19.2.14", - "@angular/platform-browser": "19.2.14" - } - }, - "node_modules/@angular/router": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-19.2.14.tgz", - "integrity": "sha512-cBTWY9Jx7YhbmDYDb7Hqz4Q7UNIMlKTkdKToJd2pbhIXyoS+kHVQrySmyca+jgvYMjWnIjsAEa3dpje12D4mFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "19.2.14", - "@angular/core": "19.2.14", - "@angular/platform-browser": "19.2.14", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@asamuzakjp/css-color": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", - "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "lru-cache": "^10.4.3" - } - }, - "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", - "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.10", - "@babel/types": "^7.26.10", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz", - "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.10", - "@babel/types": "^7.26.10", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", - "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.27.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", - "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "regexpu-core": "^6.2.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", - "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", - "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-wrap-function": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", - "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.4.tgz", - "integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", - "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", - "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", - "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", - "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", - "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", - "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", - "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", - "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.26.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", - "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.5.tgz", - "integrity": "sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", - "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", - "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.27.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", - "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz", - "integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", - "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", - "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", - "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", - "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", - "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", - "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", - "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", - "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", - "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", - "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", - "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", - "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", - "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", - "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", - "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.3.tgz", - "integrity": "sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.3", - "@babel/plugin-transform-parameters": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", - "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", - "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", - "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", - "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", - "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", - "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.5.tgz", - "integrity": "sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", - "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", - "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", - "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.26.5", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", - "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", - "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", - "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", - "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", - "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", - "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", - "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", - "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", - "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", - "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.26.8", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.26.5", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.26.3", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.26.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.26.3", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.26.8", - "@babel/plugin-transform-typeof-symbol": "^7.26.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", - "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.4", - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", - "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.27.5", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz", - "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@compodoc/compodoc": { - "version": "1.1.26", - "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.26.tgz", - "integrity": "sha512-CJkqTtdotxMA4SDyUx8J6Mrm3MMmcgFtfEViUnG9Of2CXhYiXIqNeD881+pxn0opmMC+VCTL0/SCD03tDYhWYA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/schematics": "18.2.8", - "@babel/core": "7.25.8", - "@babel/plugin-transform-private-methods": "7.25.7", - "@babel/preset-env": "7.25.8", - "@compodoc/live-server": "^1.2.3", - "@compodoc/ngd-transformer": "^2.1.3", - "bootstrap.native": "^5.0.13", - "cheerio": "1.0.0-rc.12", - "chokidar": "^4.0.1", - "colors": "1.4.0", - "commander": "^12.1.0", - "cosmiconfig": "^9.0.0", - "decache": "^4.6.2", - "es6-shim": "^0.35.8", - "fancy-log": "^2.0.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "glob": "^11.0.0", - "handlebars": "^4.7.8", - "html-entities": "^2.5.2", - "i18next": "^23.16.0", - "json5": "^2.2.3", - "lodash": "^4.17.21", - "loglevel": "^1.9.2", - "loglevel-plugin-prefix": "^0.8.4", - "lunr": "^2.3.9", - "marked": "7.0.3", - "minimist": "^1.2.8", - "neotraverse": "^0.6.18", - "opencollective-postinstall": "^2.0.3", - "os-name": "4.0.1", - "picocolors": "^1.1.0", - "prismjs": "^1.29.0", - "semver": "^7.6.3", - "svg-pan-zoom": "^3.6.1", - "tablesort": "^5.3.0", - "ts-morph": "^24.0.0", - "uuid": "^10.0.0", - "vis": "^4.21.0-EOL" - }, - "bin": { - "compodoc": "bin/index-cli.js" - }, - "engines": { - "node": ">= 16.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/@angular-devkit/schematics": { - "version": "18.2.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.8.tgz", - "integrity": "sha512-i/h2Oji5FhJMC7wDSnIl5XUe/qym+C1ZwScaATJwDyRLCUIynZkj5rLgdG/uK6l+H0PgvxigkF+akWpokkwW6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "18.2.8", - "jsonc-parser": "3.3.1", - "magic-string": "0.30.11", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "18.2.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.8.tgz", - "integrity": "sha512-4o2T6wsmXGE/v53+F8L7kGoN2+qzt03C9rtjLVQpOljzpJVttQ8bhvfWxyYLWwcl04RWqRa+82fpIZtBkOlZJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.17.1", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@compodoc/compodoc/node_modules/@angular-devkit/schematics/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/@compodoc/compodoc/node_modules/@babel/core": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz", - "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.25.7", - "@babel/generator": "^7.25.7", - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helpers": "^7.25.7", - "@babel/parser": "^7.25.8", - "@babel/template": "^7.25.7", - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.8", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@compodoc/compodoc/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@compodoc/compodoc/node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", - "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/@babel/preset-env": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.8.tgz", - "integrity": "sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.25.8", - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.25.7", - "@babel/plugin-syntax-import-attributes": "^7.25.7", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.8", - "@babel/plugin-transform-async-to-generator": "^7.25.7", - "@babel/plugin-transform-block-scoped-functions": "^7.25.7", - "@babel/plugin-transform-block-scoping": "^7.25.7", - "@babel/plugin-transform-class-properties": "^7.25.7", - "@babel/plugin-transform-class-static-block": "^7.25.8", - "@babel/plugin-transform-classes": "^7.25.7", - "@babel/plugin-transform-computed-properties": "^7.25.7", - "@babel/plugin-transform-destructuring": "^7.25.7", - "@babel/plugin-transform-dotall-regex": "^7.25.7", - "@babel/plugin-transform-duplicate-keys": "^7.25.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7", - "@babel/plugin-transform-dynamic-import": "^7.25.8", - "@babel/plugin-transform-exponentiation-operator": "^7.25.7", - "@babel/plugin-transform-export-namespace-from": "^7.25.8", - "@babel/plugin-transform-for-of": "^7.25.7", - "@babel/plugin-transform-function-name": "^7.25.7", - "@babel/plugin-transform-json-strings": "^7.25.8", - "@babel/plugin-transform-literals": "^7.25.7", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.8", - "@babel/plugin-transform-member-expression-literals": "^7.25.7", - "@babel/plugin-transform-modules-amd": "^7.25.7", - "@babel/plugin-transform-modules-commonjs": "^7.25.7", - "@babel/plugin-transform-modules-systemjs": "^7.25.7", - "@babel/plugin-transform-modules-umd": "^7.25.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7", - "@babel/plugin-transform-new-target": "^7.25.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.8", - "@babel/plugin-transform-numeric-separator": "^7.25.8", - "@babel/plugin-transform-object-rest-spread": "^7.25.8", - "@babel/plugin-transform-object-super": "^7.25.7", - "@babel/plugin-transform-optional-catch-binding": "^7.25.8", - "@babel/plugin-transform-optional-chaining": "^7.25.8", - "@babel/plugin-transform-parameters": "^7.25.7", - "@babel/plugin-transform-private-methods": "^7.25.7", - "@babel/plugin-transform-private-property-in-object": "^7.25.8", - "@babel/plugin-transform-property-literals": "^7.25.7", - "@babel/plugin-transform-regenerator": "^7.25.7", - "@babel/plugin-transform-reserved-words": "^7.25.7", - "@babel/plugin-transform-shorthand-properties": "^7.25.7", - "@babel/plugin-transform-spread": "^7.25.7", - "@babel/plugin-transform-sticky-regex": "^7.25.7", - "@babel/plugin-transform-template-literals": "^7.25.7", - "@babel/plugin-transform-typeof-symbol": "^7.25.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.7", - "@babel/plugin-transform-unicode-property-regex": "^7.25.7", - "@babel/plugin-transform-unicode-regex": "^7.25.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.7", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@compodoc/compodoc/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@compodoc/compodoc/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@compodoc/compodoc/node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@compodoc/live-server": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", - "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.2", - "colors": "1.4.0", - "connect": "^3.7.0", - "cors": "latest", - "event-stream": "4.0.1", - "faye-websocket": "0.11.x", - "http-auth": "4.1.9", - "http-auth-connect": "^1.0.5", - "morgan": "^1.10.0", - "object-assign": "latest", - "open": "8.4.0", - "proxy-middleware": "latest", - "send": "latest", - "serve-index": "^1.9.1" - }, - "bin": { - "live-server": "live-server.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@compodoc/live-server/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/@compodoc/live-server/node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@compodoc/live-server/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@compodoc/live-server/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@compodoc/live-server/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@compodoc/live-server/node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@compodoc/ngd-core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz", - "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.3", - "fancy-log": "^2.0.0", - "typescript": "^5.0.4" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@compodoc/ngd-transformer": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz", - "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@aduh95/viz.js": "3.4.0", - "@compodoc/ngd-core": "~2.1.1", - "dot": "^2.0.0-beta.1", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@csstools/color-helpers": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", - "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", - "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "@csstools/css-calc": "^2.1.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", - "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=14.17.0" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", - "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", - "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", - "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", - "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "9.28.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz", - "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@eslint/core": "^0.15.1", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@etchteam/storybook-addon-status": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@etchteam/storybook-addon-status/-/storybook-addon-status-5.0.0.tgz", - "integrity": "sha512-0Dg94xQ3T+rYTi6ekFkaH0XU9k0IQOqidiSmwN47Oqw4u1qjxK6m7wV3j7C0deLEuf4U4PrAcsDfDjyehKne2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", - "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", - "license": "MIT", - "peer": true, - "dependencies": { - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.3.tgz", - "integrity": "sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==", - "license": "MIT", - "peer": true, - "dependencies": { - "@floating-ui/core": "^1.7.3", - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", - "license": "MIT", - "peer": true - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@inquirer/checkbox": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.8.tgz", - "integrity": "sha512-d/QAsnwuHX2OPolxvYcgSj7A9DO9H6gVOy2DvBTx+P2LH2iRTo/RSGV3iwCzW024nP9hw98KIuDmdyhZQj1UQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/figures": "^1.0.12", - "@inquirer/type": "^3.0.7", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/confirm": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.6.tgz", - "integrity": "sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.7", - "@inquirer/type": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/core": { - "version": "10.1.13", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.13.tgz", - "integrity": "sha512-1viSxebkYN2nJULlzCxES6G9/stgHSepZ9LqqfdIGPHj5OHhiBUXVS0a6R0bEC2A+VL4D9w6QB66ebCr6HGllA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.12", - "@inquirer/type": "^3.0.7", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "mute-stream": "^2.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/editor": { - "version": "4.2.13", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.13.tgz", - "integrity": "sha512-WbicD9SUQt/K8O5Vyk9iC2ojq5RHoCLK6itpp2fHsWe44VxxcA9z3GTWlvjSTGmMQpZr+lbVmrxdHcumJoLbMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/type": "^3.0.7", - "external-editor": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/expand": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.15.tgz", - "integrity": "sha512-4Y+pbr/U9Qcvf+N/goHzPEXiHH8680lM3Dr3Y9h9FFw4gHS+zVpbj8LfbKWIb/jayIB4aSO4pWiBTrBYWkvi5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/type": "^3.0.7", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.12.tgz", - "integrity": "sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/input": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.12.tgz", - "integrity": "sha512-xJ6PFZpDjC+tC1P8ImGprgcsrzQRsUh9aH3IZixm1lAZFK49UGHxM3ltFfuInN2kPYNfyoPRh+tU4ftsjPLKqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/type": "^3.0.7" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/number": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.15.tgz", - "integrity": "sha512-xWg+iYfqdhRiM55MvqiTCleHzszpoigUpN5+t1OMcRkJrUrw7va3AzXaxvS+Ak7Gny0j2mFSTv2JJj8sMtbV2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/type": "^3.0.7" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/password": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.15.tgz", - "integrity": "sha512-75CT2p43DGEnfGTaqFpbDC2p2EEMrq0S+IRrf9iJvYreMy5mAWj087+mdKyLHapUEPLjN10mNvABpGbk8Wdraw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/type": "^3.0.7", - "ansi-escapes": "^4.3.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.3.2.tgz", - "integrity": "sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^4.1.2", - "@inquirer/confirm": "^5.1.6", - "@inquirer/editor": "^4.2.7", - "@inquirer/expand": "^4.0.9", - "@inquirer/input": "^4.1.6", - "@inquirer/number": "^3.0.9", - "@inquirer/password": "^4.0.9", - "@inquirer/rawlist": "^4.0.9", - "@inquirer/search": "^3.0.9", - "@inquirer/select": "^4.0.9" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/rawlist": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.3.tgz", - "integrity": "sha512-7XrV//6kwYumNDSsvJIPeAqa8+p7GJh7H5kRuxirct2cgOcSWwwNGoXDRgpNFbY/MG2vQ4ccIWCi8+IXXyFMZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/type": "^3.0.7", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/search": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.15.tgz", - "integrity": "sha512-YBMwPxYBrADqyvP4nNItpwkBnGGglAvCLVW8u4pRmmvOsHUtCAUIMbUrLX5B3tFL1/WsLGdQ2HNzkqswMs5Uaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/figures": "^1.0.12", - "@inquirer/type": "^3.0.7", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/select": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.2.3.tgz", - "integrity": "sha512-OAGhXU0Cvh0PhLz9xTF/kx6g6x+sP+PcyTiLvCrewI99P3BBeexD+VbuwkNDvqGkk3y2h5ZiWLeRP7BFlhkUDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/figures": "^1.0.12", - "@inquirer/type": "^3.0.7", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/type": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.7.tgz", - "integrity": "sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/core/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/reporters/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@jest/reporters/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/transform/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/buffers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.0.0.tgz", - "integrity": "sha512-NDigYR3PHqCnQLXYyoLbnEdzMMvzeiCWo1KOut7Q0CoIqg9tUAPKJ1iq/2nFhc5kZtexzutNY0LFjdwWL3Dw3Q==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/codegen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", - "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.8.0.tgz", - "integrity": "sha512-paJGjyBTRzfgkqhIyer992g21aSKuu9h//zGS7aqm795roD6VYFf6iU9NYua1Bndmh/NRPkjtm9+hEPkK0yZSw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@jsonjoy.com/base64": "^1.1.1", - "@jsonjoy.com/json-pointer": "^1.0.1", - "@jsonjoy.com/util": "^1.1.2", - "hyperdyperid": "^1.2.0", - "thingies": "^1.20.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/json-pointer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.1.tgz", - "integrity": "sha512-tJpwQfuBuxqZlyoJOSZcqf7OUmiYQ6MiPNmOv4KbZdXE/DdvBSSAwhos0zIlJU/AXxC8XpuO8p08bh2fIl+RKA==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@jsonjoy.com/util": "^1.3.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", - "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@listr2/prompt-adapter-inquirer": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.18.tgz", - "integrity": "sha512-0hz44rAcrphyXcA8IS7EJ2SCoaBZD2u5goE8S/e+q/DL+dOGpqpcLidVOFeLG3VgML62SXmfRLAhWt0zL1oW4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/type": "^1.5.5" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@inquirer/prompts": ">= 3 < 8" - } - }, - "node_modules/@listr2/prompt-adapter-inquirer/node_modules/@inquirer/type": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", - "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@listr2/prompt-adapter-inquirer/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.2.6.tgz", - "integrity": "sha512-yF/ih9EJJZc72psFQbwnn8mExIWfTnzWJg+N02hnpXtDPETYLmQswIMBn7+V88lfCaFrMozJsUvcEQIkEPU0Gg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@lmdb/lmdb-darwin-x64": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.2.6.tgz", - "integrity": "sha512-5BbCumsFLbCi586Bb1lTWQFkekdQUw8/t8cy++Uq251cl3hbDIGEwD9HAwh8H6IS2F6QA9KdKmO136LmipRNkg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@lmdb/lmdb-linux-arm": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.2.6.tgz", - "integrity": "sha512-+6XgLpMb7HBoWxXj+bLbiiB4s0mRRcDPElnRS3LpWRzdYSe+gFk5MT/4RrVNqd2MESUDmb53NUXw1+BP69bjiQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.2.6.tgz", - "integrity": "sha512-l5VmJamJ3nyMmeD1ANBQCQqy7do1ESaJQfKPSm2IG9/ADZryptTyCj8N6QaYgIWewqNUrcbdMkJajRQAt5Qjfg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@lmdb/lmdb-linux-x64": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.2.6.tgz", - "integrity": "sha512-nDYT8qN9si5+onHYYaI4DiauDMx24OAiuZAUsEqrDy+ja/3EbpXPX/VAkMV8AEaQhy3xc4dRC+KcYIvOFefJ4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@lmdb/lmdb-win32-x64": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.6.tgz", - "integrity": "sha512-XlqVtILonQnG+9fH2N3Aytria7P/1fwDgDhl29rde96uH2sLB8CHORIf2PfuLVzFQJ7Uqp8py9AYwr3ZUCFfWg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@mdx-js/react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", - "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", - "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", - "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", - "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", - "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", - "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", - "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@napi-rs/nice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.1.tgz", - "integrity": "sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "optionalDependencies": { - "@napi-rs/nice-android-arm-eabi": "1.0.1", - "@napi-rs/nice-android-arm64": "1.0.1", - "@napi-rs/nice-darwin-arm64": "1.0.1", - "@napi-rs/nice-darwin-x64": "1.0.1", - "@napi-rs/nice-freebsd-x64": "1.0.1", - "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", - "@napi-rs/nice-linux-arm64-gnu": "1.0.1", - "@napi-rs/nice-linux-arm64-musl": "1.0.1", - "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", - "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", - "@napi-rs/nice-linux-s390x-gnu": "1.0.1", - "@napi-rs/nice-linux-x64-gnu": "1.0.1", - "@napi-rs/nice-linux-x64-musl": "1.0.1", - "@napi-rs/nice-win32-arm64-msvc": "1.0.1", - "@napi-rs/nice-win32-ia32-msvc": "1.0.1", - "@napi-rs/nice-win32-x64-msvc": "1.0.1" - } - }, - "node_modules/@napi-rs/nice-darwin-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz", - "integrity": "sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@ngtools/webpack": { - "version": "19.2.15", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.2.15.tgz", - "integrity": "sha512-H37nop/wWMkSgoU2VvrMzanHePdLRRrX52nC5tT2ZhH3qP25+PrnMyw11PoLDLv3iWXC68uB1AiKNIT+jiQbuQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^19.0.0 || ^19.2.0-next.0", - "typescript": ">=5.5 <5.9", - "webpack": "^5.54.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", - "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", - "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/git": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", - "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^8.0.0", - "ini": "^5.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^10.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", - "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", - "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/package-json": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", - "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^8.0.0", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/package-json/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz", - "integrity": "sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/redact": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", - "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", - "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "node-gyp": "^11.0.0", - "proc-log": "^5.0.0", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/@parcel/watcher/node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz", - "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", - "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.1.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", - "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz", - "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz", - "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", - "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz", - "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz", - "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz", - "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz", - "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz", - "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz", - "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz", - "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz", - "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", - "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz", - "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz", - "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz", - "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz", - "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz", - "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz", - "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz", - "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz", - "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz", - "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@rollup/wasm-node": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.41.1.tgz", - "integrity": "sha512-70qfem+U3hAgwNgOlnUQiIdfKHLELUxsEWbFWg3aErPUvsyXYF1HALJBwoDgMUhRWyn+SqWVneDTnO/Kbey9hg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.7" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/@schematics/angular": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.2.14.tgz", - "integrity": "sha512-p/jvMwth67g7tOrziTx+yWRagIPtjx21TF2uU2Pv5bqTY+JjRTczJs3yHPmVpzJN+ptmw47K4/NeLJmVUGuBgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "19.2.14", - "@angular-devkit/schematics": "19.2.14", - "jsonc-parser": "3.3.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@sigstore/bundle": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", - "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.4.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", - "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.2.tgz", - "integrity": "sha512-F2ye+n1INNhqT0MW+LfUEvTUPc/nS70vICJcxorKl7/gV9CO39+EDCw+qHNKEqvsDWk++yGVKCbzK1qLPvmC8g==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", - "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0", - "make-fetch-happen": "^14.0.2", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", - "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.4.1", - "tuf-js": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/verify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", - "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@storybook/addon-a11y": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.6.14.tgz", - "integrity": "sha512-fozv6enO9IgpWq2U8qqS8MZ21Nt+MVHiRQe3CjnCpBOejTyo/ATm690PeYYRVHVG6M/15TVePb0h3ngKQbrrzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addon-highlight": "8.6.14", - "@storybook/global": "^5.0.0", - "@storybook/test": "8.6.14", - "axe-core": "^4.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/addon-actions": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.6.14.tgz", - "integrity": "sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "@types/uuid": "^9.0.1", - "dequal": "^2.0.2", - "polished": "^4.2.2", - "uuid": "^9.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/addon-actions/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@storybook/addon-backgrounds": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.6.14.tgz", - "integrity": "sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/addon-controls": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.6.14.tgz", - "integrity": "sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "dequal": "^2.0.2", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/addon-docs": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.6.14.tgz", - "integrity": "sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.6.14", - "@storybook/csf-plugin": "8.6.14", - "@storybook/react-dom-shim": "8.6.14", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/addon-essentials": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.6.14.tgz", - "integrity": "sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addon-actions": "8.6.14", - "@storybook/addon-backgrounds": "8.6.14", - "@storybook/addon-controls": "8.6.14", - "@storybook/addon-docs": "8.6.14", - "@storybook/addon-highlight": "8.6.14", - "@storybook/addon-measure": "8.6.14", - "@storybook/addon-outline": "8.6.14", - "@storybook/addon-toolbars": "8.6.14", - "@storybook/addon-viewport": "8.6.14", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/addon-highlight": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.6.14.tgz", - "integrity": "sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/addon-interactions": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.6.14.tgz", - "integrity": "sha512-8VmElhm2XOjh22l/dO4UmXxNOolGhNiSpBcls2pqWSraVh4a670EyYBZsHpkXqfNHo2YgKyZN3C91+9zfH79qQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.6.14", - "@storybook/test": "8.6.14", - "polished": "^4.2.2", - "ts-dedent": "^2.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/addon-measure": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.6.14.tgz", - "integrity": "sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/addon-onboarding": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-onboarding/-/addon-onboarding-8.6.14.tgz", - "integrity": "sha512-bHdHiGJFigVcSzMIsNLHY5IODZHr+nKwyz5/QOZLMkLcGH2IaUbOJfm4RyGOaTTPsUtAKbdsVXNEG3Otf+qO9A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/addon-outline": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.6.14.tgz", - "integrity": "sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/addon-toolbars": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.6.14.tgz", - "integrity": "sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/addon-viewport": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.6.14.tgz", - "integrity": "sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/angular": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/angular/-/angular-8.6.14.tgz", - "integrity": "sha512-H266c6lSx+sXjXJz+D1DFNlV39lcUfTbUFb5yJ7LmsAYqAQYOzyyxkWu885OZpxhf8g5QTJkoTDu9ffZPLz01w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/builder-webpack5": "8.6.14", - "@storybook/components": "8.6.14", - "@storybook/core-webpack": "8.6.14", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "8.6.14", - "@storybook/preview-api": "8.6.14", - "@storybook/theming": "8.6.14", - "@types/react": "^18.0.37", - "@types/react-dom": "^18.0.11", - "@types/semver": "^7.3.4", - "@types/webpack-env": "^1.18.0", - "fd-package-json": "^1.2.0", - "find-up": "^5.0.0", - "semver": "^7.3.7", - "telejson": "^7.2.0", - "ts-dedent": "^2.0.0", - "tsconfig-paths-webpack-plugin": "^4.0.1", - "util-deprecate": "^1.0.2", - "webpack": "5" - }, - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "@angular-devkit/architect": ">=0.1500.0 < 0.2000.0", - "@angular-devkit/build-angular": ">=15.0.0 < 20.0.0", - "@angular-devkit/core": ">=15.0.0 < 20.0.0", - "@angular/animations": ">=15.0.0 < 20.0.0", - "@angular/cli": ">=15.0.0 < 20.0.0", - "@angular/common": ">=15.0.0 < 20.0.0", - "@angular/compiler": ">=15.0.0 < 20.0.0", - "@angular/compiler-cli": ">=15.0.0 < 20.0.0", - "@angular/core": ">=15.0.0 < 20.0.0", - "@angular/forms": ">=15.0.0 < 20.0.0", - "@angular/platform-browser": ">=15.0.0 < 20.0.0", - "@angular/platform-browser-dynamic": ">=15.0.0 < 20.0.0", - "rxjs": "^6.0.0 || ^7.4.0", - "storybook": "^8.6.14", - "typescript": "^4.0.0 || ^5.0.0", - "zone.js": ">= 0.11.1 < 1.0.0" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - }, - "@angular/cli": { - "optional": true - }, - "zone.js": { - "optional": true - } - } - }, - "node_modules/@storybook/blocks": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.6.14.tgz", - "integrity": "sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/icons": "^1.2.12", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^8.6.14" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/builder-webpack5": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.6.14.tgz", - "integrity": "sha512-YZYAqc6NBKoMTKZpjxnkMch6zDtMkBZdS/yaji1+wJX2QPFBwTbSh7SpeBxDp1S11gXSAJ4f1btUWeqSqo8nJA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/core-webpack": "8.6.14", - "@types/semver": "^7.3.4", - "browser-assert": "^1.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "cjs-module-lexer": "^1.2.3", - "constants-browserify": "^1.0.0", - "css-loader": "^6.7.1", - "es-module-lexer": "^1.5.0", - "fork-ts-checker-webpack-plugin": "^8.0.0", - "html-webpack-plugin": "^5.5.0", - "magic-string": "^0.30.5", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "semver": "^7.3.7", - "style-loader": "^3.3.1", - "terser-webpack-plugin": "^5.3.1", - "ts-dedent": "^2.0.0", - "url": "^0.11.0", - "util": "^0.12.4", - "util-deprecate": "^1.0.2", - "webpack": "5", - "webpack-dev-middleware": "^6.1.2", - "webpack-hot-middleware": "^2.25.1", - "webpack-virtual-modules": "^0.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/webpack-dev-middleware": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.3.tgz", - "integrity": "sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/@storybook/components": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.6.14.tgz", - "integrity": "sha512-HNR2mC5I4Z5ek8kTrVZlIY/B8gJGs5b3XdZPBPBopTIN6U/YHXiDyOjY3JlaS4fSG1fVhp/Qp1TpMn1w/9m1pw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@storybook/core": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.6.14.tgz", - "integrity": "sha512-1P/w4FSNRqP8j3JQBOi3yGt8PVOgSRbP66Ok520T78eJBeqx9ukCfl912PQZ7SPbW3TIunBwLXMZOjZwBB/JmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/theming": "8.6.14", - "better-opn": "^3.0.2", - "browser-assert": "^1.2.1", - "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0", - "esbuild-register": "^3.5.0", - "jsdoc-type-pratt-parser": "^4.0.0", - "process": "^0.11.10", - "recast": "^0.23.5", - "semver": "^7.6.2", - "util": "^0.12.5", - "ws": "^8.2.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "prettier": "^2 || ^3" - }, - "peerDependenciesMeta": { - "prettier": { - "optional": true - } - } - }, - "node_modules/@storybook/core-webpack": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.6.14.tgz", - "integrity": "sha512-iG7r8osNKabSGBbuJuSeMWKbU+ilt5PvzTYkClcYaagla/DliXkXvfywA6jOugVk/Cpx+c6tVKlPfjLcaQHwmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/csf-plugin": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.6.14.tgz", - "integrity": "sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "unplugin": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/global": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", - "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/icons": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.4.0.tgz", - "integrity": "sha512-Td73IeJxOyalzvjQL+JXx72jlIYHgs+REaHiREOqfpo3A2AYYG71AUbcv+lg7mEDIweKVCxsMQ0UKo634c8XeA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - }, - "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" - } - }, - "node_modules/@storybook/instrumenter": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.6.14.tgz", - "integrity": "sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "@vitest/utils": "^2.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/manager-api": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.6.14.tgz", - "integrity": "sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@storybook/preview-api": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.6.14.tgz", - "integrity": "sha512-2GhcCd4dNMrnD7eooEfvbfL4I83qAqEyO0CO7JQAmIO6Rxb9BsOLLI/GD5HkvQB73ArTJ+PT50rfaO820IExOQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@storybook/react-dom-shim": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.6.14.tgz", - "integrity": "sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "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", - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/test": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.6.14.tgz", - "integrity": "sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.6.14", - "@testing-library/dom": "10.4.0", - "@testing-library/jest-dom": "6.5.0", - "@testing-library/user-event": "14.5.2", - "@vitest/expect": "2.0.5", - "@vitest/spy": "2.0.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.14" - } - }, - "node_modules/@storybook/theming": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.6.14.tgz", - "integrity": "sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@tehik-ee/tedi-core": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@tehik-ee/tedi-core/-/tedi-core-1.15.5.tgz", - "integrity": "sha512-f2Qqa2lS6ve/Cam1oTI4yGvr0MeLWzZpokqskqEc8y3VeGrzdSVfxPieQyfzxxF2LauNtMky07QwVSLFTMPaRg==" - }, - "node_modules/@testing-library/angular": { - "version": "17.3.7", - "resolved": "https://registry.npmjs.org/@testing-library/angular/-/angular-17.3.7.tgz", - "integrity": "sha512-99Wf/06CCyBP3rmIu+WacUTGZMDKTQR12phe1lUMrknwxHLFUf5jn230L/mW4XIZ+ThDJ/4D6OzhVskbOYDqig==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": ">= 17.0.0", - "@angular/common": ">= 17.0.0", - "@angular/core": ">= 17.0.0", - "@angular/platform-browser": ">= 17.0.0", - "@angular/router": ">= 17.0.0", - "@testing-library/dom": "^10.0.0" - } - }, - "node_modules/@testing-library/dom": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", - "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.3.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@testing-library/dom/node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/@testing-library/jest-dom": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", - "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@adobe/css-tools": "^4.4.0", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.21", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@testing-library/user-event": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", - "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "peerDependencies": { - "@testing-library/dom": ">=7.21.4" - } - }, - "node_modules/@thednp/event-listener": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@thednp/event-listener/-/event-listener-2.0.10.tgz", - "integrity": "sha512-TH7YVKmoKg6GBLqZB+ETXObofcqJ/Tp5ycheolvYZMjLbMpzYf6MmOWTcBtx8+zrhWy8deV0hYkPvDFioDXdVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16", - "pnpm": ">=8.6.0" - } - }, - "node_modules/@thednp/position-observer": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@thednp/position-observer/-/position-observer-1.0.8.tgz", - "integrity": "sha512-NZ1cKuGBwWXZjpJvmipet8GyYnV+lUyOyiyzfuzO2Y5lqAPvep0P2QHkKMqe6V5+yEqwhRLhKoQO23z5PPgZ1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@thednp/shorty": "^2.0.11" - }, - "engines": { - "node": ">=16", - "pnpm": ">=8.6.0" - } - }, - "node_modules/@thednp/shorty": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@thednp/shorty/-/shorty-2.0.11.tgz", - "integrity": "sha512-D+rLHt1l7c608yCuzXYJ75aDNWeMVbor+m1HO/XibhiWRbCpD8r6TUv3ayJI+feVfCnBNfrH+p6LSDn9l99uBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16", - "pnpm": ">=8.6.0" - } - }, - "node_modules/@ts-morph/common": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.25.0.tgz", - "integrity": "sha512-kMnZz+vGGHi4GoHnLmMhGNjm44kGtKUXGnOvrKmMwAuvNjM/PgKVGfUnL7IDvK7Jb2QQ82jq3Zmp04Gy+r3Dkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimatch": "^9.0.4", - "path-browserify": "^1.0.1", - "tinyglobby": "^0.2.9" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", - "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@types/aria-query": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", - "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.14", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", - "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/jest/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@types/jest/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/node": { - "version": "22.15.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.29.tgz", - "integrity": "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.13.tgz", - "integrity": "sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/react": { - "version": "18.3.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", - "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", - "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^18.0.0" - } - }, - "node_modules/@types/retry": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", - "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/semver": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", - "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/webpack-env": { - "version": "1.18.8", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.8.tgz", - "integrity": "sha512-G9eAoJRMLjcvN4I08wB5I7YofOb/kaJNd5uoCMX+LbKXTPCF+ZIHuqTnFaK9Jz1rgs035f9JUPUhNFtqgucy/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.1.tgz", - "integrity": "sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/type-utils": "8.33.1", - "@typescript-eslint/utils": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.33.1", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", - "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/typescript-estree": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", - "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.33.1", - "@typescript-eslint/types": "^8.33.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", - "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", - "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.1.tgz", - "integrity": "sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "8.33.1", - "@typescript-eslint/utils": "8.33.1", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", - "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", - "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.33.1", - "@typescript-eslint/tsconfig-utils": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.1.tgz", - "integrity": "sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/typescript-estree": "8.33.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", - "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.33.1", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.2.0.tgz", - "integrity": "sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=14.21.3" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/@vitest/expect": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", - "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "2.0.5", - "@vitest/utils": "2.0.5", - "chai": "^5.1.1", - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/expect/node_modules/@vitest/pretty-format": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", - "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/expect/node_modules/@vitest/utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", - "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "2.0.5", - "estree-walker": "^3.0.3", - "loupe": "^3.1.1", - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/expect/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/@vitest/pretty-format": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", - "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", - "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyspy": "^3.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", - "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "2.1.9", - "loupe": "^3.1.2", - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/abbrev": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", - "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/angular-eslint": { - "version": "19.7.1", - "resolved": "https://registry.npmjs.org/angular-eslint/-/angular-eslint-19.7.1.tgz", - "integrity": "sha512-xSjDf3Tdc7gA99Uk4sOfP/3I2jvKlCvuFnqWxw2mzByVNAgT9QUTY51+Z0jFT8JOnsN+UwE3fDPOHuSu183Mew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": ">= 19.0.0 < 20.0.0", - "@angular-devkit/schematics": ">= 19.0.0 < 20.0.0", - "@angular-eslint/builder": "19.7.1", - "@angular-eslint/eslint-plugin": "19.7.1", - "@angular-eslint/eslint-plugin-template": "19.7.1", - "@angular-eslint/schematics": "19.7.1", - "@angular-eslint/template-parser": "19.7.1", - "@typescript-eslint/types": "^8.0.0", - "@typescript-eslint/utils": "^8.0.0" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*", - "typescript-eslint": "^8.0.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/apache-crypt": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", - "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", - "dev": true, - "license": "MIT", - "dependencies": { - "unix-crypt-td-js": "^1.1.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/apache-md5": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", - "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/ast-types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", - "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", - "dev": true, - "license": "MPL-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", - "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.4", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", - "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.4" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true, - "license": "MIT" - }, - "node_modules/bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/beasties": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.3.2.tgz", - "integrity": "sha512-p4AF8uYzm9Fwu8m/hSVTCPXrRBPmB34hQpHsec2KOaR9CZmgoU8IOv4Cvwq4hgz2p4hLMNbsdNl5XeA6XbAQwA==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "htmlparser2": "^10.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.49", - "postcss-media-query-parser": "^0.2.3" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "open": "^8.0.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/better-opn/node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/better-opn/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/better-opn/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/better-opn/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/body-parser/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/bonjour-service": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" - }, - "node_modules/bootstrap.native": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/bootstrap.native/-/bootstrap.native-5.1.4.tgz", - "integrity": "sha512-GGplCHRSAaFNVinbWU9/CJbhO0fP3fHZgshagd1obAkg+8cgcXg19XrOrsUUuVcZFfjenhCaw+3uV2z1EilWsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@thednp/event-listener": "^2.0.10", - "@thednp/position-observer": "^1.0.8", - "@thednp/shorty": "^2.0.11" - }, - "engines": { - "node": ">=16", - "pnpm": ">=8.6.0" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-assert": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", - "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", - "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001718", - "electron-to-chromium": "^1.5.160", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", - "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^4.0.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^12.0.0", - "tar": "^7.4.3", - "unique-filename": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/cacache/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/cacache/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001721", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz", - "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/chai": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", - "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cheerio/node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chokidar/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/chromatic": { - "version": "11.29.0", - "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-11.29.0.tgz", - "integrity": "sha512-yisBlntp9hHVj19lIQdpTlcYIXuU9H/DbFuu6tyWHmj6hWT2EtukCCcxYXL78XdQt1vm2GfIrtgtKpj/Rzmo4A==", - "dev": true, - "license": "MIT", - "bin": { - "chroma": "dist/bin.js", - "chromatic": "dist/bin.js", - "chromatic-cli": "dist/bin.js" - }, - "peerDependencies": { - "@chromatic-com/cypress": "^0.*.* || ^1.0.0", - "@chromatic-com/playwright": "^0.*.* || ^1.0.0" - }, - "peerDependenciesMeta": { - "@chromatic-com/cypress": { - "optional": true - }, - "@chromatic-com/playwright": { - "optional": true - } - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-block-writer": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", - "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", - "dev": true, - "license": "MIT" - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, - "license": "MIT" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", - "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.1", - "globby": "^14.0.0", - "normalize-path": "^3.0.0", - "schema-utils": "^4.2.0", - "serialize-javascript": "^6.0.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.42.0.tgz", - "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", - "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.27.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssstyle": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz", - "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@asamuzakjp/css-color": "^3.1.2", - "rrweb-cssom": "^0.8.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decache": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", - "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsite": "^1.0.0" - } - }, - "node_modules/decimal.js": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", - "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", - "dev": true, - "license": "MIT" - }, - "node_modules/dedent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dependency-graph": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", - "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true, - "license": "MIT" - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz", - "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true, - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.164", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.164.tgz", - "integrity": "sha512-TXBrF2aZenRjY3wbj5Yc0mZn43lMiSHNkzwPkIxx+vWUB35Kf8Gm/uOYmOJFNQ7SUwWAinbfxX73ANIud65wSA==", - "dev": true, - "license": "ISC" - }, - "node_modules/emitter-component": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/emitter-component/-/emitter-component-1.1.2.tgz", - "integrity": "sha512-QdXO3nXOzZB4pAjM0n6ZE+R9/+kPpECA/XSELIcc54NeYVnBqIk+4DFiBgK+8QbV3mdvTG6nedl7dTYgO+5wDw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es6-shim": { - "version": "0.35.8", - "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.8.tgz", - "integrity": "sha512-Twf7I2v4/1tLoIXMT8HlqaBSS5H2wQTs2wx3MNYCI8K1R1/clXyCazrcVCPm/FuO9cyV8+leEaZOWD5C253NDg==", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", - "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.4", - "@esbuild/android-arm": "0.25.4", - "@esbuild/android-arm64": "0.25.4", - "@esbuild/android-x64": "0.25.4", - "@esbuild/darwin-arm64": "0.25.4", - "@esbuild/darwin-x64": "0.25.4", - "@esbuild/freebsd-arm64": "0.25.4", - "@esbuild/freebsd-x64": "0.25.4", - "@esbuild/linux-arm": "0.25.4", - "@esbuild/linux-arm64": "0.25.4", - "@esbuild/linux-ia32": "0.25.4", - "@esbuild/linux-loong64": "0.25.4", - "@esbuild/linux-mips64el": "0.25.4", - "@esbuild/linux-ppc64": "0.25.4", - "@esbuild/linux-riscv64": "0.25.4", - "@esbuild/linux-s390x": "0.25.4", - "@esbuild/linux-x64": "0.25.4", - "@esbuild/netbsd-arm64": "0.25.4", - "@esbuild/netbsd-x64": "0.25.4", - "@esbuild/openbsd-arm64": "0.25.4", - "@esbuild/openbsd-x64": "0.25.4", - "@esbuild/sunos-x64": "0.25.4", - "@esbuild/win32-arm64": "0.25.4", - "@esbuild/win32-ia32": "0.25.4", - "@esbuild/win32-x64": "0.25.4" - } - }, - "node_modules/esbuild-register": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", - "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "peerDependencies": { - "esbuild": ">=0.12 <1" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.25.4.tgz", - "integrity": "sha512-2HlCS6rNvKWaSKhWaG/YIyRsTsL3gUrMP2ToZMBIjw9LM7vVcIs+rz8kE2vExvTJgvM8OKPqNpcHawY/BQc/qQ==", - "dev": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.28.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz", - "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.0", - "@eslint/config-helpers": "^0.2.1", - "@eslint/core": "^0.14.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.28.0", - "@eslint/plugin-kit": "^0.3.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.3.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz", - "integrity": "sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.11.7" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "acorn": "^8.14.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", - "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/express/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/express/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/express/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fancy-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", - "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-support": "^1.1.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fd-package-json": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fd-package-json/-/fd-package-json-1.2.0.tgz", - "integrity": "sha512-45LSPmWf+gC5tdCQMNH4s9Sr00bIkiD9aN7dc5hqkrEw1geRYyDQS1v1oMHAW3ysfxfndqGsrDREHHjNNbKUfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "walk-up-path": "^3.0.1" - } - }, - "node_modules/fdir": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", - "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz", - "integrity": "sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">=12.13.0", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "typescript": ">3.6.0", - "webpack": "^5.11.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "dev": true, - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", - "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", - "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/hammerjs": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", - "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "dev": true, - "license": "(Apache-2.0 OR MPL-1.1)" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hosted-git-info": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", - "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^3.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/html-entities": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", - "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", - "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/htmlparser2": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", - "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.1", - "entities": "^6.0.0" - } - }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/http-auth": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", - "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "apache-crypt": "^1.1.2", - "apache-md5": "^1.0.6", - "bcryptjs": "^2.4.3", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-auth-connect": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", - "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/http-auth/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", - "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-middleware": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", - "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/http-proxy": "^1.17.15", - "debug": "^4.3.6", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.3", - "is-plain-object": "^5.0.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/hyperdyperid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", - "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.18" - } - }, - "node_modules/i18next": { - "version": "23.16.8", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.8.tgz", - "integrity": "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.2" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "dev": true, - "license": "MIT", - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", - "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.2.tgz", - "integrity": "sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", - "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/injection-js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.5.0.tgz", - "integrity": "sha512-UpY2ONt4xbht4GhSqQ2zMJ1rBIQq4uOY+DlR6aOeYyqK7xadXt7UQbJIyxmgk288bPMkIZKjViieHm0O0i72Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-network-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", - "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-circus/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-config/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jest-config/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-config/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-config/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-environment-jsdom": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", - "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0", - "jsdom": "^20.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-leak-detector/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-leak-detector/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-preset-angular": { - "version": "14.6.0", - "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-14.6.0.tgz", - "integrity": "sha512-LGSKLCsUhtrs2dw6f7ega/HOS8/Ni/1gV+oXmxPHmJDLHFpM6cI78Monmz8Z1P87a/A4OwnKilxgPRr+6Pzmgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "^0.2.6", - "esbuild-wasm": ">=0.15.13", - "jest-environment-jsdom": "^29.7.0", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0", - "ts-jest": "^29.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "optionalDependencies": { - "esbuild": ">=0.15.13" - }, - "peerDependencies": { - "@angular/compiler-cli": ">=15.0.0 <21.0.0", - "@angular/core": ">=15.0.0 <21.0.0", - "@angular/platform-browser-dynamic": ">=15.0.0 <21.0.0", - "jest": "^29.0.0", - "jsdom": ">=20.0.0", - "typescript": ">=4.8" - }, - "peerDependenciesMeta": { - "jsdom": { - "optional": true - } - } - }, - "node_modules/jest-preset-angular/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-preset-angular/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-runtime/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jest-runtime/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", - "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdom": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz", - "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssstyle": "^4.2.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.1", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.6", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.16", - "parse5": "^7.2.1", - "rrweb-cssom": "^0.8.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^5.0.0", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.1.0", - "ws": "^8.18.0", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^3.0.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", - "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/keycharm": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/keycharm/-/keycharm-0.2.0.tgz", - "integrity": "sha512-i/XBRTiLqRConPKioy2oq45vbv04e8x59b0mnsIRQM+7Ec/8BC7UcL5pnC4FMeGb8KwG7q4wOMw7CtNZf5tiIg==", - "dev": true - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/launch-editor": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.0.tgz", - "integrity": "sha512-R/PIF14L6e2eHkhvQPu7jDRCr0msfCYCxbYiLgkkAGi0dVPWuM+RrsPu0a5dpuNe0KWGL3jpAkOlv53xGfPheQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "picocolors": "^1.1.1", - "shell-quote": "^1.8.3" - } - }, - "node_modules/less": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/less/-/less-4.2.2.tgz", - "integrity": "sha512-tkuLHQlvWUTeQ3doAqnHbNn8T6WX1KA8yvbKG9x4VtKtIjHsVKQZCH11zRgAfbDAXC2UNIg/K9BYAAcEzUIrNg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz", - "integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", - "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", - "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^4.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/lmdb": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.2.6.tgz", - "integrity": "sha512-SuHqzPl7mYStna8WRotY8XX/EUZBjjv3QyKIByeCLFfC9uXT/OIHByEcA07PzbMfQAM0KYJtLgtpMRlIe5dErQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "msgpackr": "^1.11.2", - "node-addon-api": "^6.1.0", - "node-gyp-build-optional-packages": "5.2.2", - "ordered-binary": "^1.5.3", - "weak-lru-cache": "^1.2.2" - }, - "bin": { - "download-lmdb-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@lmdb/lmdb-darwin-arm64": "3.2.6", - "@lmdb/lmdb-darwin-x64": "3.2.6", - "@lmdb/lmdb-linux-arm": "3.2.6", - "@lmdb/lmdb-linux-arm64": "3.2.6", - "@lmdb/lmdb-linux-x64": "3.2.6", - "@lmdb/lmdb-win32-x64": "3.2.6" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/loglevel": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", - "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/loglevel-plugin-prefix": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/loupe": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", - "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", - "dev": true, - "license": "MIT" - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "dev": true, - "license": "MIT", - "bin": { - "lz-string": "bin/bin.js" - } - }, - "node_modules/macos-release": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", - "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", - "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^3.0.0", - "cacache": "^19.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-or-similar": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", - "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", - "dev": true, - "license": "MIT" - }, - "node_modules/map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/marked": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-7.0.3.tgz", - "integrity": "sha512-ev2uM40p0zQ/GbvqotfKcSWEa59fJwluGZj5dcaUOwDRrB1F3dncdXy8NWUApk4fi8atU3kTBOwjyjZ0ud0dxw==", - "dev": true, - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 16" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/memoizerific": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", - "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", - "dev": true, - "license": "MIT", - "dependencies": { - "map-or-similar": "^1.5.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-fetch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", - "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/morgan": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", - "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.1.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/morgan/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/morgan/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/msgpackr": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.5.tgz", - "integrity": "sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "optionalDependencies": { - "msgpackr-extract": "^3.0.2" - } - }, - "node_modules/msgpackr-extract": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", - "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "node-gyp-build-optional-packages": "5.2.2" - }, - "bin": { - "download-msgpackr-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" - } - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/needle": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", - "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/neotraverse": { - "version": "0.6.18", - "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", - "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/ng-packagr": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-19.2.2.tgz", - "integrity": "sha512-dFuwFsDJMBSd1YtmLLcX5bNNUCQUlRqgf34aXA+79PmkOP+0eF8GP2949wq3+jMjmFTNm80Oo8IUYiSLwklKCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/plugin-json": "^6.1.0", - "@rollup/wasm-node": "^4.24.0", - "ajv": "^8.17.1", - "ansi-colors": "^4.1.3", - "browserslist": "^4.22.1", - "chokidar": "^4.0.1", - "commander": "^13.0.0", - "convert-source-map": "^2.0.0", - "dependency-graph": "^1.0.0", - "esbuild": "^0.25.0", - "fast-glob": "^3.3.2", - "find-cache-dir": "^3.3.2", - "injection-js": "^2.4.0", - "jsonc-parser": "^3.3.1", - "less": "^4.2.0", - "ora": "^5.1.0", - "piscina": "^4.7.0", - "postcss": "^8.4.47", - "rxjs": "^7.8.1", - "sass": "^1.81.0" - }, - "bin": { - "ng-packagr": "cli/main.js" - }, - "engines": { - "node": "^18.19.1 || >=20.11.1" - }, - "optionalDependencies": { - "rollup": "^4.24.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^19.0.0 || ^19.1.0-next.0 || ^19.2.0-next.0", - "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "tslib": "^2.3.0", - "typescript": ">=5.5 <5.9" - }, - "peerDependenciesMeta": { - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/ng-packagr/node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/ng-packagr/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ng-packagr/node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/ng-packagr/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ng-packagr/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ng-packagr/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ng-packagr/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ng-packagr/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ng-packagr/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ng-packagr/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/ngx-float-ui": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/ngx-float-ui/-/ngx-float-ui-19.0.1.tgz", - "integrity": "sha512-ST5fLsByQoT65CXiPFhnncQZjai8rCNqHC9rNDUh722a/UoummJaFGIC/SIM8tMkE6OK/sVOFqfskMre+7Nh8Q==", - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@floating-ui/dom": "^1.6.12", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^19.0.0", - "@angular/core": "^19.0.0", - "rxjs": "^7.4.0" - } - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", - "peer": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.2.0.tgz", - "integrity": "sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^14.0.3", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "tar": "^7.4.3", - "tinyglobby": "^0.2.12", - "which": "^5.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/node-gyp-build-optional-packages": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", - "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "detect-libc": "^2.0.1" - }, - "bin": { - "node-gyp-build-optional-packages": "bin.js", - "node-gyp-build-optional-packages-optional": "optional.js", - "node-gyp-build-optional-packages-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/node-gyp/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/node-gyp/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", - "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^3.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", - "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-install-checks": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.1.tgz", - "integrity": "sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", - "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-package-arg": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", - "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-packlist": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-9.0.0.tgz", - "integrity": "sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^7.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", - "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^7.1.0", - "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^12.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", - "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^14.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^12.0.0", - "proc-log": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", - "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", - "dev": true, - "license": "MIT" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true, - "license": "MIT", - "bin": { - "opencollective-postinstall": "index.js" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ordered-binary": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.0.tgz", - "integrity": "sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/os-name": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", - "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "macos-release": "^2.5.0", - "windows-release": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", - "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/retry": "0.12.2", - "is-network-error": "^1.0.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pacote": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-20.0.0.tgz", - "integrity": "sha512-pRjC5UFwZCgx9kUFDVM9YEahv4guZ1nSLqwmWiLUnDbGsjs+U5w7z6Uc8HNR1a6x8qnu5y9xtGE6D1uAuYz+0A==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^9.0.0", - "cacache": "^19.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^12.0.0", - "npm-packlist": "^9.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^3.0.0", - "ssri": "^12.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-json/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", - "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", - "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", - "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/path-type": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pathval": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", - "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.16" - } - }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "dev": true, - "license": [ - "MIT", - "Apache2" - ], - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/piscina": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.8.0.tgz", - "integrity": "sha512-EZJb+ZxDrQf3dihsUL7p42pjNyrNIFJCrRHPMgxu/svsj+P3xS3fuEWp7k2+rfsavfl1N0G29b1HGs7J0m8rZA==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "@napi-rs/nice": "^1.0.1" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/pkg-dir/node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/polished": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", - "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.17.8" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz", - "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", - "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cosmiconfig": "^9.0.0", - "jiti": "^1.20.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", - "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", - "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", - "dev": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/proc-log": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", - "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/propagating-hammerjs": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/propagating-hammerjs/-/propagating-hammerjs-1.5.0.tgz", - "integrity": "sha512-3PUXWmomwutoZfydC+lJwK1bKCh6sK6jZGB31RUX6+4EXzsbkDZrK4/sVR7gBrvJaEIwpTVyxQUAd29FKkmVdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hammerjs": "^2.0.8" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-middleware": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", - "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.0" - } - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/recast": { - "version": "0.23.11", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", - "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ast-types": "^0.16.1", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tiny-invariant": "^1.3.3", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/recast/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true, - "license": "MIT" - }, - "node_modules/regex-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", - "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/renderkid/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/replace-in-file": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-8.3.0.tgz", - "integrity": "sha512-4VhddQiMCPIuypiwHDTM+XHjZoVu9h7ngBbSCnwGRcwdHwxltjt/m//Ep3GDwqaOx1fDSrKFQ+n7uo4uVcEz9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "glob": "^10.4.2", - "yargs": "^17.7.2" - }, - "bin": { - "replace-in-file": "bin/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/replace-in-file/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/replace-in-file/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/replace-in-file/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/replace-in-file/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/replace-in-file/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/rollup": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", - "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.8", - "@rollup/rollup-android-arm64": "4.34.8", - "@rollup/rollup-darwin-arm64": "4.34.8", - "@rollup/rollup-darwin-x64": "4.34.8", - "@rollup/rollup-freebsd-arm64": "4.34.8", - "@rollup/rollup-freebsd-x64": "4.34.8", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", - "@rollup/rollup-linux-arm-musleabihf": "4.34.8", - "@rollup/rollup-linux-arm64-gnu": "4.34.8", - "@rollup/rollup-linux-arm64-musl": "4.34.8", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", - "@rollup/rollup-linux-riscv64-gnu": "4.34.8", - "@rollup/rollup-linux-s390x-gnu": "4.34.8", - "@rollup/rollup-linux-x64-gnu": "4.34.8", - "@rollup/rollup-linux-x64-musl": "4.34.8", - "@rollup/rollup-win32-arm64-msvc": "4.34.8", - "@rollup/rollup-win32-ia32-msvc": "4.34.8", - "@rollup/rollup-win32-x64-msvc": "4.34.8", - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup/node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", - "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", - "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", - "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", - "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", - "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", - "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", - "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", - "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", - "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", - "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", - "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", - "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", - "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", - "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", - "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", - "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", - "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/rrweb-cssom": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", - "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", - "dev": true, - "license": "MIT" - }, - "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.1.tgz", - "integrity": "sha512-eMLLkl+qz7tx/0cJ9wI+w09GQ2zodTkcE/aVfywwdlRcI3EO19xGnbmJwg/JMIm+5MxVJ6outddLZ4Von4E++Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, - "node_modules/sass-loader": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", - "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.5", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/send/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-static/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-static/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/serve-static/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-static/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-static/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-static/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-static/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sigstore": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-3.1.0.tgz", - "integrity": "sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0", - "@sigstore/sign": "^3.1.0", - "@sigstore/tuf": "^3.1.0", - "@sigstore/verify": "^2.1.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/socks": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", - "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", - "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", - "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/storybook": { - "version": "8.6.14", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.6.14.tgz", - "integrity": "sha512-sVKbCj/OTx67jhmauhxc2dcr1P+yOgz/x3h0krwjyMgdc5Oubvxyg4NYDZmzAw+ym36g/lzH8N0Ccp4dwtdfxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/core": "8.6.14" - }, - "bin": { - "getstorybook": "bin/index.cjs", - "sb": "bin/index.cjs", - "storybook": "bin/index.cjs" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "prettier": "^2 || ^3" - }, - "peerDependenciesMeta": { - "prettier": { - "optional": true - } - } - }, - "node_modules/storybook-addon-angular-router": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/storybook-addon-angular-router/-/storybook-addon-angular-router-1.10.1.tgz", - "integrity": "sha512-PH5z6nUBRg5fRYYEm3VvZIpB0N/fFpy4BU2PcLto6/Me0H826DDhITajCdmzCMiW9G050Wp417BuQl/NS0sGPg==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@storybook/addon-actions": "^8.0.0", - "@storybook/angular": "^8.0.0", - "@storybook/preview-api": "^8.0.0", - "rxjs": "^6.6.7 || ^7.4.0" - } - }, - "node_modules/storybook-addon-pseudo-states": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/storybook-addon-pseudo-states/-/storybook-addon-pseudo-states-4.0.4.tgz", - "integrity": "sha512-hF3nLFpRPjqNxa7eqp+j1bd+DvyUCns1iesUZqMZz9ZuIijosOTQgJO5G0drbdxlHvXehu/BgcqbyxBb2eJR5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/icons": "^1.2.10" - }, - "peerDependencies": { - "storybook": "^8.2.0" - } - }, - "node_modules/stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-loader": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", - "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-pan-zoom": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/svg-pan-zoom/-/svg-pan-zoom-3.6.2.tgz", - "integrity": "sha512-JwnvRWfVKw/Xzfe6jriFyfey/lWJLq4bUh2jwoR5ChWQuQoOH8FEh1l/bEp46iHHKHEJWIyFJETbazraxNWECg==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true, - "license": "MIT" - }, - "node_modules/synckit": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz", - "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.2.4" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" - } - }, - "node_modules/tablesort": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/tablesort/-/tablesort-5.6.0.tgz", - "integrity": "sha512-cZZXK3G089PbpxH8N7vN7Z21SEKqXAaCiSVOmZdR/v7z8TFCsF/OFr0rzjhQuFlQQHy9uQtW9P2oQFJzJFGVrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16", - "npm": ">= 8" - } - }, - "node_modules/tapable": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", - "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "memoizerific": "^1.11.3" - } - }, - "node_modules/terser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/thingies": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", - "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", - "dev": true, - "license": "Unlicense", - "peer": true, - "engines": { - "node": ">=10.18" - }, - "peerDependencies": { - "tslib": "^2" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyrainbow": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", - "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", - "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tldts": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", - "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tldts-core": "^6.1.86" - }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "node_modules/tldts-core": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", - "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", - "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tldts": "^6.1.32" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/tr46": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", - "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/tr46/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tree-dump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz", - "integrity": "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.10" - } - }, - "node_modules/ts-jest": { - "version": "29.3.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.4.tgz", - "integrity": "sha512-Iqbrm8IXOmV+ggWHOTEbjwyCf2xZlUMv5npExksXohL+tk8va4Fjhb+X2+Rt9NBmgO7bJ8WpnMLOwih/DnMlFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "^0.2.6", - "ejs": "^3.1.10", - "fast-json-stable-stringify": "^2.1.0", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "^4.1.2", - "make-error": "^1.3.6", - "semver": "^7.7.2", - "type-fest": "^4.41.0", - "yargs-parser": "^21.1.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ts-morph": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-24.0.0.tgz", - "integrity": "sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ts-morph/common": "~0.25.0", - "code-block-writer": "^13.0.3" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsconfig-paths-webpack-plugin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.2.0.tgz", - "integrity": "sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.7.0", - "tapable": "^2.2.1", - "tsconfig-paths": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tuf-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.0.1.tgz", - "integrity": "sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "3.0.1", - "debug": "^4.3.6", - "make-fetch-happen": "^14.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", - "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-eslint": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.1.tgz", - "integrity": "sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.33.1", - "@typescript-eslint/parser": "8.33.1", - "@typescript-eslint/utils": "8.33.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unique-filename": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", - "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/unique-slug": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", - "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unix-crypt-td-js": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", - "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unplugin": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", - "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/url": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", - "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.12.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.0.tgz", - "integrity": "sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vis": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/vis/-/vis-4.21.0.tgz", - "integrity": "sha512-jonDXTGm2mFU/X6Kg9pvkZEQtXh2J6+NlDJD1tDP7TDCFy+qNeKlsTcXKQtv4nAtUIiKo6sphCt4kbRlEKw75A==", - "deprecated": "Please consider using https://github.com/visjs", - "dev": true, - "license": "(Apache-2.0 OR MIT)", - "dependencies": { - "emitter-component": "^1.1.1", - "hammerjs": "^2.0.8", - "keycharm": "^0.2.0", - "moment": "^2.18.1", - "propagating-hammerjs": "^1.4.6" - } - }, - "node_modules/vite": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", - "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz", - "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/vite/node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/vite/node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/vite/node_modules/rollup": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz", - "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.46.2", - "@rollup/rollup-android-arm64": "4.46.2", - "@rollup/rollup-darwin-arm64": "4.46.2", - "@rollup/rollup-darwin-x64": "4.46.2", - "@rollup/rollup-freebsd-arm64": "4.46.2", - "@rollup/rollup-freebsd-x64": "4.46.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.46.2", - "@rollup/rollup-linux-arm-musleabihf": "4.46.2", - "@rollup/rollup-linux-arm64-gnu": "4.46.2", - "@rollup/rollup-linux-arm64-musl": "4.46.2", - "@rollup/rollup-linux-loongarch64-gnu": "4.46.2", - "@rollup/rollup-linux-ppc64-gnu": "4.46.2", - "@rollup/rollup-linux-riscv64-gnu": "4.46.2", - "@rollup/rollup-linux-riscv64-musl": "4.46.2", - "@rollup/rollup-linux-s390x-gnu": "4.46.2", - "@rollup/rollup-linux-x64-gnu": "4.46.2", - "@rollup/rollup-linux-x64-musl": "4.46.2", - "@rollup/rollup-win32-arm64-msvc": "4.46.2", - "@rollup/rollup-win32-ia32-msvc": "4.46.2", - "@rollup/rollup-win32-x64-msvc": "4.46.2", - "fsevents": "~2.3.2" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/walk-up-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", - "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", - "dev": true, - "license": "ISC" - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/weak-lru-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", - "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", - "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^4.6.0", - "mime-types": "^2.1.31", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware/node_modules/memfs": { - "version": "4.36.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.36.0.tgz", - "integrity": "sha512-mfBfzGUdoEw5AZwG8E965ej3BbvW2F9LxEWj4uLxF6BEh1dO2N9eS3AGu9S6vfenuQYrVjsbUOOZK7y3vz4vyQ==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@jsonjoy.com/json-pack": "^1.0.3", - "@jsonjoy.com/util": "^1.3.0", - "tree-dump": "^1.0.1", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">= 4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - } - }, - "node_modules/webpack-dev-middleware/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", - "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/bonjour": "^3.5.13", - "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.21", - "@types/express-serve-static-core": "^4.17.21", - "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.5", - "@types/sockjs": "^0.3.36", - "@types/ws": "^8.5.10", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.2.1", - "chokidar": "^3.6.0", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "express": "^4.21.2", - "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.9", - "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", - "open": "^10.0.3", - "p-retry": "^6.2.0", - "schema-utils": "^4.2.0", - "selfsigned": "^2.4.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.4.2", - "ws": "^8.18.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/webpack-hot-middleware": { - "version": "2.26.1", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz", - "integrity": "sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-html-community": "0.0.8", - "html-entities": "^2.1.0", - "strip-ansi": "^6.0.0" - } - }, - "node_modules/webpack-hot-middleware/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.2.tgz", - "integrity": "sha512-ykKKus8lqlgXX/1WjudpIEjqsafjOTcOJqxnAbMLAu/KCsDCJ6GBtvscewvTkrn24HsnvFwrSCbenFrhtcCsAA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", - "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", - "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/webpack/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-url": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", - "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "^5.1.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/windows-release": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", - "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/windows-release/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/windows-release/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true, - "license": "MIT" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yoctocolors-cjs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", - "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zone.js": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", - "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", - "license": "MIT", - "peer": true - } - } -} diff --git a/libs/angular-components/package.json b/libs/angular-components/package.json deleted file mode 100644 index 5b62ce5d6..000000000 --- a/libs/angular-components/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "name": "@tehik-ee/tedi-angular", - "version": "0.0.0-semantic-version", - "type": "module", - "main": "community.mjs", - "module": "community.mjs", - "exports": { - "./index.css": { - "default": "./index.css" - } - }, - "scripts": { - "start": "ng run angular-components:storybook", - "build": "ng build angular-components --configuration production && sass --load-path=node_modules styles/index.scss dist/index.css --style=compressed --no-source-map && replace-in-file //fonts//g \"./fonts/\" dist/index.css --isRegex && mkdir dist/fonts && cp -a ../tedi-core/public/fonts/* dist/fonts/", - "build:sb": "ng run angular-components:build-storybook && replace-in-file //fonts//g \"./fonts/\" dist/storybook-static/main.css --isRegex", - "lint": "ng lint angular-components --fix", - "test": "jest --passWithNoTests", - "test:watch": "jest --watch", - "test:coverage": "jest --config ./jest.config.ts --coverage", - "install:clean": "rm -rf node_modules && npm install", - "release": "npx semantic-release -e semantic-release-monorepo", - "chromatic": "npx chromatic --project-token=$CHROMATIC_PROJECT_TOKEN --build-script-name=build:sb --baseline-branch=rc --include=\"tedi/**/*.stories.*\"" - }, - "peerDependencies": { - "@angular/animations": "^18.0.0 || ^19.0.0", - "@angular/cdk": "^18.0.0 || ^19.0.0", - "@angular/common": "^18.0.0 || ^19.0.0", - "@angular/core": "^18.0.0 || ^19.0.0", - "@angular/forms": "^18.0.0 || ^19.0.0", - "@angular/platform-browser": "^18.0.0 || ^19.0.0", - "ngx-float-ui": "^19.0.1" - }, - "devDependencies": { - "@angular-devkit/core": "^19.2.14", - "@angular-devkit/schematics": "^19.2.14", - "@angular-eslint/builder": "^19.7.0", - "@angular-eslint/eslint-plugin": "^19.7.0", - "@angular-eslint/eslint-plugin-template": "^19.7.0", - "@angular-eslint/schematics": "^19.7.0", - "@angular-eslint/template-parser": "^19.7.0", - "@angular/cli": "^19.2.14", - "@angular/compiler-cli": "^19.2.14", - "@angular/forms": "^19.2.14", - "@angular/language-service": "^19.2.14", - "@angular/platform-browser-dynamic": "^19.2.14", - "@angular/router": "^19.2.14", - "@compodoc/compodoc": "^1.1.26", - "@etchteam/storybook-addon-status": "^5.0.0", - "@schematics/angular": "^19.2.14", - "@storybook/addon-a11y": "^8.6.8", - "@storybook/addon-docs": "^8.6.8", - "@storybook/addon-essentials": "^8.6.8", - "@storybook/addon-interactions": "^8.6.8", - "@storybook/addon-onboarding": "^8.6.8", - "@storybook/angular": "^8.6.12", - "@storybook/blocks": "^8.6.8", - "@storybook/manager-api": "^8.6.8", - "@storybook/test": "^8.6.8", - "@storybook/theming": "^8.6.8", - "@testing-library/angular": "^17.3.7", - "@types/jest": "^29.5.14", - "@types/node": "^22.10.5", - "@typescript-eslint/eslint-plugin": "^8.28.0", - "angular-eslint": "^19.4.0", - "chokidar": "^4.0.3", - "chromatic": "^11.27.0", - "eslint-plugin-prettier": "^5.2.1", - "identity-obj-proxy": "^3.0.0", - "jest": "^29.7.0", - "jest-preset-angular": "^14.5.3", - "ng-packagr": "^19.2.0", - "prettier": "^3.4.2", - "readdirp": "3.6.0", - "replace-in-file": "^8.3.0", - "sass": "^1.86.1", - "storybook": "^8.4.7", - "storybook-addon-angular-router": "^1.10.1", - "storybook-addon-pseudo-states": "^4.0.3", - "ts-node": "^10.9.2", - "tslib": "^2.5.0" - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@tehik-ee/tedi-core": "^1.15.4" - }, - "overrides": { - "dayjs": "$dayjs", - "jest-environment-jsdom": { - "jsdom": "26.0.0", - "rrweb-cssom": "0.8.0" - } - } -} diff --git a/libs/angular-components/styles/index.scss b/libs/angular-components/styles/index.scss deleted file mode 100644 index 873665259..000000000 --- a/libs/angular-components/styles/index.scss +++ /dev/null @@ -1,2 +0,0 @@ -@use "@tehik-ee/tedi-core/index.scss"; -@use "vertical-spacing.scss"; diff --git a/libs/angular-components/tedi/components/form/label/label.component.scss b/libs/angular-components/tedi/components/form/label/label.component.scss deleted file mode 100644 index 18c557b71..000000000 --- a/libs/angular-components/tedi/components/form/label/label.component.scss +++ /dev/null @@ -1,19 +0,0 @@ -@use "@tehik-ee/tedi-core/mixins"; - -.tedi-label { - color: var(--general-text-secondary); - - @include mixins.responsive-styles(font-size, body-regular-size, $exclude: tablet); - @include mixins.responsive-styles(font-family, family-primary, $exclude: tablet); - - &--small { - @include mixins.responsive-styles(font-size, body-small-regular-size, $exclude: tablet); - } - - &--required { - &::after { - content: " *"; - color: var(--form-general-feedback-error-border); - } - } -} diff --git a/libs/angular-components/tedi/components/layout/header/header-actions/header-actions.component.scss b/libs/angular-components/tedi/components/layout/header/header-actions/header-actions.component.scss deleted file mode 100644 index 6dc0bb68a..000000000 --- a/libs/angular-components/tedi/components/layout/header/header-actions/header-actions.component.scss +++ /dev/null @@ -1,29 +0,0 @@ -@use "@tehik-ee/tedi-core/mixins"; -@use "@tehik-ee/tedi-core/bootstrap-utility/breakpoints"; - -.tedi-header-actions { - display: flex; - align-items: center; - height: 100%; - - > * { - display: flex; - height: 100%; - align-items: center; - - &:not(:first-child) { - border-left: var(--borders-01) solid var(--general-border-primary); - - @include mixins.responsive-styles(padding-left, layout-header-items-right-gutter-x); - } - - &:not(:last-child) { - @include mixins.responsive-styles(padding-right, layout-header-items-right-gutter-x); - } - - &:has(.tedi-header-login__button--mobile), - &:has(.tedi-header-profile--mobile) { - padding-left: 0; - } - } -} \ No newline at end of file diff --git a/libs/angular-components/tedi/components/layout/header/header-language/header-language.component.scss b/libs/angular-components/tedi/components/layout/header/header-language/header-language.component.scss deleted file mode 100644 index 470ece0a0..000000000 --- a/libs/angular-components/tedi/components/layout/header/header-language/header-language.component.scss +++ /dev/null @@ -1,33 +0,0 @@ -@use "@tehik-ee/tedi-core/mixins"; -@use "@tehik-ee/tedi-core/bootstrap-utility/breakpoints"; - -:root { - --_header-language-transition-duration: 300ms; -} - -.tedi-header-language { - display: flex; - flex-direction: column; - justify-content: center; - align-items: flex-start; - - tedi-popover-trigger { - tedi-icon { - transition: transform var(--_header-language-transition-duration) ease; - } - - &[data-open="true"] { - tedi-icon { - transform: rotate(180deg); - } - } - } - - &__label { - display: none; - - @include breakpoints.media-breakpoint-up(sm) { - display: block; - } - } -} \ No newline at end of file diff --git a/libs/angular-components/tedi/components/layout/header/header-login/header-login.component.scss b/libs/angular-components/tedi/components/layout/header/header-login/header-login.component.scss deleted file mode 100644 index 00e886c2d..000000000 --- a/libs/angular-components/tedi/components/layout/header/header-login/header-login.component.scss +++ /dev/null @@ -1,35 +0,0 @@ -@use "@tehik-ee/tedi-core/mixins"; - -tedi-header-login { - display: flex; - align-items: center; - padding-left: 0; - - .tedi-header-login__button { - flex-shrink: 0; - - &--mobile { - flex-direction: column; - justify-content: center; - align-items: center; - gap: 0; - border: 0; - border-radius: 0; - font-size: 12px; - line-height: 16px; - - @include mixins.responsive-styles(min-width, layout-header-mobile-button-size); - @include mixins.responsive-styles(min-height, layout-header-mobile-button-size); - @include mixins.responsive-styles(padding, layout-grid-gutters-08); - - &:focus-visible { - outline: var(--borders-02) solid var(--primary-500); - outline-offset: calc(-1 * var(--borders-02)); - } - - tedi-icon { - @include mixins.responsive-styles(font-size, icon-05); - } - } - } -} \ No newline at end of file diff --git a/libs/angular-components/tedi/components/layout/header/header-logout/header-logout.component.scss b/libs/angular-components/tedi/components/layout/header/header-logout/header-logout.component.scss deleted file mode 100644 index ac71be314..000000000 --- a/libs/angular-components/tedi/components/layout/header/header-logout/header-logout.component.scss +++ /dev/null @@ -1,50 +0,0 @@ -@use "@tehik-ee/tedi-core/mixins"; - -.tedi-header-logout { - display: flex; - align-items: center; - background: transparent; - padding: 0; - border: 0; - - @include mixins.responsive-styles(font-size, body-regular-size); - @include mixins.responsive-styles(gap, link-inner-spacing-x); - - &:hover { - span { - text-decoration: underline !important; - } - } - - &--mobile { - flex-direction: column; - justify-content: center; - align-items: center; - gap: 0; - border: 0; - border-radius: 0; - font-size: 12px; - line-height: 16px; - - @include mixins.responsive-styles(min-width, layout-header-mobile-button-size); - @include mixins.responsive-styles(min-height, layout-header-mobile-button-size); - @include mixins.responsive-styles(padding, layout-grid-gutters-08); - - &:focus-visible { - outline: var(--borders-02) solid var(--primary-500); - outline-offset: calc(-1 * var(--borders-02)); - } - - tedi-icon { - font-size: var(--_header-logout-icon-size) !important; - margin: 0 !important; - margin-bottom: 4px !important; - - @include mixins.responsive-styles(--_header-logout-icon-size, icon-05); - } - } - - span { - text-decoration: none !important; - } -} \ No newline at end of file diff --git a/libs/angular-components/tedi/components/layout/header/header-profile/header-profile.component.scss b/libs/angular-components/tedi/components/layout/header/header-profile/header-profile.component.scss deleted file mode 100644 index 205492a52..000000000 --- a/libs/angular-components/tedi/components/layout/header/header-profile/header-profile.component.scss +++ /dev/null @@ -1,91 +0,0 @@ -@use "@tehik-ee/tedi-core/mixins"; - -tedi-header-profile { - align-content: center; - - @include mixins.responsive-styles(--_header-min-height, layout-header-min-height); - - tedi-popover { - tedi-popover-trigger { - height: 46px; - align-items: center; - } - } - - .tedi-header-profile--mobile { - flex-direction: column; - justify-content: center; - align-items: center; - gap: 0; - border: 0; - border-radius: 0; - font-size: 12px; - line-height: 16px; - - @include mixins.responsive-styles(min-width, layout-header-mobile-button-size); - @include mixins.responsive-styles(min-height, layout-header-mobile-button-size); - @include mixins.responsive-styles(padding, layout-grid-gutters-08); - - &:focus-visible { - outline: var(--borders-02) solid var(--primary-500); - outline-offset: calc(-1 * var(--borders-02)); - } - - tedi-icon { - @include mixins.responsive-styles(font-size, icon-05); - } - - &[data-open="true"] { - background: var(--button-main-neutral-icon-only-background-active); - } - } - - .tedi-header-profile__overlay { - position: absolute; - left: 0; - top: var(--_header-min-height); - width: 100%; - min-height: calc(100dvh - var(--_header-min-height)); - background: rgb(0 0 0 / 25%); - z-index: calc(var(--z-index-header) - 1); - } - - .tedi-header-profile__modal { - min-height: calc(100dvh - var(--_header-min-height)); - max-height: 100%; - position: absolute; - right: 0; - top: var(--_header-min-height); - overflow-y: auto; - display: flex; - flex-direction: column; - background: var(--general-surface-primary); - z-index: var(--z-index-header); - - @include mixins.responsive-styles(width, side-navigation-item-width-default); - - > * { - @include mixins.responsive-styles(padding, layout-header-modal-item-padding); - - &:not(:last-child) { - border-bottom: var(--borders-01) solid var(--general-border-primary); - } - - &:has(.tedi-header-role__head) { - border-bottom: var(--borders-04) solid var(--general-border-brand); - } - } - - .tedi-header-logout--mobile { - flex-direction: row; - justify-content: flex-start; - - @include mixins.responsive-styles(font-size, body-regular-size); - @include mixins.responsive-styles(gap, link-inner-spacing-x); - - tedi-icon { - font-size: inherit !important; - } - } - } -} \ No newline at end of file diff --git a/libs/angular-components/tedi/components/layout/header/header-role/header-role.component.scss b/libs/angular-components/tedi/components/layout/header/header-role/header-role.component.scss deleted file mode 100644 index a0a3964eb..000000000 --- a/libs/angular-components/tedi/components/layout/header/header-role/header-role.component.scss +++ /dev/null @@ -1,207 +0,0 @@ -@use "@tehik-ee/tedi-core/mixins"; -@use "@tehik-ee/tedi-core/bootstrap-utility/breakpoints"; - -:root { - --_header-role-transition-duration: 300ms; -} - -.tedi-header-role { - display: flex; - flex-direction: column; - justify-content: center; - align-items: flex-start; - - &__head { - width: 100%; - display: flex; - justify-content: space-between; - align-items: center; - gap: 4px; - - @include breakpoints.media-breakpoint-up(lg) { - justify-content: flex-start; - } - - .tedi-header-role__info { - display: flex; - flex-direction: row; - gap: var(--_header-role-info-gap); - - @include mixins.responsive-styles(--_header-role-info-gap, layout-grid-gutters-16); - - &[data-multiple="true"] { - flex-direction: column; - gap: 0px; - - .tedi-header-role__description { - &::before { - display: none; - } - } - } - - .tedi-header-role__description { - position: relative; - - &::before { - content: ""; - height: 1rem; - width: 1px; - position: absolute; - top: 50%; - left: calc(-1 * var(--_header-role-info-gap) / 2); - transform: translateY(-50%); - background: var(--general-border-secondary); - } - } - } - - button { - tedi-icon { - transition: transform var(--_header-role-transition-duration) ease; - - &[data-open="true"] { - transform: rotate(180deg); - } - } - } - } - - tedi-popover-trigger { - tedi-icon { - transition: transform var(--_header-role-transition-duration) ease; - } - - &[data-open="true"] { - tedi-icon { - transform: rotate(180deg); - } - } - } - - &__dropdown { - display: flex; - flex-direction: column; - gap: var(--_header-role-dropdown-gap) !important; - - @include mixins.responsive-styles(--_header-role-dropdown-gap, layout-grid-gutters-16); - - > * { - &:not(:first-child) { - position: relative; - - &::after { - content: ""; - position: absolute; - top: calc(-1 * (var(--_header-role-dropdown-gap) / 2 + 1px)); - left: 0; - width: 100%; - height: 1px; - background-color: var(--general-border-primary); - } - } - } - } - - &__representative { - width: 100%; - display: flex; - gap: 8px; - align-items: center; - text-align: start; - cursor: pointer; - color: var(--general-text-secondary); - background: transparent; - border: 0; - - @include mixins.responsive-styles(font-size, body-regular-size, $exclude: tablet); - @include mixins.responsive-styles(border-radius, card-radius-rounded); - @include mixins.responsive-styles(padding, card-padding-xs); - - &:not([data-selected="true"]):hover { - background: var(--header-popover-item-hover); - color: var(--general-text-primary); - } - - &:not([data-selected="true"]):active { - background: var(--header-popover-item-active); - color: var(--general-text-white); - } - - &:focus-visible { - outline: var(--borders-02) solid var(--primary-500); - outline-offset: var(--borders-01); - } - - &[data-selected="true"] { - background: var(--header-popover-item-selected); - color: var(--general-text-white); - } - - tedi-icon { - color: inherit; - } - } - - &__input { - width: 100%; - border: var(--borders-01) solid var(--form-input-border-default); - background: var(--form-input-background-default); - - @include mixins.responsive-styles(padding, form-field-padding-y-md-default form-field-padding-x-md-default); - @include mixins.responsive-styles(border-radius, form-field-radius); - @include mixins.responsive-styles(gap, form-field-inner-spacing); - } - - &__no-results { - color: var(--general-text-secondary); - text-align: center; - - @include mixins.responsive-styles(padding-top, layout-grid-gutters-08); - } - - &__collapse { - width: 100%; - display: grid; - grid-template-rows: 0fr; - overflow: hidden; - visibility: hidden; - transition: grid-template-rows var(--_header-role-transition-duration) ease; - - &[data-open="true"] { - visibility: visible; - grid-template-rows: 1fr; - - .tedi-header-role__collapse__items { - visibility: visible; - } - } - - &__items { - min-height: 0; - display: flex; - flex-direction: column; - gap: var(--_header-role-collapse-gap); - transition: visibility var(--_header-role-transition-duration) ease; - visibility: hidden; - - @include mixins.responsive-styles(--_header-role-collapse-gap, layout-grid-gutters-16); - - > * { - &:not(:first-child) { - position: relative; - - &::after { - content: ""; - position: absolute; - top: calc(-1 * (var(--_header-role-collapse-gap) / 2 + 1px)); - left: 0; - width: 100%; - height: 1px; - background-color: var(--general-border-primary); - } - } - } - } - } -} \ No newline at end of file diff --git a/libs/angular-components/tedi/components/layout/header/header.component.scss b/libs/angular-components/tedi/components/layout/header/header.component.scss deleted file mode 100644 index b2503cd66..000000000 --- a/libs/angular-components/tedi/components/layout/header/header.component.scss +++ /dev/null @@ -1,37 +0,0 @@ -@use "@tehik-ee/tedi-core/mixins"; - -.tedi-header { - display: flex; - - &__main { - width: 100%; - display: flex; - justify-content: space-between; - align-items: center; - background: var(--header-background); - box-shadow: 0px 1px 5px 0px var(--alpha-20, rgba(0, 0, 0, 0.20)); - - @include mixins.responsive-styles(height, layout-header-min-height); - @include mixins.responsive-styles(padding, layout-header-padding-y layout-header-padding-right layout-header-padding-y layout-header-padding-left); - } - - &__link-button { - display: inline-flex; - align-items: center; - background-color: transparent; - border: 0; - padding: 0; - - @include mixins.responsive-styles(font-size, body-regular-size, $exclude: tablet); - - &:hover { - span { - text-decoration: underline !important; - } - } - - span { - text-decoration: none !important; - } - } -} \ No newline at end of file diff --git a/libs/angular-components/tsconfig.eslint.json b/libs/angular-components/tsconfig.eslint.json deleted file mode 100644 index 6a77b0e1b..000000000 --- a/libs/angular-components/tsconfig.eslint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["**/*.ts"], - "exclude": ["node_modules", "dist", "out-tsc"] -} diff --git a/libs/react-components/.babelrc b/libs/react-components/.babelrc deleted file mode 100644 index 14f6e56d0..000000000 --- a/libs/react-components/.babelrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "presets": [["@babel/preset-react", { "runtime": "automatic", "useBuiltIns": "usage" }]], - "plugins": [ - [ - "@babel/plugin-transform-react-jsx", - { - "runtime": "automatic" - } - ] - ] -} diff --git a/libs/react-components/.codecov.yml b/libs/react-components/.codecov.yml deleted file mode 100644 index 2c51aa44f..000000000 --- a/libs/react-components/.codecov.yml +++ /dev/null @@ -1,6 +0,0 @@ -coverage: - status: - patch: - default: - target: 80% - threshold: 80% diff --git a/libs/react-components/.eslintignore b/libs/react-components/.eslintignore deleted file mode 100644 index 76add878f..000000000 --- a/libs/react-components/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -dist \ No newline at end of file diff --git a/libs/react-components/.eslintrc.json b/libs/react-components/.eslintrc.json deleted file mode 100644 index 343ce25f4..000000000 --- a/libs/react-components/.eslintrc.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "root": true, - "ignorePatterns": ["node_modules", "dist", "coverage"], - "env": { - "node": true - }, - "plugins": ["simple-import-sort", "@typescript-eslint", "react", "react-hooks", "unused-imports", "prettier"], - "parser": "@typescript-eslint/parser", - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:react/recommended", - "plugin:react-hooks/recommended", - "next", - "plugin:storybook/recommended", - "prettier", - "plugin:prettier/recommended" - ], - "rules": { - "simple-import-sort/imports": [ - "error", - { - "groups": [ - ["^@?\\w"], // Packages - ["^@ria."], // Imports from @ria scope - ["^\\."], // Relative imports - ["^[^.]"], // Absolute imports - ["^\\u0000"] // Side-effect imports - ] - } - ], - "eqeqeq": ["error", "always"], - "object-property-newline": ["error", { "allowAllPropertiesOnSameLine": true }], - "object-curly-spacing": ["error", "always"], - "quotes": ["error", "single"], - "jsx-quotes": ["error", "prefer-double"], - "react/jsx-curly-brace-presence": ["error"], - "@typescript-eslint/no-unused-vars": ["warn", { "argsIgnorePattern": "^_" }], - "react-hooks/exhaustive-deps": ["warn"], - "react/prop-types": "off", - "@next/next/no-html-link-for-pages": 0, - "@next/next/no-img-element": 0, - "semi": ["error", "always"], - "unused-imports/no-unused-imports": "error", - "unused-imports/no-unused-vars": [ - "warn", - { "vars": "all", "varsIgnorePattern": "^_", "args": "after-used", "argsIgnorePattern": "^_" } - ] - }, - "overrides": [ - { - "files": ["*.ts", "*.tsx"], - "rules": { - "@typescript-eslint/explicit-module-boundary-types": "off" - } - }, - { - "files": ["*.stories.tsx"], - "rules": { - "react-hooks/rules-of-hooks": "off" - } - }, - { - "files": ["src/community/**"], - "rules": { - "@typescript-eslint/no-unused-vars": "off", - "react-hooks/exhaustive-deps": "off" - } - } - ], - "settings": { - "react": { - "version": "detect" - } - } -} diff --git a/libs/react-components/.prettierignore b/libs/react-components/.prettierignore deleted file mode 100644 index 9ec79419e..000000000 --- a/libs/react-components/.prettierignore +++ /dev/null @@ -1,6 +0,0 @@ -# Add files here to ignore them from prettier formatting - -/dist -/coverage -/node_modules -CHANGELOG.md diff --git a/libs/react-components/.prettierrc b/libs/react-components/.prettierrc deleted file mode 100644 index 7cf4b3833..000000000 --- a/libs/react-components/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "singleQuote": true, - "jsxSingleQuote": false, - "printWidth": 120, - "endOfLine": "auto" -} diff --git a/libs/react-components/.releaserc.json b/libs/react-components/.releaserc.json deleted file mode 100644 index 339f63500..000000000 --- a/libs/react-components/.releaserc.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "tagFormat": "react-${version}", - "branches": [ - "main", - { - "name": "rc", - "prerelease": true - } - ], - "plugins": [ - "@semantic-release/commit-analyzer", - "@semantic-release/release-notes-generator", - ["@semantic-release/changelog", { "changelogFile": "./CHANGELOG.md" }], - [ - "@semantic-release/git", - { - "assets": ["package.json", "package-lock.json", "CHANGELOG.md"], - "message": "chore(release): ${nextRelease.version} \n\n${nextRelease.notes}" - } - ], - ["@semantic-release/npm", { "pkgRoot": "dist" }], - [ - "@semantic-release/github", - { - "assets": [ - { - "path": "dist/*.tgz", - "label": "Package" - } - ] - } - ] - ] -} diff --git a/libs/react-components/.storybook/main.ts b/libs/react-components/.storybook/main.ts deleted file mode 100644 index 335372cc3..000000000 --- a/libs/react-components/.storybook/main.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { StorybookConfig } from '@storybook/react-vite'; -import { join } from 'path'; -import { withoutVitePlugins } from '@storybook/builder-vite'; -import checker from 'vite-plugin-checker'; - -const config: StorybookConfig = { - stories: [ - '../src/tedi/docs/_welcome.mdx', - '../src/tedi/docs/getStarted.mdx', - '../src/tedi/docs/changelog.mdx', - '../src/tedi/docs/_badges.mdx', - '../src/tedi/docs/colors/tedi-colors.mdx', - '../src/community/docs/scale-layout/spacing.mdx', - '../src/community/docs/scale-layout/grid.mdx', - '../src/tedi/**/**/*.stories.tsx', - '../src/tedi/**/**/*.mdx', - '../src/community/**/**/*.stories.tsx', - '../src/community/**/**/*.mdx', - ], - addons: [ - '@storybook/addon-essentials', - '@storybook/addon-a11y', - '@storybook/addon-designs', - '@avalane/storybook-addon-status', - 'storybook-addon-pseudo-states', - ], - core: { - builder: '@storybook/builder-vite', - disableTelemetry: true, - }, - staticDirs: ['../../tedi-core/public'], - framework: { - name: '@storybook/react-vite', - options: {}, - }, - docs: { - autodocs: true, - }, - typescript: { - reactDocgen: 'react-docgen-typescript', - reactDocgenTypescriptOptions: { - shouldExtractLiteralValuesFromEnum: true, - shouldRemoveUndefinedFromOptional: true, - }, - }, - async viteFinal(config, { configType }) { - return { - ...config, - define: { - 'process.env.JEST_WORKER_ID': JSON.stringify(process.env.JEST_WORKER_ID), - 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), - }, - publicDir: join(__dirname, '../../tedi-core/public'), - plugins: await withoutVitePlugins( - [ - config.plugins, - checker({ - overlay: false, - ...(configType === 'DEVELOPMENT' - ? { - eslint: { - lintCommand: 'eslint "./**/*.{ts,tsx}"', - dev: { - logLevel: ['error'], - }, - }, - } - : {}), - typescript: { - root: join(__dirname), - }, - }), - ], - ['vite:dts'] - ), - }; - }, -}; - -export default config; diff --git a/libs/react-components/.storybook/manager-head.html b/libs/react-components/.storybook/manager-head.html deleted file mode 100644 index 393e0127e..000000000 --- a/libs/react-components/.storybook/manager-head.html +++ /dev/null @@ -1,2 +0,0 @@ -<meta http-equiv="Cache-Control" content="max-age=0, no-cache, no-store, must-revalidate" /> -<meta name="robots" content="noindex" /> diff --git a/libs/react-components/.storybook/manager.js b/libs/react-components/.storybook/manager.js deleted file mode 100644 index 18c8fdbeb..000000000 --- a/libs/react-components/.storybook/manager.js +++ /dev/null @@ -1,7 +0,0 @@ -import { addons } from '@storybook/manager-api'; - -import tehikTheme from './tehik-theme.js'; - -addons.setConfig({ - theme: tehikTheme, -}); diff --git a/libs/react-components/.storybook/preview-head.html b/libs/react-components/.storybook/preview-head.html deleted file mode 100644 index 86a1b5f29..000000000 --- a/libs/react-components/.storybook/preview-head.html +++ /dev/null @@ -1,5 +0,0 @@ -<style> - .sbdocs.sbdocs-content { - max-width: 1200px; - } -</style> diff --git a/libs/react-components/.storybook/preview.tsx b/libs/react-components/.storybook/preview.tsx deleted file mode 100644 index c48ca5b65..000000000 --- a/libs/react-components/.storybook/preview.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import { Controls, Description, Primary, Stories, Subtitle, Title } from '@storybook/blocks'; -import { Preview, StoryContext } from '@storybook/react'; - -import StorybookDecorator from './storybook-decorator'; - -import '../src/tedi/styles/index.scss'; -import '../src/community/styles/index.scss'; -import '../../tedi-core/src/tedi-storybook-styles.scss'; -import '../src/community/styles/storybook.scss'; - -export const decorators: Preview['decorators'] = [ - (Story: React.ComponentType, context: StoryContext) => { - // prevent LabelProvider for label story, because it sets its own provider - return context.componentId === 'components-labelprovider' ? ( - <Story /> - ) : ( - <StorybookDecorator> - <Story /> - </StorybookDecorator> - ); - }, -]; - -const preview: Preview = { - parameters: { - viewMode: 'docs', - backgrounds: { - default: 'default', - values: [ - { name: 'default', value: 'var(--color-bg-default)' }, - { name: 'muted', value: 'var(--color-bg-muted)' }, - { name: 'subtle', value: 'var(--color-bg-subtle)' }, - { name: 'disabled', value: 'var(--color-bg-disabled)' }, - { name: 'black', value: 'var(--color-black)' }, - { name: 'inverted', value: 'var(--color-bg-inverted)' }, - { name: 'inverted-contrast', value: 'var(--color-bg-inverted-contrast)' }, - { name: 'brand', value: 'var(--primary-600)' }, - ], - }, - docs: { - toc: true, - page: () => ( - <> - <Title /> - <Subtitle /> - <Description /> - <Primary /> - <Controls /> - <Stories includePrimary={false} /> - </> - ), - }, - status: { - statuses: { - devComponent: { - background: '#ff8000', - color: '#ffffff', - description: 'This component is dev only and not found in Figma', - }, - breakpointSupport: { - background: '#308653', - color: '#ffffff', - description: 'This component has breakpoint support', - }, - internalComponent: { - background: '#fff', - color: '#000', - description: 'This component is only used to build other components and not being exported from library', - }, - ExistsInTediReady: { - background: '#005aa3', - color: '#fff', - description: 'This component has been migrated to TEDI-Ready', - }, - partiallyTediReady: { - background: '#9bbb5f', - color: '#fff', - description: - 'This component lacks some TEDI-Ready functionality, e.g it may rely on another component that has not yet been developed', - }, - }, - }, - }, -}; - -export default preview; diff --git a/libs/react-components/.storybook/storybook-decorator.tsx b/libs/react-components/.storybook/storybook-decorator.tsx deleted file mode 100644 index 8a0c4507e..000000000 --- a/libs/react-components/.storybook/storybook-decorator.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import dayjs from 'dayjs'; -import weekday from 'dayjs/plugin/weekday'; -import React from 'react'; - -import { AccessibilityProvider } from '../src/tedi/providers/accessibility-provider/accessibility-provider'; -import { LabelProvider, LabelProviderProps } from '../src/tedi/providers/label-provider'; - -import 'dayjs/locale/et'; - -dayjs.extend(weekday); - -interface StorybookDecoratorProps { - children: React.ReactNode; - locale?: LabelProviderProps['locale']; -} - -const StorybookDecorator = ({ children, locale = 'en', ...rest }: StorybookDecoratorProps) => ( - <LabelProvider locale={locale} {...rest}> - <AccessibilityProvider>{children}</AccessibilityProvider> - </LabelProvider> -); - -export default StorybookDecorator; diff --git a/libs/react-components/.storybook/tehik-theme.js b/libs/react-components/.storybook/tehik-theme.js deleted file mode 100644 index c90257810..000000000 --- a/libs/react-components/.storybook/tehik-theme.js +++ /dev/null @@ -1,19 +0,0 @@ -import { create } from '@storybook/theming'; - -export default create({ - base: 'dark', - brandTitle: 'Tehik react components', - brandUrl: 'https://tehik-ee.github.io/tedi-design-system/', - brandImage: 'TEHIK_logo2.svg', - brandTarget: '_self', - - appBg: '#004882', - colorPrimary: '#ff8000', - colorSecondary: '#ffffff80', - - textColor: '#fff', - textInverseColor: '#ffffff', - - barTextColor: '#fff', - textMutedColor: '#fff', -}); diff --git a/libs/react-components/.storybook/tsconfig.json b/libs/react-components/.storybook/tsconfig.json deleted file mode 100644 index 0d5693adf..000000000 --- a/libs/react-components/.storybook/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "emitDecoratorMetadata": true, - "outDir": "" - }, - "files": ["../declaration.d.ts"], - "exclude": [ - "../**/*.spec.ts", - "../**/*.spec.js", - "../**/*.spec.tsx", - "../**/*.spec.jsx", - "jest.config.ts", - "../node_modules" - ], - "include": ["../src/**/*", "./**/*.ts", "./**/*.tsx"] -} diff --git a/libs/react-components/.stylelintrc.json b/libs/react-components/.stylelintrc.json deleted file mode 100644 index 11ebead36..000000000 --- a/libs/react-components/.stylelintrc.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "plugins": ["stylelint-declaration-strict-value"], - "extends": ["stylelint-config-standard-scss", "stylelint-config-recess-order"], - "ignoreFiles": ["dist", "node_modules"], - "rules": { - "selector-class-pattern": "^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*(?:__[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:--[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:\\[.+\\])?$", - "scale-unlimited/declaration-strict-value": ["/color$/", { "ignoreValues": ["inherit"], "disableFix": true }], - "max-nesting-depth": [3, { "ignore": ["blockless-at-rules", "pseudo-classes"], "ignoreAtRules": ["/include/"] }], - "scss/no-global-function-names": null, - "scss/comment-no-empty": null, - "scss/at-if-no-null": null, - "custom-property-pattern": null, - "no-invalid-position-at-import-rule": null, - "no-descending-specificity": null, - "selector-pseudo-class-no-unknown": [ - true, - { - "ignorePseudoClasses": ["global"] - } - ], - "lightness-notation": null - } -} diff --git a/libs/react-components/CHANGELOG.md b/libs/react-components/CHANGELOG.md deleted file mode 100644 index 800e5028a..000000000 --- a/libs/react-components/CHANGELOG.md +++ /dev/null @@ -1,4424 +0,0 @@ -# [@tehik-ee/tedi-react-v13.1.0-rc.21](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.20...react-13.1.0-rc.21) (2025-10-09) - - -### Bug Fixes - -* **textfield:** fix input param passing [#1132](https://github.com/TEHIK-EE/tedi-design-system/issues/1132) ([#1166](https://github.com/TEHIK-EE/tedi-design-system/issues/1166)) ([6380a9a](https://github.com/TEHIK-EE/tedi-design-system/commit/6380a9a82637ea360c4d0622799cc7591ef3486d)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.20](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.19...react-13.1.0-rc.20) (2025-10-08) - - -### Bug Fixes - -* **alert,toast:** enhance accessibility, add titleElement prop to override default heading element, better Toast stories, add documentation [#1009](https://github.com/TEHIK-EE/tedi-design-system/issues/1009) ([#1126](https://github.com/TEHIK-EE/tedi-design-system/issues/1126)) ([f922907](https://github.com/TEHIK-EE/tedi-design-system/commit/f92290772259b8b3ff19a2cc5a1f1d9e9b24d610)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.19](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.18...react-13.1.0-rc.19) (2025-10-08) - - -### Bug Fixes - -* **separator:** fix stories for 9.1.4.10 criteria [#1007](https://github.com/TEHIK-EE/tedi-design-system/issues/1007) ([#1125](https://github.com/TEHIK-EE/tedi-design-system/issues/1125)) ([80d9ac8](https://github.com/TEHIK-EE/tedi-design-system/commit/80d9ac82ebb75418e1f2debd236b3ad5cedbf1d6)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.18](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.17...react-13.1.0-rc.18) (2025-10-08) - - -### Bug Fixes - -* **select:** fix label and placeholder accessibility [#1014](https://github.com/TEHIK-EE/tedi-design-system/issues/1014) ([#1130](https://github.com/TEHIK-EE/tedi-design-system/issues/1130)) ([649b52b](https://github.com/TEHIK-EE/tedi-design-system/commit/649b52b8b221293c7a9d5ad26695b4777e1bb94e)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.17](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.16...react-13.1.0-rc.17) (2025-10-01) - - -### Features - -* **vertical-stepper:** design changes and additional slot for info components [#512](https://github.com/TEHIK-EE/tedi-design-system/issues/512) ([#1131](https://github.com/TEHIK-EE/tedi-design-system/issues/1131)) ([1d4f0da](https://github.com/TEHIK-EE/tedi-design-system/commit/1d4f0da901e5810de64c4acaa4e566a445d4af18)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.16](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.15...react-13.1.0-rc.16) (2025-09-25) - - -### Bug Fixes - -* **select:** fix placeholder placement on single value input [#695](https://github.com/TEHIK-EE/tedi-design-system/issues/695) ([#1092](https://github.com/TEHIK-EE/tedi-design-system/issues/1092)) ([0f7cc51](https://github.com/TEHIK-EE/tedi-design-system/commit/0f7cc5106f6919e9741d9daa3d3f4128f4778e0c)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.15](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.14...react-13.1.0-rc.15) (2025-09-25) - - -### Features - -* **vertical-stepper:** design changes [#512](https://github.com/TEHIK-EE/tedi-design-system/issues/512) ([#1112](https://github.com/TEHIK-EE/tedi-design-system/issues/1112)) ([40b9707](https://github.com/TEHIK-EE/tedi-design-system/commit/40b9707983b2533bc8c195737036fcddb2fd0b85)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.14](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.13...react-13.1.0-rc.14) (2025-09-25) - - -### Bug Fixes - -* **file-upload:** enhance useFileUpload hook with controlled state management [#1021](https://github.com/TEHIK-EE/tedi-design-system/issues/1021) ([#1088](https://github.com/TEHIK-EE/tedi-design-system/issues/1088)) ([9d14a3d](https://github.com/TEHIK-EE/tedi-design-system/commit/9d14a3dd70526eeac26dbdf00a571fd3bca0a356)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.13](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.12...react-13.1.0-rc.13) (2025-09-25) - - -### Bug Fixes - -* **sidenav:** pass id to sidenav-mobile [#935](https://github.com/TEHIK-EE/tedi-design-system/issues/935) ([#1090](https://github.com/TEHIK-EE/tedi-design-system/issues/1090)) ([20faf2b](https://github.com/TEHIK-EE/tedi-design-system/commit/20faf2b695ea575e9d5cc5d7c22954bc6e97af12)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.12](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.11...react-13.1.0-rc.12) (2025-09-23) - - -### Features - -* **vertical-stepper:** add container for icons and link [#512](https://github.com/TEHIK-EE/tedi-design-system/issues/512) ([#1102](https://github.com/TEHIK-EE/tedi-design-system/issues/1102)) ([12ccd3c](https://github.com/TEHIK-EE/tedi-design-system/commit/12ccd3cb0143cd82b60a5251e2a86011bba269e2)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.11](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.10...react-13.1.0-rc.11) (2025-09-22) - - -### Features - -* **vertical-stepper:** export stepitem and subitem from vertical-stepper [#512](https://github.com/TEHIK-EE/tedi-design-system/issues/512) ([02c72a7](https://github.com/TEHIK-EE/tedi-design-system/commit/02c72a7b912a04e92d8a92ce76efcaed42184339)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.10](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.9...react-13.1.0-rc.10) (2025-09-22) - - -### Features - -* **stepper:** add vertical stepper component [#512](https://github.com/TEHIK-EE/tedi-design-system/issues/512) ([c50b6ca](https://github.com/TEHIK-EE/tedi-design-system/commit/c50b6cacf39bee15feb9cf8cdb6f3913803aca1d)) -* **stepper:** add vertical stepper component [#512](https://github.com/TEHIK-EE/tedi-design-system/issues/512) ([f86acdc](https://github.com/TEHIK-EE/tedi-design-system/commit/f86acdc4779bb57c11bb8b7977e10edcc500ae78)) -* **vertical-stepper:** add desktop comment [#512](https://github.com/TEHIK-EE/tedi-design-system/issues/512) ([6a2b542](https://github.com/TEHIK-EE/tedi-design-system/commit/6a2b5428390d6d480bdc147b8a438826e66c687e)) -* **vertical-stepper:** review changes [#512](https://github.com/TEHIK-EE/tedi-design-system/issues/512) ([ee3ab3a](https://github.com/TEHIK-EE/tedi-design-system/commit/ee3ab3ad03900c6a114de4480cd785d26c7595b2)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.8...react-13.1.0-rc.9) (2025-09-19) - - -### Bug Fixes - -* **sidenav:** add classname support to sidenav-mobile component [#936](https://github.com/TEHIK-EE/tedi-design-system/issues/936) ([#1091](https://github.com/TEHIK-EE/tedi-design-system/issues/1091)) ([d2b9d3b](https://github.com/TEHIK-EE/tedi-design-system/commit/d2b9d3b2c7d2f2c9820ca5490048f60ea655541c)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.7...react-13.1.0-rc.8) (2025-09-19) - - -### Bug Fixes - -* **choice-group:** improve focus-visible, fix broken interractions [#877](https://github.com/TEHIK-EE/tedi-design-system/issues/877) ([#1085](https://github.com/TEHIK-EE/tedi-design-system/issues/1085)) ([db901b7](https://github.com/TEHIK-EE/tedi-design-system/commit/db901b7777df34c873ca5ad1829dbdf68480a162)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.6...react-13.1.0-rc.7) (2025-09-19) - - -### Bug Fixes - -* **tooltip,popover:** fix focus trap on tab targeting [#964](https://github.com/TEHIK-EE/tedi-design-system/issues/964) ([#1089](https://github.com/TEHIK-EE/tedi-design-system/issues/1089)) ([d91584d](https://github.com/TEHIK-EE/tedi-design-system/commit/d91584d2faa87003bc332a1579eb7dd25b0fdd10)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.5...react-13.1.0-rc.6) (2025-09-19) - - -### Bug Fixes - -* **select:** prevent backspace from deleting non-removable tags [#1078](https://github.com/TEHIK-EE/tedi-design-system/issues/1078) ([#1083](https://github.com/TEHIK-EE/tedi-design-system/issues/1083)) ([33dfc54](https://github.com/TEHIK-EE/tedi-design-system/commit/33dfc5453ec01311a3c8e39f9d29ba53903ac5c2)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.4...react-13.1.0-rc.5) (2025-09-17) - - -### Bug Fixes - -* **numberfield:** fix wcag 9.4.1.2 and 9.4.1.3 criterias [#1012](https://github.com/TEHIK-EE/tedi-design-system/issues/1012) ([#1082](https://github.com/TEHIK-EE/tedi-design-system/issues/1082)) ([0fe7758](https://github.com/TEHIK-EE/tedi-design-system/commit/0fe775823ea82be1039f8f53bd9d5f284417f845)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.3...react-13.1.0-rc.4) (2025-09-17) - - -### Bug Fixes - -* **textfield:** wcag disabled and label fixes [#1010](https://github.com/TEHIK-EE/tedi-design-system/issues/1010) ([#1081](https://github.com/TEHIK-EE/tedi-design-system/issues/1081)) ([a6b43da](https://github.com/TEHIK-EE/tedi-design-system/commit/a6b43daf4762325df0152031e865bfd37d151810)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.2...react-13.1.0-rc.3) (2025-09-17) - - -### Bug Fixes - -* **skeleton:** screen reader wcag fixes [#1004](https://github.com/TEHIK-EE/tedi-design-system/issues/1004) ([#1080](https://github.com/TEHIK-EE/tedi-design-system/issues/1080)) ([1fba7c9](https://github.com/TEHIK-EE/tedi-design-system/commit/1fba7c9a29ad4cbe5af92ba52a7727b2381349f1)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.1.0-rc.1...react-13.1.0-rc.2) (2025-09-17) - - -### Bug Fixes - -* **spinner:** fix screen reader announcements, fix tests for spinner and tag [#1003](https://github.com/TEHIK-EE/tedi-design-system/issues/1003) ([#1079](https://github.com/TEHIK-EE/tedi-design-system/issues/1079)) ([1d674a3](https://github.com/TEHIK-EE/tedi-design-system/commit/1d674a32bfcf78513e0484bef530cfd6992dce2b)) - -# [@tehik-ee/tedi-react-v13.1.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.0.1-rc.1...react-13.1.0-rc.1) (2025-09-15) - - -### Features - -* **right-panel:** make close button configurable and removable ([#1050](https://github.com/TEHIK-EE/tedi-design-system/issues/1050)) ([6e6b23a](https://github.com/TEHIK-EE/tedi-design-system/commit/6e6b23a5d1c5f62206b241b733b9badfd0a6b73c)), closes [#1044](https://github.com/TEHIK-EE/tedi-design-system/issues/1044) - -# [@tehik-ee/tedi-react-v13.0.1-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.0.0...react-13.0.1-rc.1) (2025-09-15) - - -### Bug Fixes - -* **sidenav:** prevent ghost-click on touch ([#1051](https://github.com/TEHIK-EE/tedi-design-system/issues/1051)) ([3f4e45a](https://github.com/TEHIK-EE/tedi-design-system/commit/3f4e45a00e59621ce51f3b886d8fe979b71e1f81)), closes [#937](https://github.com/TEHIK-EE/tedi-design-system/issues/937) - -# [@tehik-ee/tedi-react-v13.0.0](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.2.1...react-13.0.0) (2025-08-28) - - -### Bug Fixes - -* **button-group:** ensure aria-label is always announced for groups and fix focus styles [#999](https://github.com/TEHIK-EE/tedi-design-system/issues/999) ([#1027](https://github.com/TEHIK-EE/tedi-design-system/issues/1027)) ([bf1ba29](https://github.com/TEHIK-EE/tedi-design-system/commit/bf1ba29dfd29e1b7dab5ea20331ef17f52716cf4)) -* **button:** consolidate loading spinner position for accessibility [#997](https://github.com/TEHIK-EE/tedi-design-system/issues/997) ([#1025](https://github.com/TEHIK-EE/tedi-design-system/issues/1025)) ([2cfd9cd](https://github.com/TEHIK-EE/tedi-design-system/commit/2cfd9cd544fc274b4e13bbf7d63ce629c043a844)) -* **changelog:** fix react changelog [#971](https://github.com/TEHIK-EE/tedi-design-system/issues/971) ([#972](https://github.com/TEHIK-EE/tedi-design-system/issues/972)) ([6fa41ef](https://github.com/TEHIK-EE/tedi-design-system/commit/6fa41eff3593d5e0b41a879601aad117527ebbc9)) -* **collapse:** prevent title from being included in button accessible name [#1002](https://github.com/TEHIK-EE/tedi-design-system/issues/1002) ([#1028](https://github.com/TEHIK-EE/tedi-design-system/issues/1028)) ([b9e4282](https://github.com/TEHIK-EE/tedi-design-system/commit/b9e4282493f01d0f03ba861280cf97f79c294b5c)) -* **floating-button:** prevent text overflow with text-wrap for WCAG compliance [#1001](https://github.com/TEHIK-EE/tedi-design-system/issues/1001) ([#1030](https://github.com/TEHIK-EE/tedi-design-system/issues/1030)) ([b7cb8f8](https://github.com/TEHIK-EE/tedi-design-system/commit/b7cb8f85e76379e9efe269bf07f04776cdaae177)) -* **list:** fix ordered list for screen readers, fix noStyle indendation [#992](https://github.com/TEHIK-EE/tedi-design-system/issues/992) ([#1024](https://github.com/TEHIK-EE/tedi-design-system/issues/1024)) ([a381e67](https://github.com/TEHIK-EE/tedi-design-system/commit/a381e67bdd1282ca019362e653f3041201594e4a)) -* **sidenav:** adjust sidenav item after element top position [#981](https://github.com/TEHIK-EE/tedi-design-system/issues/981) ([#982](https://github.com/TEHIK-EE/tedi-design-system/issues/982)) ([c55646c](https://github.com/TEHIK-EE/tedi-design-system/commit/c55646ce2238e658c188766970b9655b505a0bf4)) -* **storybook:** fix stories [#1031](https://github.com/TEHIK-EE/tedi-design-system/issues/1031) ([#1033](https://github.com/TEHIK-EE/tedi-design-system/issues/1033)) ([97f4b8f](https://github.com/TEHIK-EE/tedi-design-system/commit/97f4b8f3f5c2369b41c4407b57b777aee251bd25)) - - -### Features - -* **labelprovider:** refactor [#921](https://github.com/TEHIK-EE/tedi-design-system/issues/921) ([#922](https://github.com/TEHIK-EE/tedi-design-system/issues/922)) ([613f62d](https://github.com/TEHIK-EE/tedi-design-system/commit/613f62dc1b542f6761fd29e0d84e5bf8488bdea2)) -* **layout:** Adds to community Layout possibility to use Header Sidenav Toggle to toggle own menu ([#979](https://github.com/TEHIK-EE/tedi-design-system/issues/979)) ([e310a20](https://github.com/TEHIK-EE/tedi-design-system/commit/e310a20fdce9bb18c94c40f089db0f06ebaec6f5)), closes [#974](https://github.com/TEHIK-EE/tedi-design-system/issues/974) - - -### BREAKING CHANGES - -* **labelprovider:** getLabel function - -# [@tehik-ee/tedi-react-v13.0.0-rc.10](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.0.0-rc.9...react-13.0.0-rc.10) (2025-08-28) - - -### Bug Fixes - -* **floating-button:** prevent text overflow with text-wrap for WCAG compliance [#1001](https://github.com/TEHIK-EE/tedi-design-system/issues/1001) ([#1030](https://github.com/TEHIK-EE/tedi-design-system/issues/1030)) ([b7cb8f8](https://github.com/TEHIK-EE/tedi-design-system/commit/b7cb8f85e76379e9efe269bf07f04776cdaae177)) - -# [@tehik-ee/tedi-react-v13.0.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.0.0-rc.8...react-13.0.0-rc.9) (2025-08-28) - - -### Bug Fixes - -* **list:** fix ordered list for screen readers, fix noStyle indendation [#992](https://github.com/TEHIK-EE/tedi-design-system/issues/992) ([#1024](https://github.com/TEHIK-EE/tedi-design-system/issues/1024)) ([a381e67](https://github.com/TEHIK-EE/tedi-design-system/commit/a381e67bdd1282ca019362e653f3041201594e4a)) - -# [@tehik-ee/tedi-react-v13.0.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.0.0-rc.7...react-13.0.0-rc.8) (2025-08-28) - - -### Bug Fixes - -* **collapse:** prevent title from being included in button accessible name [#1002](https://github.com/TEHIK-EE/tedi-design-system/issues/1002) ([#1028](https://github.com/TEHIK-EE/tedi-design-system/issues/1028)) ([b9e4282](https://github.com/TEHIK-EE/tedi-design-system/commit/b9e4282493f01d0f03ba861280cf97f79c294b5c)) - -# [@tehik-ee/tedi-react-v13.0.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.0.0-rc.6...react-13.0.0-rc.7) (2025-08-27) - - -### Bug Fixes - -* **button-group:** ensure aria-label is always announced for groups and fix focus styles [#999](https://github.com/TEHIK-EE/tedi-design-system/issues/999) ([#1027](https://github.com/TEHIK-EE/tedi-design-system/issues/1027)) ([bf1ba29](https://github.com/TEHIK-EE/tedi-design-system/commit/bf1ba29dfd29e1b7dab5ea20331ef17f52716cf4)) - -# [@tehik-ee/tedi-react-v13.0.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.0.0-rc.5...react-13.0.0-rc.6) (2025-08-27) - - -### Bug Fixes - -* **button:** consolidate loading spinner position for accessibility [#997](https://github.com/TEHIK-EE/tedi-design-system/issues/997) ([#1025](https://github.com/TEHIK-EE/tedi-design-system/issues/1025)) ([2cfd9cd](https://github.com/TEHIK-EE/tedi-design-system/commit/2cfd9cd544fc274b4e13bbf7d63ce629c043a844)) - -# [@tehik-ee/tedi-react-v13.0.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.0.0-rc.4...react-13.0.0-rc.5) (2025-08-27) - - -### Bug Fixes - -* **storybook:** fix stories [#1031](https://github.com/TEHIK-EE/tedi-design-system/issues/1031) ([#1033](https://github.com/TEHIK-EE/tedi-design-system/issues/1033)) ([97f4b8f](https://github.com/TEHIK-EE/tedi-design-system/commit/97f4b8f3f5c2369b41c4407b57b777aee251bd25)) - -# [@tehik-ee/tedi-react-v13.0.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.0.0-rc.3...react-13.0.0-rc.4) (2025-08-21) - - -### Features - -* **layout:** Adds to community Layout possibility to use Header Sidenav Toggle to toggle own menu ([#979](https://github.com/TEHIK-EE/tedi-design-system/issues/979)) ([e310a20](https://github.com/TEHIK-EE/tedi-design-system/commit/e310a20fdce9bb18c94c40f089db0f06ebaec6f5)), closes [#974](https://github.com/TEHIK-EE/tedi-design-system/issues/974) - -# [@tehik-ee/tedi-react-v13.0.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.0.0-rc.2...react-13.0.0-rc.3) (2025-08-21) - - -### Bug Fixes - -* **sidenav:** adjust sidenav item after element top position [#981](https://github.com/TEHIK-EE/tedi-design-system/issues/981) ([#982](https://github.com/TEHIK-EE/tedi-design-system/issues/982)) ([c55646c](https://github.com/TEHIK-EE/tedi-design-system/commit/c55646ce2238e658c188766970b9655b505a0bf4)) - -# [@tehik-ee/tedi-react-v13.0.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-13.0.0-rc.1...react-13.0.0-rc.2) (2025-08-14) - - -### Bug Fixes - -* **changelog:** fix react changelog [#971](https://github.com/TEHIK-EE/tedi-design-system/issues/971) ([#972](https://github.com/TEHIK-EE/tedi-design-system/issues/972)) ([6fa41ef](https://github.com/TEHIK-EE/tedi-design-system/commit/6fa41eff3593d5e0b41a879601aad117527ebbc9)) - -# [@tehik-ee/tedi-react-v13.0.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.2.1...react-13.0.0-rc.1) (2025-08-14) - -### Features - -- **labelprovider:** refactor [#921](https://github.com/TEHIK-EE/tedi-design-system/issues/921) ([#922](https://github.com/TEHIK-EE/tedi-design-system/issues/922)) ([613f62d](https://github.com/TEHIK-EE/tedi-design-system/commit/613f62dc1b542f6761fd29e0d84e5bf8488bdea2)) - -### BREAKING CHANGES - -- **labelprovider:** getLabel function - -# [@tehik-ee/tedi-react-v13.0.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.2.1...react-13.0.0-rc.1) (2025-08-14) - -### Features - -- **labelprovider:** refactor [#921](https://github.com/TEHIK-EE/tedi-design-system/issues/921) ([#922](https://github.com/TEHIK-EE/tedi-design-system/issues/922)) ([613f62d](https://github.com/TEHIK-EE/tedi-design-system/commit/613f62dc1b542f6761fd29e0d84e5bf8488bdea2)) - -### BREAKING CHANGES - -- **labelprovider:** getLabel function - -# [@tehik-ee/tedi-react-v12.2.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.2.0...react-12.2.1) (2025-07-31) - -### Bug Fixes - -- **map-components:** fix exports [#938](https://github.com/TEHIK-EE/tedi-design-system/issues/938) ([#951](https://github.com/TEHIK-EE/tedi-design-system/issues/951)) ([bb1d5a7](https://github.com/TEHIK-EE/tedi-design-system/commit/bb1d5a7fee734764b781bc9394a0ed53a715b244)) - -# [@tehik-ee/tedi-react-v12.2.1-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.2.0...react-12.2.1-rc.1) (2025-07-31) - -### Bug Fixes - -- **map-components:** fix exports [#938](https://github.com/TEHIK-EE/tedi-design-system/issues/938) ([#951](https://github.com/TEHIK-EE/tedi-design-system/issues/951)) ([bb1d5a7](https://github.com/TEHIK-EE/tedi-design-system/commit/bb1d5a7fee734764b781bc9394a0ed53a715b244)) - -# [@tehik-ee/tedi-react-v12.2.0](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.1.0...react-12.2.0) (2025-07-02) - -### Features - -- **map-components:** update names, add exports, add new components [#911](https://github.com/TEHIK-EE/tedi-design-system/issues/911) ([#915](https://github.com/TEHIK-EE/tedi-design-system/issues/915)) ([b85e5c4](https://github.com/TEHIK-EE/tedi-design-system/commit/b85e5c4f99a708bc6542071788b06ef11149b520)) - -# [@tehik-ee/tedi-react-v12.1.0](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.0.2...react-12.1.0) (2025-06-26) - -### Bug Fixes - -- **react:** fix changelog [#820](https://github.com/TEHIK-EE/tedi-design-system/issues/820) ([c1a5c64](https://github.com/TEHIK-EE/tedi-design-system/commit/c1a5c64364b204cb46fb975e034d45154e083baf)) -- **select:** fix async select input [#743](https://github.com/TEHIK-EE/tedi-design-system/issues/743) ([#861](https://github.com/TEHIK-EE/tedi-design-system/issues/861)) ([608dc50](https://github.com/TEHIK-EE/tedi-design-system/commit/608dc506b4922900e2215d70ab977feea9a3b492)) - -### Features - -- **alert:** TEDI-Ready component [#820](https://github.com/TEHIK-EE/tedi-design-system/issues/820) ([#831](https://github.com/TEHIK-EE/tedi-design-system/issues/831)) ([454bf75](https://github.com/TEHIK-EE/tedi-design-system/commit/454bf75b3c0df590beab49a0b8f59eeafac98ef0)) -- **community-form-multiselect:** add multiselect capabilities to community select [#640](https://github.com/TEHIK-EE/tedi-design-system/issues/640) ([5b8905c](https://github.com/TEHIK-EE/tedi-design-system/commit/5b8905c03fa7017aa1ea68f0dd7f5e82b5a0f78d)) -- **map-components:** add kaardirakendus components for storybook [#888](https://github.com/TEHIK-EE/tedi-design-system/issues/888) ([#889](https://github.com/TEHIK-EE/tedi-design-system/issues/889)) ([2c7524f](https://github.com/TEHIK-EE/tedi-design-system/commit/2c7524fcd23a6b3a71f71d87fe9422d40cce5ed6)) -- **sidenav:** sizes prop, refactor css, add sidenav item states example [#832](https://github.com/TEHIK-EE/tedi-design-system/issues/832) ([#881](https://github.com/TEHIK-EE/tedi-design-system/issues/881)) ([9432d22](https://github.com/TEHIK-EE/tedi-design-system/commit/9432d22588c79ace749b15a29c876bd3164f0ed3)) - -# [@tehik-ee/tedi-react-v12.1.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.1.0-rc.3...react-12.1.0-rc.4) (2025-06-26) - -### Features - -- **sidenav:** sizes prop, refactor css, add sidenav item states example [#832](https://github.com/TEHIK-EE/tedi-design-system/issues/832) ([#881](https://github.com/TEHIK-EE/tedi-design-system/issues/881)) ([9432d22](https://github.com/TEHIK-EE/tedi-design-system/commit/9432d22588c79ace749b15a29c876bd3164f0ed3)) - -# [@tehik-ee/tedi-react-v12.1.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.1.0-rc.2...react-12.1.0-rc.3) (2025-06-25) - -### Features - -- **map-components:** add kaardirakendus components for storybook [#888](https://github.com/TEHIK-EE/tedi-design-system/issues/888) ([#889](https://github.com/TEHIK-EE/tedi-design-system/issues/889)) ([2c7524f](https://github.com/TEHIK-EE/tedi-design-system/commit/2c7524fcd23a6b3a71f71d87fe9422d40cce5ed6)) - -# [@tehik-ee/tedi-react-v12.1.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.1.0-rc.1...react-12.1.0-rc.2) (2025-06-20) - -### Bug Fixes - -- **react:** fix changelog [#820](https://github.com/TEHIK-EE/tedi-design-system/issues/820) ([c1a5c64](https://github.com/TEHIK-EE/tedi-design-system/commit/c1a5c64364b204cb46fb975e034d45154e083baf)) - -### Features - -- **alert:** TEDI-Ready component [#820](https://github.com/TEHIK-EE/tedi-design-system/issues/820) ([#831](https://github.com/TEHIK-EE/tedi-design-system/issues/831)) ([454bf75](https://github.com/TEHIK-EE/tedi-design-system/commit/454bf75b3c0df590beab49a0b8f59eeafac98ef0)) - -# [@tehik-ee/tedi-react-v12.1.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.0.2...react-12.1.0-rc.1) (2025-06-12) - -### Bug Fixes - -- **select:** fix async select input [#743](https://github.com/TEHIK-EE/tedi-design-system/issues/743) ([#861](https://github.com/TEHIK-EE/tedi-design-system/issues/861)) ([608dc50](https://github.com/TEHIK-EE/tedi-design-system/commit/608dc506b4922900e2215d70ab977feea9a3b492)) - -### Features - -- **community-form-multiselect:** add multiselect capabilities to community select [#640](https://github.com/TEHIK-EE/tedi-design-system/issues/640) ([5b8905c](https://github.com/TEHIK-EE/tedi-design-system/commit/5b8905c03fa7017aa1ea68f0dd7f5e82b5a0f78d)) - -# [@tehik-ee/tedi-react-v12.0.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.0.1...react-12.0.2) (2025-06-05) - -### Bug Fixes - -- **dayjs:** change labelprovider, move dayjs to peer-dependency [#850](https://github.com/TEHIK-EE/tedi-design-system/issues/850) ([#856](https://github.com/TEHIK-EE/tedi-design-system/issues/856)) ([f479ed5](https://github.com/TEHIK-EE/tedi-design-system/commit/f479ed540bfaa2435dbdf0be74615962031a3b73)) - -# [@tehik-ee/tedi-react-v12.0.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.0.0...react-12.0.1) (2025-06-02) - -### Bug Fixes - -- **text-field:** fix small textfield [#844](https://github.com/TEHIK-EE/tedi-design-system/issues/844) ([#846](https://github.com/TEHIK-EE/tedi-design-system/issues/846)) ([5cfed4e](https://github.com/TEHIK-EE/tedi-design-system/commit/5cfed4e145ac88ee7b93c09ec4419de6f4cb2f49)) - -# [@tehik-ee/tedi-react-v12.0.0](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.3...react-12.0.0) (2025-05-29) - -### Bug Fixes - -- **alert:** prevent icon to be partially hidden if text grows larger [#744](https://github.com/TEHIK-EE/tedi-design-system/issues/744) ([#746](https://github.com/TEHIK-EE/tedi-design-system/issues/746)) ([2ed1af4](https://github.com/TEHIK-EE/tedi-design-system/commit/2ed1af4ff20176564e7ad83e1341c39a88584908)) -- **angular-community-components:** remove deprecated angular community components [#830](https://github.com/TEHIK-EE/tedi-design-system/issues/830) ([#833](https://github.com/TEHIK-EE/tedi-design-system/issues/833)) ([aedd8d0](https://github.com/TEHIK-EE/tedi-design-system/commit/aedd8d07d9200f680048ff6c48724c9927f7f477)) -- **feedback-text:** fix default type description [#667](https://github.com/TEHIK-EE/tedi-design-system/issues/667) ([#772](https://github.com/TEHIK-EE/tedi-design-system/issues/772)) ([6966cc3](https://github.com/TEHIK-EE/tedi-design-system/commit/6966cc3441dd55c3dd940205b8d1c83f1fac5f62)) -- **file-upload:** file information fix [#727](https://github.com/TEHIK-EE/tedi-design-system/issues/727) ([#730](https://github.com/TEHIK-EE/tedi-design-system/issues/730)) ([e017623](https://github.com/TEHIK-EE/tedi-design-system/commit/e017623ab44ac6282f6c5a394f5a579392d51377)) -- **react-types:** add missing types [#798](https://github.com/TEHIK-EE/tedi-design-system/issues/798) ([#811](https://github.com/TEHIK-EE/tedi-design-system/issues/811)) ([4882bed](https://github.com/TEHIK-EE/tedi-design-system/commit/4882bed318fba26c46c9107ff85f1ceb7738dfef)) -- **text-group:** label width ignored when value is longer fix [#794](https://github.com/TEHIK-EE/tedi-design-system/issues/794) ([#799](https://github.com/TEHIK-EE/tedi-design-system/issues/799)) ([5dac227](https://github.com/TEHIK-EE/tedi-design-system/commit/5dac227e0d1a614a7bf4333176d576fc83989dde)) -- **useBreakpointProps:** remove window usage in SSR, add defaultServerBreakpoint [#786](https://github.com/TEHIK-EE/tedi-design-system/issues/786) ([#789](https://github.com/TEHIK-EE/tedi-design-system/issues/789)) ([2a61ed3](https://github.com/TEHIK-EE/tedi-design-system/commit/2a61ed3ff3e9ce0e7ac114586190f8f2fcec136d)) -- **useIsTouchDevice:** remove window usage in SSR, initalize what-input inside useEffect [#778](https://github.com/TEHIK-EE/tedi-design-system/issues/778) ([#809](https://github.com/TEHIK-EE/tedi-design-system/issues/809)) ([c550caa](https://github.com/TEHIK-EE/tedi-design-system/commit/c550caaa49c0f545f78553bd4cc7bb3114fdba14)) -- **usePrint:** remove window usage in SSR [#827](https://github.com/TEHIK-EE/tedi-design-system/issues/827) ([#828](https://github.com/TEHIK-EE/tedi-design-system/issues/828)) ([9f10c1b](https://github.com/TEHIK-EE/tedi-design-system/commit/9f10c1b8714b8c6ab63800a5e6dea056d10f77fb)) - -### Features - -- **accessibiltyProvider:** move initalizing what-input inside AccessibiltyProvider [#786](https://github.com/TEHIK-EE/tedi-design-system/issues/786) ([#790](https://github.com/TEHIK-EE/tedi-design-system/issues/790)) ([c97eae2](https://github.com/TEHIK-EE/tedi-design-system/commit/c97eae2a56dce536fe6a0c64fe2987ed5f9e4077)) -- **list:** Add ability to change bullet colors [#719](https://github.com/TEHIK-EE/tedi-design-system/issues/719) ([#821](https://github.com/TEHIK-EE/tedi-design-system/issues/821)) ([5a56437](https://github.com/TEHIK-EE/tedi-design-system/commit/5a5643705e492ea6ae5a521fdc8604c43c119abc)) -- **scss:** responsive-style scss function uptade ([#749](https://github.com/TEHIK-EE/tedi-design-system/issues/749)) ([975ef75](https://github.com/TEHIK-EE/tedi-design-system/commit/975ef75c91ea99c5c740f5a92dd647007230092c)), closes [#748](https://github.com/TEHIK-EE/tedi-design-system/issues/748) [#748](https://github.com/TEHIK-EE/tedi-design-system/issues/748) -- **sidenav:** sidenav development [#511](https://github.com/TEHIK-EE/tedi-design-system/issues/511) ([#829](https://github.com/TEHIK-EE/tedi-design-system/issues/829)) ([85b8c2b](https://github.com/TEHIK-EE/tedi-design-system/commit/85b8c2b6c96f8a3cbb8df7ff7ccbf4954883f626)), closes [#696](https://github.com/TEHIK-EE/tedi-design-system/issues/696) -- **tedi-react:** fix tree shaking and type errors [#707](https://github.com/TEHIK-EE/tedi-design-system/issues/707) ([#717](https://github.com/TEHIK-EE/tedi-design-system/issues/717)) ([25061b8](https://github.com/TEHIK-EE/tedi-design-system/commit/25061b81b864b9a0a8a6fa238e2252c9d3f8e5b3)) - -### BREAKING CHANGES - -- **angular-community-components:** remove angular community component -- **angular-community-components:** remove community info button -- **angular-community-components:** remove community feedback-text -- **angular-community-components:** remove community link - -# [@tehik-ee/tedi-react-v12.0.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-12.0.0-rc.1...react-12.0.0-rc.2) (2025-05-29) - -### Features - -- **sidenav:** sidenav development [#511](https://github.com/TEHIK-EE/tedi-design-system/issues/511) ([#829](https://github.com/TEHIK-EE/tedi-design-system/issues/829)) ([85b8c2b](https://github.com/TEHIK-EE/tedi-design-system/commit/85b8c2b6c96f8a3cbb8df7ff7ccbf4954883f626)), closes [#696](https://github.com/TEHIK-EE/tedi-design-system/issues/696) - -# [@tehik-ee/tedi-react-v12.0.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.4.0-rc.9...react-12.0.0-rc.1) (2025-05-29) - -### Bug Fixes - -- **angular-community-components:** remove deprecated angular community components [#830](https://github.com/TEHIK-EE/tedi-design-system/issues/830) ([#833](https://github.com/TEHIK-EE/tedi-design-system/issues/833)) ([aedd8d0](https://github.com/TEHIK-EE/tedi-design-system/commit/aedd8d07d9200f680048ff6c48724c9927f7f477)) - -### BREAKING CHANGES - -- **angular-community-components:** remove angular community component -- **angular-community-components:** remove community info button -- **angular-community-components:** remove community feedback-text -- **angular-community-components:** remove community link - -# [@tehik-ee/tedi-react-v11.4.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.4.0-rc.8...react-11.4.0-rc.9) (2025-05-29) - -### Bug Fixes - -- **usePrint:** remove window usage in SSR [#827](https://github.com/TEHIK-EE/tedi-design-system/issues/827) ([#828](https://github.com/TEHIK-EE/tedi-design-system/issues/828)) ([9f10c1b](https://github.com/TEHIK-EE/tedi-design-system/commit/9f10c1b8714b8c6ab63800a5e6dea056d10f77fb)) - -# [@tehik-ee/tedi-react-v11.4.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.4.0-rc.7...react-11.4.0-rc.8) (2025-05-27) - -### Features - -- **list:** Add ability to change bullet colors [#719](https://github.com/TEHIK-EE/tedi-design-system/issues/719) ([#821](https://github.com/TEHIK-EE/tedi-design-system/issues/821)) ([5a56437](https://github.com/TEHIK-EE/tedi-design-system/commit/5a5643705e492ea6ae5a521fdc8604c43c119abc)) - -# [@tehik-ee/tedi-react-v11.4.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.4.0-rc.6...react-11.4.0-rc.7) (2025-05-22) - -### Bug Fixes - -- **react-types:** add missing types [#798](https://github.com/TEHIK-EE/tedi-design-system/issues/798) ([#811](https://github.com/TEHIK-EE/tedi-design-system/issues/811)) ([4882bed](https://github.com/TEHIK-EE/tedi-design-system/commit/4882bed318fba26c46c9107ff85f1ceb7738dfef)) - -# [@tehik-ee/tedi-react-v11.4.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.4.0-rc.5...react-11.4.0-rc.6) (2025-05-20) - -### Bug Fixes - -- **text-group:** label width ignored when value is longer fix [#794](https://github.com/TEHIK-EE/tedi-design-system/issues/794) ([#799](https://github.com/TEHIK-EE/tedi-design-system/issues/799)) ([5dac227](https://github.com/TEHIK-EE/tedi-design-system/commit/5dac227e0d1a614a7bf4333176d576fc83989dde)) - -# [@tehik-ee/tedi-react-v11.4.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.4.0-rc.4...react-11.4.0-rc.5) (2025-05-20) - -### Bug Fixes - -- **useIsTouchDevice:** remove window usage in SSR, initalize what-input inside useEffect [#778](https://github.com/TEHIK-EE/tedi-design-system/issues/778) ([#809](https://github.com/TEHIK-EE/tedi-design-system/issues/809)) ([c550caa](https://github.com/TEHIK-EE/tedi-design-system/commit/c550caaa49c0f545f78553bd4cc7bb3114fdba14)) - -# [@tehik-ee/tedi-react-v11.4.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.4.0-rc.3...react-11.4.0-rc.4) (2025-05-16) - -### Features - -- **accessibiltyProvider:** move initalizing what-input inside AccessibiltyProvider [#786](https://github.com/TEHIK-EE/tedi-design-system/issues/786) ([#790](https://github.com/TEHIK-EE/tedi-design-system/issues/790)) ([c97eae2](https://github.com/TEHIK-EE/tedi-design-system/commit/c97eae2a56dce536fe6a0c64fe2987ed5f9e4077)) - -# [@tehik-ee/tedi-react-v11.4.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.4.0-rc.2...react-11.4.0-rc.3) (2025-05-16) - -### Bug Fixes - -- **useBreakpointProps:** remove window usage in SSR, add defaultServerBreakpoint [#786](https://github.com/TEHIK-EE/tedi-design-system/issues/786) ([#789](https://github.com/TEHIK-EE/tedi-design-system/issues/789)) ([2a61ed3](https://github.com/TEHIK-EE/tedi-design-system/commit/2a61ed3ff3e9ce0e7ac114586190f8f2fcec136d)) - -# [@tehik-ee/tedi-react-v11.4.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.4.0-rc.1...react-11.4.0-rc.2) (2025-05-12) - -### Features - -- **tedi-react:** fix tree shaking and type errors [#707](https://github.com/TEHIK-EE/tedi-design-system/issues/707) ([#717](https://github.com/TEHIK-EE/tedi-design-system/issues/717)) ([25061b8](https://github.com/TEHIK-EE/tedi-design-system/commit/25061b81b864b9a0a8a6fa238e2252c9d3f8e5b3)) - -# [@tehik-ee/tedi-react-v11.4.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.4-rc.1...react-11.4.0-rc.1) (2025-05-07) - -### Features - -- **scss:** responsive-style scss function uptade ([#749](https://github.com/TEHIK-EE/tedi-design-system/issues/749)) ([975ef75](https://github.com/TEHIK-EE/tedi-design-system/commit/975ef75c91ea99c5c740f5a92dd647007230092c)), closes [#748](https://github.com/TEHIK-EE/tedi-design-system/issues/748) [#748](https://github.com/TEHIK-EE/tedi-design-system/issues/748) - -# [@tehik-ee/tedi-react-v11.3.4-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.3...react-11.3.4-rc.1) (2025-05-07) - -### Bug Fixes - -- **alert:** prevent icon to be partially hidden if text grows larger [#744](https://github.com/TEHIK-EE/tedi-design-system/issues/744) ([#746](https://github.com/TEHIK-EE/tedi-design-system/issues/746)) ([2ed1af4](https://github.com/TEHIK-EE/tedi-design-system/commit/2ed1af4ff20176564e7ad83e1341c39a88584908)) -- **feedback-text:** fix default type description [#667](https://github.com/TEHIK-EE/tedi-design-system/issues/667) ([#772](https://github.com/TEHIK-EE/tedi-design-system/issues/772)) ([6966cc3](https://github.com/TEHIK-EE/tedi-design-system/commit/6966cc3441dd55c3dd940205b8d1c83f1fac5f62)) -- **file-upload:** file information fix [#727](https://github.com/TEHIK-EE/tedi-design-system/issues/727) ([#730](https://github.com/TEHIK-EE/tedi-design-system/issues/730)) ([e017623](https://github.com/TEHIK-EE/tedi-design-system/commit/e017623ab44ac6282f6c5a394f5a579392d51377)) - -# [@tehik-ee/tedi-react-v11.3.3](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.2...react-11.3.3) (2025-05-07) - -### Bug Fixes - -- **choice-group:** add missing exports [#708](https://github.com/TEHIK-EE/tedi-design-system/issues/708) ([#767](https://github.com/TEHIK-EE/tedi-design-system/issues/767)) ([76a3f1a](https://github.com/TEHIK-EE/tedi-design-system/commit/76a3f1a2a48664b1195ffc4d352a4e6a905fcbaf)) - -# [@tehik-ee/tedi-react-v11.3.3-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.3-rc.2...react-11.3.3-rc.3) (2025-05-07) - -### Bug Fixes - -- **feedback-text:** fix default type description [#667](https://github.com/TEHIK-EE/tedi-design-system/issues/667) ([#772](https://github.com/TEHIK-EE/tedi-design-system/issues/772)) ([6966cc3](https://github.com/TEHIK-EE/tedi-design-system/commit/6966cc3441dd55c3dd940205b8d1c83f1fac5f62)) - -# [@tehik-ee/tedi-react-v11.3.3-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.3-rc.1...react-11.3.3-rc.2) (2025-05-06) - -### Bug Fixes - -- **alert:** prevent icon to be partially hidden if text grows larger [#744](https://github.com/TEHIK-EE/tedi-design-system/issues/744) ([#746](https://github.com/TEHIK-EE/tedi-design-system/issues/746)) ([2ed1af4](https://github.com/TEHIK-EE/tedi-design-system/commit/2ed1af4ff20176564e7ad83e1341c39a88584908)) - -# [@tehik-ee/tedi-react-v11.3.3-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.2...react-11.3.3-rc.1) (2025-05-05) - -### Bug Fixes - -- **file-upload:** file information fix [#727](https://github.com/TEHIK-EE/tedi-design-system/issues/727) ([#730](https://github.com/TEHIK-EE/tedi-design-system/issues/730)) ([e017623](https://github.com/TEHIK-EE/tedi-design-system/commit/e017623ab44ac6282f6c5a394f5a579392d51377)) - -# [@tehik-ee/tedi-react-v11.3.2-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.1...react-11.3.2-rc.1) (2025-05-05) - -# [@tehik-ee/tedi-react-v11.3.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.1...react-11.3.2) (2025-05-05) - -### Bug Fixes - -- **tooltip,popover:** add missing exports [#711](https://github.com/TEHIK-EE/tedi-design-system/issues/711) ([#765](https://github.com/TEHIK-EE/tedi-design-system/issues/765)) ([228047e](https://github.com/TEHIK-EE/tedi-design-system/commit/228047e0c22a7ca2aba2488f457963a0ad0a1302)) - -# [@tehik-ee/tedi-react-v11.3.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0...react-11.3.1) (2025-05-05) - -### Bug Fixes - -- **file-upload:** file information fix [#727](https://github.com/TEHIK-EE/tedi-design-system/issues/727) ([#730](https://github.com/TEHIK-EE/tedi-design-system/issues/730)) ([e017623](https://github.com/TEHIK-EE/tedi-design-system/commit/e017623ab44ac6282f6c5a394f5a579392d51377)) - -### Bug Fixes - -- **tooltip,popover:** add missing exports [#711](https://github.com/TEHIK-EE/tedi-design-system/issues/711) ([#760](https://github.com/TEHIK-EE/tedi-design-system/issues/760)) ([d46efcb](https://github.com/TEHIK-EE/tedi-design-system/commit/d46efcb0d4a472de8a39444595d31d4c6e747997)) - -# [@tehik-ee/tedi-react-v11.3.1-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0...react-11.3.1-rc.1) (2025-05-02) - -- **tooltip,popover:** add missing exports [#711](https://github.com/TEHIK-EE/tedi-design-system/issues/711) ([#765](https://github.com/TEHIK-EE/tedi-design-system/issues/765)) ([228047e](https://github.com/TEHIK-EE/tedi-design-system/commit/228047e0c22a7ca2aba2488f457963a0ad0a1302)) - -# [@tehik-ee/tedi-react-v11.3.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0...react-11.3.1) (2025-05-05) - -### Bug Fixes - -- **file-upload:** file information fix [#727](https://github.com/TEHIK-EE/tedi-design-system/issues/727) ([#730](https://github.com/TEHIK-EE/tedi-design-system/issues/730)) ([e017623](https://github.com/TEHIK-EE/tedi-design-system/commit/e017623ab44ac6282f6c5a394f5a579392d51377)) - -# [@tehik-ee/tedi-react-v11.3.0-rc.14](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0-rc.13...react-11.3.0-rc.14) (2025-04-24) - -### Features - -- **collapse:** TEDI-Ready Collapse component development [#696](https://github.com/TEHIK-EE/tedi-design-system/issues/696) ([#722](https://github.com/TEHIK-EE/tedi-design-system/issues/722)) ([69afc05](https://github.com/TEHIK-EE/tedi-design-system/commit/69afc052572ec0ef8c3c6719efb0731d99103b3a)) - -# [@tehik-ee/tedi-react-v11.3.0-rc.13](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0-rc.12...react-11.3.0-rc.13) (2025-04-24) - -### Bug Fixes - -- **ellipsis:** Fix user focus trapping inside popover [#723](https://github.com/TEHIK-EE/tedi-design-system/issues/723) ([#724](https://github.com/TEHIK-EE/tedi-design-system/issues/724)) ([f9bb317](https://github.com/TEHIK-EE/tedi-design-system/commit/f9bb317095f9f0435c3e1405e67367b35b7ab977)) - -# [@tehik-ee/tedi-react-v11.3.0-rc.12](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0-rc.11...react-11.3.0-rc.12) (2025-04-24) - -### Bug Fixes - -- **select:** Select dropdown z-index inside modal [#715](https://github.com/TEHIK-EE/tedi-design-system/issues/715) ([#720](https://github.com/TEHIK-EE/tedi-design-system/issues/720)) ([347b4d8](https://github.com/TEHIK-EE/tedi-design-system/commit/347b4d817a48b90db2bf07d3ea3cb642711e2206)) - -# [@tehik-ee/tedi-react-v11.3.0-rc.11](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0-rc.10...react-11.3.0-rc.11) (2025-04-24) - -### Bug Fixes - -- **status-badge:** fix abbreviation styles [#714](https://github.com/TEHIK-EE/tedi-design-system/issues/714) ([#721](https://github.com/TEHIK-EE/tedi-design-system/issues/721)) ([4e2199d](https://github.com/TEHIK-EE/tedi-design-system/commit/4e2199da94b07cb86f16abe625077c54ef46e085)) - -# [@tehik-ee/tedi-react-v11.3.0-rc.10](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0-rc.9...react-11.3.0-rc.10) (2025-04-21) - -### Bug Fixes - -- **select:** encapsulate tedi styles [#700](https://github.com/TEHIK-EE/tedi-design-system/issues/700) ([#704](https://github.com/TEHIK-EE/tedi-design-system/issues/704)) ([fcc0c36](https://github.com/TEHIK-EE/tedi-design-system/commit/fcc0c3669eaf60d311d6f9e1a5365edb299f87b9)) - -# [@tehik-ee/tedi-react-v11.3.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0-rc.8...react-11.3.0-rc.9) (2025-04-17) - -### Bug Fixes - -- **tooltip,popover:** fix exports [#705](https://github.com/TEHIK-EE/tedi-design-system/issues/705) ([#706](https://github.com/TEHIK-EE/tedi-design-system/issues/706)) ([c5d425f](https://github.com/TEHIK-EE/tedi-design-system/commit/c5d425f7fdfd1b64ce649ae0e6dac9c79dac70ac)) - -# [@tehik-ee/tedi-react-v11.3.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0-rc.7...react-11.3.0-rc.8) (2025-04-17) - -### Features - -- **select:** Community select input bug fix [[#695](https://github.com/TEHIK-EE/tedi-design-system/issues/695)] ([#698](https://github.com/TEHIK-EE/tedi-design-system/issues/698)) ([2b4a2c9](https://github.com/TEHIK-EE/tedi-design-system/commit/2b4a2c9630cc90275b0853061bf54a3f40faa275)) - -# [@tehik-ee/tedi-react-v11.3.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0-rc.6...react-11.3.0-rc.7) (2025-04-14) - -### Features - -- **text-group:** add text group component with horizontal and vertic… ([#687](https://github.com/TEHIK-EE/tedi-design-system/issues/687)) ([7860191](https://github.com/TEHIK-EE/tedi-design-system/commit/78601910e65b400e5447fd2c2742170438fafa99)), closes [#664](https://github.com/TEHIK-EE/tedi-design-system/issues/664) [#664](https://github.com/TEHIK-EE/tedi-design-system/issues/664) [#664](https://github.com/TEHIK-EE/tedi-design-system/issues/664) [#664](https://github.com/TEHIK-EE/tedi-design-system/issues/664) [#664](https://github.com/TEHIK-EE/tedi-design-system/issues/664) [#664](https://github.com/TEHIK-EE/tedi-design-system/issues/664) - -# [@tehik-ee/tedi-react-v11.3.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0-rc.5...react-11.3.0-rc.6) (2025-04-08) - -### Features - -- **select:** TEDI Select development [#333](https://github.com/TEHIK-EE/tedi-design-system/issues/333) ([#670](https://github.com/TEHIK-EE/tedi-design-system/issues/670)) ([7d1c768](https://github.com/TEHIK-EE/tedi-design-system/commit/7d1c7684e10b91baa2ca969d696e063f273da51f)) - -# [@tehik-ee/tedi-react-v11.3.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0-rc.4...react-11.3.0-rc.5) (2025-04-04) - -# [@tehik-ee/tedi-react-v11.2.4](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.3...react-11.2.4) (2025-04-04) - -### Bug Fixes - -- **AccessibilityProvider:** remove community provider, export tedi one [#657](https://github.com/TEHIK-EE/tedi-design-system/issues/657) ([#659](https://github.com/TEHIK-EE/tedi-design-system/issues/659)) ([d97fd9e](https://github.com/TEHIK-EE/tedi-design-system/commit/d97fd9e1f4b9e7180c0754a0d3769540da0444b0)) - -# [@tehik-ee/tedi-react-v11.3.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0-rc.3...react-11.3.0-rc.4) (2025-04-04) - -# [@tehik-ee/tedi-react-v11.2.3](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.2...react-11.2.3) (2025-04-04) - -### Bug Fixes - -- **icon:** icon sizes to rems, icon loading layout shift fix [#645](https://github.com/TEHIK-EE/tedi-design-system/issues/645) [#647](https://github.com/TEHIK-EE/tedi-design-system/issues/647) ([#652](https://github.com/TEHIK-EE/tedi-design-system/issues/652)) ([1dddc8c](https://github.com/TEHIK-EE/tedi-design-system/commit/1dddc8ce0465391f76e2dc61299b1f634ba164a7)) - -### Bug Fixes - -- **icon:** icon sizes to rems, icon loading layout shift fix [#645](https://github.com/TEHIK-EE/tedi-design-system/issues/645) [#647](https://github.com/TEHIK-EE/tedi-design-system/issues/647) ([#652](https://github.com/TEHIK-EE/tedi-design-system/issues/652)) ([1dddc8c](https://github.com/TEHIK-EE/tedi-design-system/commit/1dddc8ce0465391f76e2dc61299b1f634ba164a7)) - -# [@tehik-ee/tedi-react-v11.2.3](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.2...react-11.2.3) (2025-04-04) - -- **tabs-nav-item:** fix printing [#569](https://github.com/TEHIK-EE/tedi-design-system/issues/569) ([#646](https://github.com/TEHIK-EE/tedi-design-system/issues/646)) ([5a59b7c](https://github.com/TEHIK-EE/tedi-design-system/commit/5a59b7cdc6fcbe6b1946771da6ae32f214f3573a)) - -# [@tehik-ee/tedi-react-v11.3.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0-rc.2...react-11.3.0-rc.3) (2025-04-03) - -# [@tehik-ee/tedi-react-v11.3.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.3.0-rc.1...react-11.3.0-rc.2) (2025-04-02) - -# [@tehik-ee/tedi-react-v11.3.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.2-rc.2...react-11.3.0-rc.1) (2025-04-02) - -### Bug Fixes - -- **choice-group:** allow defaultChecked for checkboxes [#648](https://github.com/TEHIK-EE/tedi-design-system/issues/648) ([#649](https://github.com/TEHIK-EE/tedi-design-system/issues/649)) ([90bff42](https://github.com/TEHIK-EE/tedi-design-system/commit/90bff4200a9205bf2a50c2656115414d7c0af830)) - -# [@tehik-ee/tedi-react-v11.2.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.1...react-11.2.2) (2025-04-02) - -### Bug Fixes - -- **card:** add default background values for CardHeader and CardContent [#632](https://github.com/TEHIK-EE/tedi-design-system/issues/632) ([#635](https://github.com/TEHIK-EE/tedi-design-system/issues/635)) ([ab33238](https://github.com/TEHIK-EE/tedi-design-system/commit/ab332383022eb317ddb9e0441f03817919aeda84)) - -# [@tehik-ee/tedi-react-v11.2.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.1...react-11.2.2) (2025-04-02) - -### Features - -- **button,link:** Add ability to display flexed Icons for Link, fix long text in Button [#463](https://github.com/TEHIK-EE/tedi-design-system/issues/463) ([#537](https://github.com/TEHIK-EE/tedi-design-system/issues/537)) ([62030e6](https://github.com/TEHIK-EE/tedi-design-system/commit/62030e660ab0eb66afe267ee60501b67f16c9f0a)) - -# [@tehik-ee/tedi-react-v11.2.2-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.2-rc.1...react-11.2.2-rc.2) (2025-04-02) - -### Bug Fixes - -- **scroll-visibility:** add focus-within selector back to css [#588](https://github.com/TEHIK-EE/tedi-design-system/issues/588) ([#597](https://github.com/TEHIK-EE/tedi-design-system/issues/597)) ([e99808d](https://github.com/TEHIK-EE/tedi-design-system/commit/e99808d50d97e4f6a5ae4da03ab1155f6a26b44b)) - -# [@tehik-ee/tedi-react-v11.2.2-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.1...react-11.2.2-rc.1) (2025-04-02) - -- **choice-group:** allow defaultChecked for checkboxes [#648](https://github.com/TEHIK-EE/tedi-design-system/issues/648) ([#649](https://github.com/TEHIK-EE/tedi-design-system/issues/649)) ([90bff42](https://github.com/TEHIK-EE/tedi-design-system/commit/90bff4200a9205bf2a50c2656115414d7c0af830)) - -# [@tehik-ee/tedi-react-v11.2.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0...react-11.2.1) (2025-04-02) - -### Bug Fixes - -- **text-group,file-upload,file-dropzone:** add missing exports [#642](https://github.com/TEHIK-EE/tedi-design-system/issues/642) ([#644](https://github.com/TEHIK-EE/tedi-design-system/issues/644)) ([5d7bbec](https://github.com/TEHIK-EE/tedi-design-system/commit/5d7bbec3a79323fadb4e664021f3cddb33911ba6)) - -# [@tehik-ee/tedi-react-v11.2.0](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.3...react-11.2.0) (2025-03-27) - -### Bug Fixes - -- **button-group:** secondary buttons height [#613](https://github.com/TEHIK-EE/tedi-design-system/issues/613) ([#614](https://github.com/TEHIK-EE/tedi-design-system/issues/614)) ([f81bfd7](https://github.com/TEHIK-EE/tedi-design-system/commit/f81bfd76f8499150e8c9f844d8fee2fc3272d24b)) -- **card:** fix card stories [#580](https://github.com/TEHIK-EE/tedi-design-system/issues/580) ([#591](https://github.com/TEHIK-EE/tedi-design-system/issues/591)) ([3be2544](https://github.com/TEHIK-EE/tedi-design-system/commit/3be254422bcfd4dc226c0ae52b39d6d7bb0cca28)), closes [#556](https://github.com/TEHIK-EE/tedi-design-system/issues/556) -- **choice-group:** allow React.ReactNode type for label [#617](https://github.com/TEHIK-EE/tedi-design-system/issues/617) ([#618](https://github.com/TEHIK-EE/tedi-design-system/issues/618)) ([cfe035c](https://github.com/TEHIK-EE/tedi-design-system/commit/cfe035cfbbcdcefeaed773f352d27460ee234d61)) -- **chore:** fix vite.config manual-chunks [#549](https://github.com/TEHIK-EE/tedi-design-system/issues/549) ([#550](https://github.com/TEHIK-EE/tedi-design-system/issues/550)) ([cdf78b0](https://github.com/TEHIK-EE/tedi-design-system/commit/cdf78b03747b655ac2086bc99f615c5242e0ac10)) -- **radio,checkbox,choice-group:** allow custom labels [#617](https://github.com/TEHIK-EE/tedi-design-system/issues/617) ([#620](https://github.com/TEHIK-EE/tedi-design-system/issues/620)) ([19be632](https://github.com/TEHIK-EE/tedi-design-system/commit/19be632ccabe59ec9c146e637dd69e08e36c5104)) -- **radio,checkbox:** add missing labelRef [#617](https://github.com/TEHIK-EE/tedi-design-system/issues/617) ([#622](https://github.com/TEHIK-EE/tedi-design-system/issues/622)) ([55abfb0](https://github.com/TEHIK-EE/tedi-design-system/commit/55abfb071bbea8b89cf030851b22b5c7afeb7103)) -- **sidenav:** design tweaks [#526](https://github.com/TEHIK-EE/tedi-design-system/issues/526) ([#528](https://github.com/TEHIK-EE/tedi-design-system/issues/528)) ([bb3016b](https://github.com/TEHIK-EE/tedi-design-system/commit/bb3016b4b11ea949fb1e47871bde7eedc5a5d61f)) -- **status-badge:** ensure aria role can be set dynamically [#532](https://github.com/TEHIK-EE/tedi-design-system/issues/532) ([#543](https://github.com/TEHIK-EE/tedi-design-system/issues/543)) ([68252ca](https://github.com/TEHIK-EE/tedi-design-system/commit/68252ca4b50f78bdb76f72e7cc4fb71d79b21836)) - -### Features - -- **button-group:** TEDI-Ready ButtonGroup development [#451](https://github.com/TEHIK-EE/tedi-design-system/issues/451) ([#611](https://github.com/TEHIK-EE/tedi-design-system/issues/611)) ([7281fce](https://github.com/TEHIK-EE/tedi-design-system/commit/7281fce25fb0f487441f55cfa40934a70033eaab)) -- **choice-group:** TEDI-Ready ChoiceGroup component development [#518](https://github.com/TEHIK-EE/tedi-design-system/issues/518) ([#612](https://github.com/TEHIK-EE/tedi-design-system/issues/612)) ([f12fb7c](https://github.com/TEHIK-EE/tedi-design-system/commit/f12fb7c844d71ed5fdf7a083bde3f43eb1ccac3d)) -- **ellipsis:** TEDI-Ready Ellipsis development [#554](https://github.com/TEHIK-EE/tedi-design-system/issues/554) ([#557](https://github.com/TEHIK-EE/tedi-design-system/issues/557)) ([d5e01cd](https://github.com/TEHIK-EE/tedi-design-system/commit/d5e01cd4c468b3d58561b1f8b6d5272a5b16fccf)) -- **file-dropzone:** TEDI-Ready FileDropzone development [#490](https://github.com/TEHIK-EE/tedi-design-system/issues/490) ([#545](https://github.com/TEHIK-EE/tedi-design-system/issues/545)) ([5d7c542](https://github.com/TEHIK-EE/tedi-design-system/commit/5d7c542a4c8c520b4c9e35bfb8cebff9a2abb1c3)), closes [#407](https://github.com/TEHIK-EE/tedi-design-system/issues/407) [#407](https://github.com/TEHIK-EE/tedi-design-system/issues/407) [#495](https://github.com/TEHIK-EE/tedi-design-system/issues/495) -- **file-upload:** TEDI-Ready FileUpload component development [#407](https://github.com/TEHIK-EE/tedi-design-system/issues/407) ([#522](https://github.com/TEHIK-EE/tedi-design-system/issues/522)) ([94fee9d](https://github.com/TEHIK-EE/tedi-design-system/commit/94fee9d39f527168af1ecd03cce98d0e0dbfe1ee)), closes [#80](https://github.com/TEHIK-EE/tedi-design-system/issues/80) -- **table:** update table filter active state [[#556](https://github.com/TEHIK-EE/tedi-design-system/issues/556)] ([#558](https://github.com/TEHIK-EE/tedi-design-system/issues/558)) ([0dbbfa1](https://github.com/TEHIK-EE/tedi-design-system/commit/0dbbfa18cf88d2d253da78941b8df4c129b67ffe)) - -# [@tehik-ee/tedi-react-v11.2.0-rc.15](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.14...react-11.2.0-rc.15) (2025-03-27) - -### Bug Fixes - -- **radio,checkbox:** add missing labelRef [#617](https://github.com/TEHIK-EE/tedi-design-system/issues/617) ([#622](https://github.com/TEHIK-EE/tedi-design-system/issues/622)) ([55abfb0](https://github.com/TEHIK-EE/tedi-design-system/commit/55abfb071bbea8b89cf030851b22b5c7afeb7103)) - -# [@tehik-ee/tedi-react-v11.2.0-rc.14](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.13...react-11.2.0-rc.14) (2025-03-27) - -### Bug Fixes - -- **radio,checkbox,choice-group:** allow custom labels [#617](https://github.com/TEHIK-EE/tedi-design-system/issues/617) ([#620](https://github.com/TEHIK-EE/tedi-design-system/issues/620)) ([19be632](https://github.com/TEHIK-EE/tedi-design-system/commit/19be632ccabe59ec9c146e637dd69e08e36c5104)) - -# [@tehik-ee/tedi-react-v11.2.0-rc.13](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.12...react-11.2.0-rc.13) (2025-03-27) - -### Bug Fixes - -- **choice-group:** allow React.ReactNode type for label [#617](https://github.com/TEHIK-EE/tedi-design-system/issues/617) ([#618](https://github.com/TEHIK-EE/tedi-design-system/issues/618)) ([cfe035c](https://github.com/TEHIK-EE/tedi-design-system/commit/cfe035cfbbcdcefeaed773f352d27460ee234d61)) - -# [@tehik-ee/tedi-react-v11.2.0-rc.12](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.11...react-11.2.0-rc.12) (2025-03-27) - -### Bug Fixes - -- **button-group:** secondary buttons height [#613](https://github.com/TEHIK-EE/tedi-design-system/issues/613) ([#614](https://github.com/TEHIK-EE/tedi-design-system/issues/614)) ([f81bfd7](https://github.com/TEHIK-EE/tedi-design-system/commit/f81bfd76f8499150e8c9f844d8fee2fc3272d24b)) - -# [@tehik-ee/tedi-react-v11.2.0-rc.11](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.10...react-11.2.0-rc.11) (2025-03-27) - -### Features - -- **choice-group:** TEDI-Ready ChoiceGroup component development [#518](https://github.com/TEHIK-EE/tedi-design-system/issues/518) ([#612](https://github.com/TEHIK-EE/tedi-design-system/issues/612)) ([f12fb7c](https://github.com/TEHIK-EE/tedi-design-system/commit/f12fb7c844d71ed5fdf7a083bde3f43eb1ccac3d)) - -# [@tehik-ee/tedi-react-v11.2.0-rc.10](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.9...react-11.2.0-rc.10) (2025-03-27) - -### Features - -- **button-group:** TEDI-Ready ButtonGroup development [#451](https://github.com/TEHIK-EE/tedi-design-system/issues/451) ([#611](https://github.com/TEHIK-EE/tedi-design-system/issues/611)) ([7281fce](https://github.com/TEHIK-EE/tedi-design-system/commit/7281fce25fb0f487441f55cfa40934a70033eaab)) - -# [@tehik-ee/tedi-react-v11.2.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.8...react-11.2.0-rc.9) (2025-03-21) - -### Bug Fixes - -- **card:** fix card stories [#580](https://github.com/TEHIK-EE/tedi-design-system/issues/580) ([#591](https://github.com/TEHIK-EE/tedi-design-system/issues/591)) ([3be2544](https://github.com/TEHIK-EE/tedi-design-system/commit/3be254422bcfd4dc226c0ae52b39d6d7bb0cca28)), closes [#556](https://github.com/TEHIK-EE/tedi-design-system/issues/556) - -# [@tehik-ee/tedi-react-v11.2.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.7...react-11.2.0-rc.8) (2025-03-19) - -### Features - -- **ellipsis:** TEDI-Ready Ellipsis development [#554](https://github.com/TEHIK-EE/tedi-design-system/issues/554) ([#557](https://github.com/TEHIK-EE/tedi-design-system/issues/557)) ([d5e01cd](https://github.com/TEHIK-EE/tedi-design-system/commit/d5e01cd4c468b3d58561b1f8b6d5272a5b16fccf)) - -# [@tehik-ee/tedi-react-v11.2.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.6...react-11.2.0-rc.7) (2025-03-18) - -### Bug Fixes - -- **FloatingButton:** add FloatingButton exports [#581](https://github.com/TEHIK-EE/tedi-design-system/issues/581) ([#582](https://github.com/TEHIK-EE/tedi-design-system/issues/582)) ([cc262a9](https://github.com/TEHIK-EE/tedi-design-system/commit/cc262a9130015c6fb2ea67ec38b5f4d9a61e9563)) - -# [@tehik-ee/tedi-react-v11.1.3](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.2...react-11.1.3) (2025-03-18) - -### Bug Fixes - -- **FloatingButton:** add FloatingButton exports [#581](https://github.com/TEHIK-EE/tedi-design-system/issues/581) ([#582](https://github.com/TEHIK-EE/tedi-design-system/issues/582)) ([cc262a9](https://github.com/TEHIK-EE/tedi-design-system/commit/cc262a9130015c6fb2ea67ec38b5f4d9a61e9563)) - -# [@tehik-ee/tedi-react-v11.2.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.5...react-11.2.0-rc.6) (2025-03-18) - -# [@tehik-ee/tedi-react-v11.1.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.1...react-11.1.2) (2025-03-18) - -### Bug Fixes - -- **SkeletonBlock:** remove unnecessary 0% from background css [#577](https://github.com/TEHIK-EE/tedi-design-system/issues/577) ([#578](https://github.com/TEHIK-EE/tedi-design-system/issues/578)) ([6a73d3e](https://github.com/TEHIK-EE/tedi-design-system/commit/6a73d3e6278f709ccaac0754c336b3d4c26b109f)) - -# [@tehik-ee/tedi-react-v11.2.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.4...react-11.2.0-rc.5) (2025-03-18) - -### Features - -- **file-dropzone:** TEDI-Ready FileDropzone development [#490](https://github.com/TEHIK-EE/tedi-design-system/issues/490) ([#545](https://github.com/TEHIK-EE/tedi-design-system/issues/545)) ([5d7c542](https://github.com/TEHIK-EE/tedi-design-system/commit/5d7c542a4c8c520b4c9e35bfb8cebff9a2abb1c3)), closes [#407](https://github.com/TEHIK-EE/tedi-design-system/issues/407) [#407](https://github.com/TEHIK-EE/tedi-design-system/issues/407) [#495](https://github.com/TEHIK-EE/tedi-design-system/issues/495) - -# [@tehik-ee/tedi-react-v11.1.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.1...react-11.1.2) (2025-03-18) - -### Bug Fixes - -- **SkeletonBlock:** remove unnecessary 0% from background css [#577](https://github.com/TEHIK-EE/tedi-design-system/issues/577) ([#578](https://github.com/TEHIK-EE/tedi-design-system/issues/578)) ([6a73d3e](https://github.com/TEHIK-EE/tedi-design-system/commit/6a73d3e6278f709ccaac0754c336b3d4c26b109f)) - -# [@tehik-ee/tedi-react-v11.2.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.3...react-11.2.0-rc.4) (2025-03-17) - -# [@tehik-ee/tedi-react-v11.1.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0...react-11.1.1) (2025-03-17) - -### Bug Fixes - -- **button:** update small button height to match default button height in mobile [#533](https://github.com/TEHIK-EE/tedi-design-system/issues/533) ([#536](https://github.com/TEHIK-EE/tedi-design-system/issues/536)) ([cd5fb24](https://github.com/TEHIK-EE/tedi-design-system/commit/cd5fb2491a233a45eb31cca7b573010b0f193cc4)) - -# [@tehik-ee/tedi-react-v11.1.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0...react-11.1.1) (2025-03-17) - -# [@tehik-ee/tedi-react-v11.2.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.2...react-11.2.0-rc.3) (2025-03-13) - -### Features - -- **table:** update table filter active state [[#556](https://github.com/TEHIK-EE/tedi-design-system/issues/556)] ([#558](https://github.com/TEHIK-EE/tedi-design-system/issues/558)) ([0dbbfa1](https://github.com/TEHIK-EE/tedi-design-system/commit/0dbbfa18cf88d2d253da78941b8df4c129b67ffe)) - -# [@tehik-ee/tedi-react-v11.2.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.2.0-rc.1...react-11.2.0-rc.2) (2025-03-12) - -### Bug Fixes - -- **chore:** fix vite.config manual-chunks [#549](https://github.com/TEHIK-EE/tedi-design-system/issues/549) ([#550](https://github.com/TEHIK-EE/tedi-design-system/issues/550)) ([cdf78b0](https://github.com/TEHIK-EE/tedi-design-system/commit/cdf78b03747b655ac2086bc99f615c5242e0ac10)) - -# [@tehik-ee/tedi-react-v11.2.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.1-rc.2...react-11.2.0-rc.1) (2025-03-10) - -### Features - -- **file-upload:** TEDI-Ready FileUpload component development [#407](https://github.com/TEHIK-EE/tedi-design-system/issues/407) ([#522](https://github.com/TEHIK-EE/tedi-design-system/issues/522)) ([94fee9d](https://github.com/TEHIK-EE/tedi-design-system/commit/94fee9d39f527168af1ecd03cce98d0e0dbfe1ee)), closes [#80](https://github.com/TEHIK-EE/tedi-design-system/issues/80) - -# [@tehik-ee/tedi-react-v11.1.1-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.1-rc.1...react-11.1.1-rc.2) (2025-03-10) - -### Bug Fixes - -- **status-badge:** ensure aria role can be set dynamically [#532](https://github.com/TEHIK-EE/tedi-design-system/issues/532) ([#543](https://github.com/TEHIK-EE/tedi-design-system/issues/543)) ([68252ca](https://github.com/TEHIK-EE/tedi-design-system/commit/68252ca4b50f78bdb76f72e7cc4fb71d79b21836)) - -# [@tehik-ee/tedi-react-v11.1.1-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0...react-11.1.1-rc.1) (2025-03-04) - -### Bug Fixes - -- **sidenav:** design tweaks [#526](https://github.com/TEHIK-EE/tedi-design-system/issues/526) ([#528](https://github.com/TEHIK-EE/tedi-design-system/issues/528)) ([bb3016b](https://github.com/TEHIK-EE/tedi-design-system/commit/bb3016b4b11ea949fb1e47871bde7eedc5a5d61f)) -- **button:** update small button height to match default button height in mobile [#533](https://github.com/TEHIK-EE/tedi-design-system/issues/533) ([#536](https://github.com/TEHIK-EE/tedi-design-system/issues/536)) ([cd5fb24](https://github.com/TEHIK-EE/tedi-design-system/commit/cd5fb2491a233a45eb31cca7b573010b0f193cc4)) - -# [@tehik-ee/tedi-react-v11.1.0](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0...react-11.1.0) (2025-02-27) - -### Bug Fixes - -- **card:** Card backgrounds and border color fixes [#495](https://github.com/TEHIK-EE/tedi-design-system/issues/495) ([#496](https://github.com/TEHIK-EE/tedi-design-system/issues/496)) ([24f7d44](https://github.com/TEHIK-EE/tedi-design-system/commit/24f7d445db0e63c6c330320fbe268921fdb8eb7a)) -- **check,radio:** Alignment of tooltip is not centered [#376](https://github.com/TEHIK-EE/tedi-design-system/issues/376) ([#386](https://github.com/TEHIK-EE/tedi-design-system/issues/386)) ([943113b](https://github.com/TEHIK-EE/tedi-design-system/commit/943113b9fc4a3931bdbf80d1ec5799b0a6d917b4)), closes [#406](https://github.com/TEHIK-EE/tedi-design-system/issues/406) -- **collapse:** prevent icon rotation in nested collapses [#422](https://github.com/TEHIK-EE/tedi-design-system/issues/422) ([#459](https://github.com/TEHIK-EE/tedi-design-system/issues/459)) ([fa3ef9e](https://github.com/TEHIK-EE/tedi-design-system/commit/fa3ef9e5ead83bf1f906309e5b837a31095d99a9)) -- **file-upload:** allow re-uploading deleted files [#468](https://github.com/TEHIK-EE/tedi-design-system/issues/468) ([#469](https://github.com/TEHIK-EE/tedi-design-system/issues/469)) ([bec033f](https://github.com/TEHIK-EE/tedi-design-system/commit/bec033f043138cbd95da4a49fc5e436909c9ce63)) -- **icon:** Add aria-label if label prop is set [#480](https://github.com/TEHIK-EE/tedi-design-system/issues/480) ([#481](https://github.com/TEHIK-EE/tedi-design-system/issues/481)) ([178a1d4](https://github.com/TEHIK-EE/tedi-design-system/commit/178a1d4faf843b1cd44bb0265899d97ef2f5e825)) -- **label,form-label:** add forwardRef [#504](https://github.com/TEHIK-EE/tedi-design-system/issues/504) ([#509](https://github.com/TEHIK-EE/tedi-design-system/issues/509)) ([6ad2828](https://github.com/TEHIK-EE/tedi-design-system/commit/6ad2828a3bc448638ebd842dac2c1a487b316116)) -- **search, footer:** replace 'start'/'end' with 'flex-start'/'flex-end' for Autoprefixer [#467](https://github.com/TEHIK-EE/tedi-design-system/issues/467) ([#482](https://github.com/TEHIK-EE/tedi-design-system/issues/482)) ([68987ca](https://github.com/TEHIK-EE/tedi-design-system/commit/68987cae0bb3096d4bcda9cad9de1ea3968a35e1)) -- **tag:** Tag height on mobile devices [#497](https://github.com/TEHIK-EE/tedi-design-system/issues/497) ([#498](https://github.com/TEHIK-EE/tedi-design-system/issues/498)) ([5cc93d2](https://github.com/TEHIK-EE/tedi-design-system/commit/5cc93d2f63551c176fe3debebef0f016699ad711)) -- **text-field,number-field,tag,status-badge,icon,skeleton:** Update dimensional and color variables [#488](https://github.com/TEHIK-EE/tedi-design-system/issues/488) ([#492](https://github.com/TEHIK-EE/tedi-design-system/issues/492)) ([d83946b](https://github.com/TEHIK-EE/tedi-design-system/commit/d83946bf4e204f177ace23923a7b4c95af219248)) - -### Features - -- **card:** TEDI-Ready Card component development [#261](https://github.com/TEHIK-EE/tedi-design-system/issues/261) ([#362](https://github.com/TEHIK-EE/tedi-design-system/issues/362)) ([e023f01](https://github.com/TEHIK-EE/tedi-design-system/commit/e023f01cee9f82f157efc1ce92224a0b643abf36)) -- **checkbox:** TEDI-Ready Checkbox component development [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) ([#515](https://github.com/TEHIK-EE/tedi-design-system/issues/515)) ([55bcfc4](https://github.com/TEHIK-EE/tedi-design-system/commit/55bcfc4ed33387c18a13056dfa768d24afb74513)) -- **hash-trigger:** TEDI-Ready component development [#379](https://github.com/TEHIK-EE/tedi-design-system/issues/379) ([#396](https://github.com/TEHIK-EE/tedi-design-system/issues/396)) ([8798484](https://github.com/TEHIK-EE/tedi-design-system/commit/879848425206a49df5330d36f4b55063ef3d149e)) -- **header:** add public header custom content support [#441](https://github.com/TEHIK-EE/tedi-design-system/issues/441) ([#461](https://github.com/TEHIK-EE/tedi-design-system/issues/461)) ([d175a33](https://github.com/TEHIK-EE/tedi-design-system/commit/d175a33bd7a0b19481b62d70a3664f5e26e83540)) -- **label,form-label:** Add tooltip functionality [#504](https://github.com/TEHIK-EE/tedi-design-system/issues/504) ([#505](https://github.com/TEHIK-EE/tedi-design-system/issues/505)) ([298bc60](https://github.com/TEHIK-EE/tedi-design-system/commit/298bc605bb582ef0d5e0b57557c91184a279da5a)) -- **popover:** TEDI-Ready component development [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) ([#491](https://github.com/TEHIK-EE/tedi-design-system/issues/491)) ([764c234](https://github.com/TEHIK-EE/tedi-design-system/commit/764c234c53db8b2a5c7a8fd8c894b7c2b933cf0b)), closes [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) -- **radio:** TEDI-Ready Radio component development [#235](https://github.com/TEHIK-EE/tedi-design-system/issues/235) ([#520](https://github.com/TEHIK-EE/tedi-design-system/issues/520)) ([d1d2392](https://github.com/TEHIK-EE/tedi-design-system/commit/d1d23923d1ea9049a4e36c66c2348b63ea0b66eb)), closes [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) -- **sidenav:** Add collapsible navigation with nested items and styling [#422](https://github.com/TEHIK-EE/tedi-design-system/issues/422) ([#460](https://github.com/TEHIK-EE/tedi-design-system/issues/460)) ([10f803f](https://github.com/TEHIK-EE/tedi-design-system/commit/10f803f4ca2171444a77c1d3d404cc7a65a77b1b)) -- **table:** Add autoResetPageIndex prop [#477](https://github.com/TEHIK-EE/tedi-design-system/issues/477) ([#478](https://github.com/TEHIK-EE/tedi-design-system/issues/478)) ([c6b50a1](https://github.com/TEHIK-EE/tedi-design-system/commit/c6b50a1a5194c0177ade73d4d3789fb5f761da45)) -- **tooltip:** TEDI-Ready component [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) ([#471](https://github.com/TEHIK-EE/tedi-design-system/issues/471)) ([13abc02](https://github.com/TEHIK-EE/tedi-design-system/commit/13abc02d5703a125209f4b9cfcb257435e9e2aaf)), closes [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) - -# [@tehik-ee/tedi-react-v11.1.0-rc.19](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.18...react-11.1.0-rc.19) (2025-02-27) - -### Features - -- **radio:** TEDI-Ready Radio component development [#235](https://github.com/TEHIK-EE/tedi-design-system/issues/235) ([#520](https://github.com/TEHIK-EE/tedi-design-system/issues/520)) ([d1d2392](https://github.com/TEHIK-EE/tedi-design-system/commit/d1d23923d1ea9049a4e36c66c2348b63ea0b66eb)), closes [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) - -# [@tehik-ee/tedi-react-v11.1.0-rc.18](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.17...react-11.1.0-rc.18) (2025-02-27) - -### Features - -- **checkbox:** TEDI-Ready Checkbox component development [#236](https://github.com/TEHIK-EE/tedi-design-system/issues/236) ([#515](https://github.com/TEHIK-EE/tedi-design-system/issues/515)) ([55bcfc4](https://github.com/TEHIK-EE/tedi-design-system/commit/55bcfc4ed33387c18a13056dfa768d24afb74513)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.17](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.16...react-11.1.0-rc.17) (2025-02-26) - -### Bug Fixes - -- **label,form-label:** add forwardRef [#504](https://github.com/TEHIK-EE/tedi-design-system/issues/504) ([#509](https://github.com/TEHIK-EE/tedi-design-system/issues/509)) ([6ad2828](https://github.com/TEHIK-EE/tedi-design-system/commit/6ad2828a3bc448638ebd842dac2c1a487b316116)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.16](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.15...react-11.1.0-rc.16) (2025-02-26) - -### Features - -- **label,form-label:** Add tooltip functionality [#504](https://github.com/TEHIK-EE/tedi-design-system/issues/504) ([#505](https://github.com/TEHIK-EE/tedi-design-system/issues/505)) ([298bc60](https://github.com/TEHIK-EE/tedi-design-system/commit/298bc605bb582ef0d5e0b57557c91184a279da5a)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.15](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.14...react-11.1.0-rc.15) (2025-02-25) - -### Bug Fixes - -- **tag:** Tag height on mobile devices [#497](https://github.com/TEHIK-EE/tedi-design-system/issues/497) ([#498](https://github.com/TEHIK-EE/tedi-design-system/issues/498)) ([5cc93d2](https://github.com/TEHIK-EE/tedi-design-system/commit/5cc93d2f63551c176fe3debebef0f016699ad711)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.14](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.13...react-11.1.0-rc.14) (2025-02-20) - -### Features - -- **popover:** TEDI-Ready component development [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) ([#491](https://github.com/TEHIK-EE/tedi-design-system/issues/491)) ([764c234](https://github.com/TEHIK-EE/tedi-design-system/commit/764c234c53db8b2a5c7a8fd8c894b7c2b933cf0b)), closes [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) - -# [@tehik-ee/tedi-react-v11.1.0-rc.13](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.12...react-11.1.0-rc.13) (2025-02-20) - -### Features - -- **tooltip:** TEDI-Ready component [#210](https://github.com/TEHIK-EE/tedi-design-system/issues/210) ([#471](https://github.com/TEHIK-EE/tedi-design-system/issues/471)) ([13abc02](https://github.com/TEHIK-EE/tedi-design-system/commit/13abc02d5703a125209f4b9cfcb257435e9e2aaf)), closes [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) [#260](https://github.com/TEHIK-EE/tedi-design-system/issues/260) - -# [@tehik-ee/tedi-react-v11.1.0-rc.12](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.11...react-11.1.0-rc.12) (2025-02-19) - -### Bug Fixes - -- **card:** Card backgrounds and border color fixes [#495](https://github.com/TEHIK-EE/tedi-design-system/issues/495) ([#496](https://github.com/TEHIK-EE/tedi-design-system/issues/496)) ([24f7d44](https://github.com/TEHIK-EE/tedi-design-system/commit/24f7d445db0e63c6c330320fbe268921fdb8eb7a)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.11](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.10...react-11.1.0-rc.11) (2025-02-17) - -### Bug Fixes - -- **text-field,number-field,tag,status-badge,icon,skeleton:** Update dimensional and color variables [#488](https://github.com/TEHIK-EE/tedi-design-system/issues/488) ([#492](https://github.com/TEHIK-EE/tedi-design-system/issues/492)) ([d83946b](https://github.com/TEHIK-EE/tedi-design-system/commit/d83946bf4e204f177ace23923a7b4c95af219248)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.10](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.9...react-11.1.0-rc.10) (2025-02-17) - -### Bug Fixes - -- **check,radio:** Alignment of tooltip is not centered [#376](https://github.com/TEHIK-EE/tedi-design-system/issues/376) ([#386](https://github.com/TEHIK-EE/tedi-design-system/issues/386)) ([943113b](https://github.com/TEHIK-EE/tedi-design-system/commit/943113b9fc4a3931bdbf80d1ec5799b0a6d917b4)), closes [#406](https://github.com/TEHIK-EE/tedi-design-system/issues/406) - -# [@tehik-ee/tedi-react-v11.1.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.8...react-11.1.0-rc.9) (2025-02-17) - -### Bug Fixes - -- **file-upload:** allow re-uploading deleted files [#468](https://github.com/TEHIK-EE/tedi-design-system/issues/468) ([#469](https://github.com/TEHIK-EE/tedi-design-system/issues/469)) ([bec033f](https://github.com/TEHIK-EE/tedi-design-system/commit/bec033f043138cbd95da4a49fc5e436909c9ce63)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.7...react-11.1.0-rc.8) (2025-02-13) - -### Features - -- **card:** TEDI-Ready Card component development [#261](https://github.com/TEHIK-EE/tedi-design-system/issues/261) ([#362](https://github.com/TEHIK-EE/tedi-design-system/issues/362)) ([e023f01](https://github.com/TEHIK-EE/tedi-design-system/commit/e023f01cee9f82f157efc1ce92224a0b643abf36)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.6...react-11.1.0-rc.7) (2025-02-13) - -### Bug Fixes - -- **search, footer:** replace 'start'/'end' with 'flex-start'/'flex-end' for Autoprefixer [#467](https://github.com/TEHIK-EE/tedi-design-system/issues/467) ([#482](https://github.com/TEHIK-EE/tedi-design-system/issues/482)) ([68987ca](https://github.com/TEHIK-EE/tedi-design-system/commit/68987cae0bb3096d4bcda9cad9de1ea3968a35e1)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.5...react-11.1.0-rc.6) (2025-02-12) - -### Bug Fixes - -- **icon:** Add aria-label if label prop is set [#480](https://github.com/TEHIK-EE/tedi-design-system/issues/480) ([#481](https://github.com/TEHIK-EE/tedi-design-system/issues/481)) ([178a1d4](https://github.com/TEHIK-EE/tedi-design-system/commit/178a1d4faf843b1cd44bb0265899d97ef2f5e825)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.4...react-11.1.0-rc.5) (2025-02-11) - -### Features - -- **table:** Add autoResetPageIndex prop [#477](https://github.com/TEHIK-EE/tedi-design-system/issues/477) ([#478](https://github.com/TEHIK-EE/tedi-design-system/issues/478)) ([c6b50a1](https://github.com/TEHIK-EE/tedi-design-system/commit/c6b50a1a5194c0177ade73d4d3789fb5f761da45)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.3...react-11.1.0-rc.4) (2025-02-11) - -### Features - -- **sidenav:** Add collapsible navigation with nested items and styling [#422](https://github.com/TEHIK-EE/tedi-design-system/issues/422) ([#460](https://github.com/TEHIK-EE/tedi-design-system/issues/460)) ([10f803f](https://github.com/TEHIK-EE/tedi-design-system/commit/10f803f4ca2171444a77c1d3d404cc7a65a77b1b)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.2...react-11.1.0-rc.3) (2025-02-10) - -### Bug Fixes - -- **collapse:** prevent icon rotation in nested collapses [#422](https://github.com/TEHIK-EE/tedi-design-system/issues/422) ([#459](https://github.com/TEHIK-EE/tedi-design-system/issues/459)) ([fa3ef9e](https://github.com/TEHIK-EE/tedi-design-system/commit/fa3ef9e5ead83bf1f906309e5b837a31095d99a9)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.1.0-rc.1...react-11.1.0-rc.2) (2025-02-04) - -### Features - -- **header:** add public header custom content support [#441](https://github.com/TEHIK-EE/tedi-design-system/issues/441) ([#461](https://github.com/TEHIK-EE/tedi-design-system/issues/461)) ([d175a33](https://github.com/TEHIK-EE/tedi-design-system/commit/d175a33bd7a0b19481b62d70a3664f5e26e83540)) - -# [@tehik-ee/tedi-react-v11.1.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0...react-11.1.0-rc.1) (2025-02-03) - -### Features - -- **hash-trigger:** TEDI-Ready component development [#379](https://github.com/TEHIK-EE/tedi-design-system/issues/379) ([#396](https://github.com/TEHIK-EE/tedi-design-system/issues/396)) ([8798484](https://github.com/TEHIK-EE/tedi-design-system/commit/879848425206a49df5330d36f4b55063ef3d149e)) - -# [@tehik-ee/tedi-react-v11.0.0](https://github.com/TEHIK-EE/tedi-design-system/compare/react-10.0.0...react-11.0.0) (2025-02-03) - -### Bug Fixes - -- A basic fix to trigger a version release [#330](https://github.com/TEHIK-EE/tedi-design-system/issues/330) ([7d00f73](https://github.com/TEHIK-EE/tedi-design-system/commit/7d00f73fa1b50fabd3e357f735a08603b9462931)) -- A basic fix to trigger a version release [#330](https://github.com/TEHIK-EE/tedi-design-system/issues/330) ([9568112](https://github.com/TEHIK-EE/tedi-design-system/commit/95681128b8dcf318300e86a7777baae4f19dd2aa)) -- **general:** @tehik-ee/tedi-react package styles are not complete [#406](https://github.com/TEHIK-EE/tedi-design-system/issues/406) ([#408](https://github.com/TEHIK-EE/tedi-design-system/issues/408)) ([4423d90](https://github.com/TEHIK-EE/tedi-design-system/commit/4423d906db8fbc569681cbcd352413b3e81a3680)) -- **general:** eslint cleanup [#409](https://github.com/TEHIK-EE/tedi-design-system/issues/409) ([#410](https://github.com/TEHIK-EE/tedi-design-system/issues/410)) ([7b175c7](https://github.com/TEHIK-EE/tedi-design-system/commit/7b175c73567b67b7ed76a460e2abbb0d268bac52)) -- **general:** Remove --dry-run flag from release script [#330](https://github.com/TEHIK-EE/tedi-design-system/issues/330) ([9c52042](https://github.com/TEHIK-EE/tedi-design-system/commit/9c52042334540edf43817a2e32a2747bb00395fd)) -- **scroll-fade:** add export of ScrollFade [#398](https://github.com/TEHIK-EE/tedi-design-system/issues/398) ([#399](https://github.com/TEHIK-EE/tedi-design-system/issues/399)) ([aa777dd](https://github.com/TEHIK-EE/tedi-design-system/commit/aa777dd68943d4716cd7a558009da8e003e61913)) -- **scroll-fade:** fix fade without scrollbar [#400](https://github.com/TEHIK-EE/tedi-design-system/issues/400) ([#402](https://github.com/TEHIK-EE/tedi-design-system/issues/402)) ([fe6ecb5](https://github.com/TEHIK-EE/tedi-design-system/commit/fe6ecb5c843a070ca3978ae0ddc08c7250d6acd9)) -- **select:** add cacheOptions as a prop for Select ([#384](https://github.com/TEHIK-EE/tedi-design-system/issues/384)) ([3b1ecc2](https://github.com/TEHIK-EE/tedi-design-system/commit/3b1ecc2cac18700b1f621ccc5afbe28e9a13b139)) -- **select:** cache options prop [#383](https://github.com/TEHIK-EE/tedi-design-system/issues/383) ([#385](https://github.com/TEHIK-EE/tedi-design-system/issues/385)) ([799a989](https://github.com/TEHIK-EE/tedi-design-system/commit/799a989af8e440810d865db7f5bb728fa27ff14d)) -- **select:** fix font size [#393](https://github.com/TEHIK-EE/tedi-design-system/issues/393) ([#416](https://github.com/TEHIK-EE/tedi-design-system/issues/416)) ([b7c4291](https://github.com/TEHIK-EE/tedi-design-system/commit/b7c4291527e2a16602f47707f35e984589e7d50d)) -- **separator:** Dotted small variant size fix [#443](https://github.com/TEHIK-EE/tedi-design-system/issues/443) ([#444](https://github.com/TEHIK-EE/tedi-design-system/issues/444)) ([b2f17ea](https://github.com/TEHIK-EE/tedi-design-system/commit/b2f17ea54e76ae3f45c0898d0f35aa4553cacbb2)) -- **separator:** Inline vertical Separator in text [#389](https://github.com/TEHIK-EE/tedi-design-system/issues/389) ([#427](https://github.com/TEHIK-EE/tedi-design-system/issues/427)) ([369258f](https://github.com/TEHIK-EE/tedi-design-system/commit/369258f30e4615c694e909afa6d2760873914158)) -- **separator:** Type safety for dot-only variant [#447](https://github.com/TEHIK-EE/tedi-design-system/issues/447) ([#453](https://github.com/TEHIK-EE/tedi-design-system/issues/453)) ([121ed06](https://github.com/TEHIK-EE/tedi-design-system/commit/121ed06a3b378a69ef727312e69302e3cd0b4182)) -- **tag,status-badge:** Tag and StatusBadge color during printing [#412](https://github.com/TEHIK-EE/tedi-design-system/issues/412) ([#421](https://github.com/TEHIK-EE/tedi-design-system/issues/421)) ([6412299](https://github.com/TEHIK-EE/tedi-design-system/commit/6412299d97314b865cb130022bca801cbb40a2c2)) -- **textarea:** default value and forwardref bugs [#391](https://github.com/TEHIK-EE/tedi-design-system/issues/391) ([#392](https://github.com/TEHIK-EE/tedi-design-system/issues/392)) ([827b893](https://github.com/TEHIK-EE/tedi-design-system/commit/827b893488ed540b626a9c9bd4db50f8274af7b7)) -- **textarea:** fix char limit and counter [#397](https://github.com/TEHIK-EE/tedi-design-system/issues/397) ([#401](https://github.com/TEHIK-EE/tedi-design-system/issues/401)) ([3e574d1](https://github.com/TEHIK-EE/tedi-design-system/commit/3e574d1b6e28c8fb27f890f89b39449fd84f1351)) -- **textarea:** fix inner value [#446](https://github.com/TEHIK-EE/tedi-design-system/issues/446) ([#452](https://github.com/TEHIK-EE/tedi-design-system/issues/452)) ([a954e6b](https://github.com/TEHIK-EE/tedi-design-system/commit/a954e6be3c04c813b968fa554d50839f39278499)) -- Triggering new fix [#330](https://github.com/TEHIK-EE/tedi-design-system/issues/330) ([7e1650b](https://github.com/TEHIK-EE/tedi-design-system/commit/7e1650b3136741dd9fe53dcb75ba3cc775ba5747)) -- **truncate:** fix truncate button [#394](https://github.com/TEHIK-EE/tedi-design-system/issues/394) ([#395](https://github.com/TEHIK-EE/tedi-design-system/issues/395)) ([3cac352](https://github.com/TEHIK-EE/tedi-design-system/commit/3cac352a27fb038b254dd34ed8265ef59c0b196c)) -- **typography:** Headings without modifiers don't get correct styles [#445](https://github.com/TEHIK-EE/tedi-design-system/issues/445) ([#449](https://github.com/TEHIK-EE/tedi-design-system/issues/449)) ([89c4795](https://github.com/TEHIK-EE/tedi-design-system/commit/89c4795436a491a06863a3c0b26399d0498d01c5)) -- **typography:** text-normal css class specificity is higher than other modifiers [#429](https://github.com/TEHIK-EE/tedi-design-system/issues/429) ([#431](https://github.com/TEHIK-EE/tedi-design-system/issues/431)) ([119e831](https://github.com/TEHIK-EE/tedi-design-system/commit/119e8310afb7aa96c82d15498ef9ecf28f8f2ec4)) - -### Features - -- **affix:** TEDI-Ready component development [#377](https://github.com/TEHIK-EE/tedi-design-system/issues/377) ([#411](https://github.com/TEHIK-EE/tedi-design-system/issues/411)) ([8cb4f90](https://github.com/TEHIK-EE/tedi-design-system/commit/8cb4f90ca8590a031819709168b7b88dc99a372b)) -- **general:** tedi-core, tedi-angular and tedi-react monorepo [#330](https://github.com/TEHIK-EE/tedi-design-system/issues/330) ([#403](https://github.com/TEHIK-EE/tedi-design-system/issues/403)) ([95654aa](https://github.com/TEHIK-EE/tedi-design-system/commit/95654aa5bb4d26b925ac51e1968f248707acdc07)), closes [#339](https://github.com/TEHIK-EE/tedi-design-system/issues/339) [#339](https://github.com/TEHIK-EE/tedi-design-system/issues/339) [#398](https://github.com/TEHIK-EE/tedi-design-system/issues/398) [#399](https://github.com/TEHIK-EE/tedi-design-system/issues/399) -- **scroll-fade:** add TEDI-Ready component [#378](https://github.com/TEHIK-EE/tedi-design-system/issues/378) ([#390](https://github.com/TEHIK-EE/tedi-design-system/issues/390)) ([936eeb1](https://github.com/TEHIK-EE/tedi-design-system/commit/936eeb1288af8aa2b5307ae08401e8b775c4921b)) -- **scroll-visibility:** component rename [#387](https://github.com/TEHIK-EE/tedi-design-system/issues/387) ([#388](https://github.com/TEHIK-EE/tedi-design-system/issues/388)) ([24428f6](https://github.com/TEHIK-EE/tedi-design-system/commit/24428f6d885cc825adac9d7f0e303d24d594328a)) -- **search:** TEDI-Ready Search component development [#373](https://github.com/TEHIK-EE/tedi-design-system/issues/373) ([#428](https://github.com/TEHIK-EE/tedi-design-system/issues/428)) ([1b7e44b](https://github.com/TEHIK-EE/tedi-design-system/commit/1b7e44b1644857626642bd0e59c1229487e02ba7)) -- **separator:** Horizontal dotted separator [#423](https://github.com/TEHIK-EE/tedi-design-system/issues/423) ([#455](https://github.com/TEHIK-EE/tedi-design-system/issues/455)) ([9e42fa9](https://github.com/TEHIK-EE/tedi-design-system/commit/9e42fa93f3d891fb473b17576d0f3e75d42cba99)) - -### BREAKING CHANGES - -- **affix:** remove community component and useElementSize hook -- **scroll-visibility:** rename HideOnScroll to ScrollVisibility - -# [@tehik-ee/tedi-react-v11.0.0-rc.24](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.23...react-11.0.0-rc.24) (2025-02-03) - -### Bug Fixes - -- **textarea:** fix inner value [#446](https://github.com/TEHIK-EE/tedi-design-system/issues/446) ([#452](https://github.com/TEHIK-EE/tedi-design-system/issues/452)) ([a954e6b](https://github.com/TEHIK-EE/tedi-design-system/commit/a954e6be3c04c813b968fa554d50839f39278499)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.23](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.22...react-11.0.0-rc.23) (2025-02-03) - -### Features - -- **affix:** TEDI-Ready component development [#377](https://github.com/TEHIK-EE/tedi-design-system/issues/377) ([#411](https://github.com/TEHIK-EE/tedi-design-system/issues/411)) ([8cb4f90](https://github.com/TEHIK-EE/tedi-design-system/commit/8cb4f90ca8590a031819709168b7b88dc99a372b)) - -### BREAKING CHANGES - -- **affix:** remove community component and useElementSize hook - -# [@tehik-ee/tedi-react-v11.0.0-rc.22](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.21...react-11.0.0-rc.22) (2025-01-29) - -### Bug Fixes - -- **typography:** Headings without modifiers don't get correct styles [#445](https://github.com/TEHIK-EE/tedi-design-system/issues/445) ([#449](https://github.com/TEHIK-EE/tedi-design-system/issues/449)) ([89c4795](https://github.com/TEHIK-EE/tedi-design-system/commit/89c4795436a491a06863a3c0b26399d0498d01c5)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.21](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.20...react-11.0.0-rc.21) (2025-01-29) - -### Features - -- **separator:** Horizontal dotted separator [#423](https://github.com/TEHIK-EE/tedi-design-system/issues/423) ([#455](https://github.com/TEHIK-EE/tedi-design-system/issues/455)) ([9e42fa9](https://github.com/TEHIK-EE/tedi-design-system/commit/9e42fa93f3d891fb473b17576d0f3e75d42cba99)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.20](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.19...react-11.0.0-rc.20) (2025-01-29) - -### Bug Fixes - -- **separator:** Type safety for dot-only variant [#447](https://github.com/TEHIK-EE/tedi-design-system/issues/447) ([#453](https://github.com/TEHIK-EE/tedi-design-system/issues/453)) ([121ed06](https://github.com/TEHIK-EE/tedi-design-system/commit/121ed06a3b378a69ef727312e69302e3cd0b4182)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.19](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.18...react-11.0.0-rc.19) (2025-01-27) - -### Features - -- **search:** TEDI-Ready Search component development [#373](https://github.com/TEHIK-EE/tedi-design-system/issues/373) ([#428](https://github.com/TEHIK-EE/tedi-design-system/issues/428)) ([1b7e44b](https://github.com/TEHIK-EE/tedi-design-system/commit/1b7e44b1644857626642bd0e59c1229487e02ba7)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.18](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.17...react-11.0.0-rc.18) (2025-01-24) - -### Bug Fixes - -- **separator:** Dotted small variant size fix [#443](https://github.com/TEHIK-EE/tedi-design-system/issues/443) ([#444](https://github.com/TEHIK-EE/tedi-design-system/issues/444)) ([b2f17ea](https://github.com/TEHIK-EE/tedi-design-system/commit/b2f17ea54e76ae3f45c0898d0f35aa4553cacbb2)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.17](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.16...react-11.0.0-rc.17) (2025-01-23) - -### Bug Fixes - -- **typography:** text-normal css class specificity is higher than other modifiers [#429](https://github.com/TEHIK-EE/tedi-design-system/issues/429) ([#431](https://github.com/TEHIK-EE/tedi-design-system/issues/431)) ([119e831](https://github.com/TEHIK-EE/tedi-design-system/commit/119e8310afb7aa96c82d15498ef9ecf28f8f2ec4)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.16](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.15...react-11.0.0-rc.16) (2025-01-20) - -### Bug Fixes - -- **separator:** Inline vertical Separator in text [#389](https://github.com/TEHIK-EE/tedi-design-system/issues/389) ([#427](https://github.com/TEHIK-EE/tedi-design-system/issues/427)) ([369258f](https://github.com/TEHIK-EE/tedi-design-system/commit/369258f30e4615c694e909afa6d2760873914158)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.15](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.14...react-11.0.0-rc.15) (2025-01-17) - -### Bug Fixes - -- Triggering new fix [#330](https://github.com/TEHIK-EE/tedi-design-system/issues/330) ([7e1650b](https://github.com/TEHIK-EE/tedi-design-system/commit/7e1650b3136741dd9fe53dcb75ba3cc775ba5747)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.14](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.13...react-11.0.0-rc.14) (2025-01-17) - -### Bug Fixes - -- A basic fix to trigger a version release [#330](https://github.com/TEHIK-EE/tedi-design-system/issues/330) ([7d00f73](https://github.com/TEHIK-EE/tedi-design-system/commit/7d00f73fa1b50fabd3e357f735a08603b9462931)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.13](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.12...react-11.0.0-rc.13) (2025-01-17) - -### Bug Fixes - -- A basic fix to trigger a version release [#330](https://github.com/TEHIK-EE/tedi-design-system/issues/330) ([9568112](https://github.com/TEHIK-EE/tedi-design-system/commit/95681128b8dcf318300e86a7777baae4f19dd2aa)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.12](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.11...react-11.0.0-rc.12) (2025-01-17) - -### Bug Fixes - -- **tag,status-badge:** Tag and StatusBadge color during printing [#412](https://github.com/TEHIK-EE/tedi-design-system/issues/412) ([#421](https://github.com/TEHIK-EE/tedi-design-system/issues/421)) ([6412299](https://github.com/TEHIK-EE/tedi-design-system/commit/6412299d97314b865cb130022bca801cbb40a2c2)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.11](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.10...react-11.0.0-rc.11) (2025-01-17) - -### Bug Fixes - -- **general:** @tehik-ee/tedi-react package styles are not complete [#406](https://github.com/TEHIK-EE/tedi-design-system/issues/406) ([#408](https://github.com/TEHIK-EE/tedi-design-system/issues/408)) ([4423d90](https://github.com/TEHIK-EE/tedi-design-system/commit/4423d906db8fbc569681cbcd352413b3e81a3680)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.10](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.9...react-11.0.0-rc.10) (2025-01-16) - -### Bug Fixes - -- **select:** fix font size [#393](https://github.com/TEHIK-EE/tedi-design-system/issues/393) ([#416](https://github.com/TEHIK-EE/tedi-design-system/issues/416)) ([b7c4291](https://github.com/TEHIK-EE/tedi-design-system/commit/b7c4291527e2a16602f47707f35e984589e7d50d)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.8...react-11.0.0-rc.9) (2025-01-16) - -### Bug Fixes - -- **general:** eslint cleanup [#409](https://github.com/TEHIK-EE/tedi-design-system/issues/409) ([#410](https://github.com/TEHIK-EE/tedi-design-system/issues/410)) ([7b175c7](https://github.com/TEHIK-EE/tedi-design-system/commit/7b175c73567b67b7ed76a460e2abbb0d268bac52)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.7...react-11.0.0-rc.8) (2025-01-14) - -### Bug Fixes - -- **scroll-fade:** fix fade without scrollbar [#400](https://github.com/TEHIK-EE/tedi-design-system/issues/400) ([#402](https://github.com/TEHIK-EE/tedi-design-system/issues/402)) ([fe6ecb5](https://github.com/TEHIK-EE/tedi-design-system/commit/fe6ecb5c843a070ca3978ae0ddc08c7250d6acd9)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.6...react-11.0.0-rc.7) (2025-01-14) - -### Bug Fixes - -- **textarea:** fix char limit and counter [#397](https://github.com/TEHIK-EE/tedi-design-system/issues/397) ([#401](https://github.com/TEHIK-EE/tedi-design-system/issues/401)) ([3e574d1](https://github.com/TEHIK-EE/tedi-design-system/commit/3e574d1b6e28c8fb27f890f89b39449fd84f1351)) - -# [@tehik-ee/tedi-react-v11.0.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/react-11.0.0-rc.5...react-11.0.0-rc.6) (2025-01-14) - -### Bug Fixes - -- **general:** Remove --dry-run flag from release script [#330](https://github.com/TEHIK-EE/tedi-design-system/issues/330) ([9c52042](https://github.com/TEHIK-EE/tedi-design-system/commit/9c52042334540edf43817a2e32a2747bb00395fd)) - -### Features - -- **general:** tedi-core, tedi-angular and tedi-react monorepo [#330](https://github.com/TEHIK-EE/tedi-design-system/issues/330) ([#403](https://github.com/TEHIK-EE/tedi-design-system/issues/403)) ([95654aa](https://github.com/TEHIK-EE/tedi-design-system/commit/95654aa5bb4d26b925ac51e1968f248707acdc07)), closes [#339](https://github.com/TEHIK-EE/tedi-design-system/issues/339) [#339](https://github.com/TEHIK-EE/tedi-design-system/issues/339) [#398](https://github.com/TEHIK-EE/tedi-design-system/issues/398) [#399](https://github.com/TEHIK-EE/tedi-design-system/issues/399) - -# [@tehik-ee/tedi-react-v10.3.1](https://github.com/TEHIK-EE/tedi-design-system/compare/react-10.3.0...react-10.3.1) (2025-01-14) - -### Bug Fixes - -- **scroll-fade:** add export of ScrollFade [#398](https://github.com/TEHIK-EE/tedi-design-system/issues/398) ([#399](https://github.com/TEHIK-EE/tedi-design-system/issues/399)) ([aa777dd](https://github.com/TEHIK-EE/tedi-design-system/commit/aa777dd68943d4716cd7a558009da8e003e61913)) - -# [11.0.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/v11.0.0-rc.4...v11.0.0-rc.5) (2025-01-13) - -### Bug Fixes - -- **scroll-fade:** add export of ScrollFade [#398](https://github.com/TEHIK-EE/tedi-design-system/issues/398) ([#399](https://github.com/TEHIK-EE/tedi-design-system/issues/399)) ([aa777dd](https://github.com/TEHIK-EE/tedi-design-system/commit/aa777dd68943d4716cd7a558009da8e003e61913)) - -# [11.0.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/v11.0.0-rc.3...v11.0.0-rc.4) (2025-01-13) - -### Bug Fixes - -- **truncate:** fix truncate button [#394](https://github.com/TEHIK-EE/tedi-design-system/issues/394) ([#395](https://github.com/TEHIK-EE/tedi-design-system/issues/395)) ([3cac352](https://github.com/TEHIK-EE/tedi-design-system/commit/3cac352a27fb038b254dd34ed8265ef59c0b196c)) - -# [11.0.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/v11.0.0-rc.2...v11.0.0-rc.3) (2025-01-10) - -### Bug Fixes - -- **textarea:** default value and forwardref bugs [#391](https://github.com/TEHIK-EE/tedi-design-system/issues/391) ([#392](https://github.com/TEHIK-EE/tedi-design-system/issues/392)) ([827b893](https://github.com/TEHIK-EE/tedi-design-system/commit/827b893488ed540b626a9c9bd4db50f8274af7b7)) - -# [11.0.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/v11.0.0-rc.1...v11.0.0-rc.2) (2025-01-06) - -### Features - -- **scroll-fade:** add TEDI-Ready component [#378](https://github.com/TEHIK-EE/tedi-design-system/issues/378) ([#390](https://github.com/TEHIK-EE/tedi-design-system/issues/390)) ([936eeb1](https://github.com/TEHIK-EE/tedi-design-system/commit/936eeb1288af8aa2b5307ae08401e8b775c4921b)) - -# [11.0.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v10.0.1-rc.1...v11.0.0-rc.1) (2025-01-06) - -### Features - -- **scroll-visibility:** component rename [#387](https://github.com/TEHIK-EE/tedi-design-system/issues/387) ([#388](https://github.com/TEHIK-EE/tedi-design-system/issues/388)) ([24428f6](https://github.com/TEHIK-EE/tedi-design-system/commit/24428f6d885cc825adac9d7f0e303d24d594328a)) - -### BREAKING CHANGES - -- **scroll-visibility:** rename HideOnScroll to ScrollVisibility - -## [10.0.1-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v10.0.0...v10.0.1-rc.1) (2024-12-20) - -### Bug Fixes - -- **select:** add cacheOptions as a prop for Select ([#384](https://github.com/TEHIK-EE/tedi-design-system/issues/384)) ([3b1ecc2](https://github.com/TEHIK-EE/tedi-design-system/commit/3b1ecc2cac18700b1f621ccc5afbe28e9a13b139)) -- **select:** cache options prop [#383](https://github.com/TEHIK-EE/tedi-design-system/issues/383) ([#385](https://github.com/TEHIK-EE/tedi-design-system/issues/385)) ([799a989](https://github.com/TEHIK-EE/tedi-design-system/commit/799a989af8e440810d865db7f5bb728fa27ff14d)) - -# [10.0.0](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0...v10.0.0) (2024-12-20) - -### Bug Fixes - -- **grid:** Increase $grid-row-columns to 12 [#345](https://github.com/TEHIK-EE/tedi-design-system/issues/345) ([#358](https://github.com/TEHIK-EE/tedi-design-system/issues/358)) ([4326af5](https://github.com/TEHIK-EE/tedi-design-system/commit/4326af5705d27002faaece768505b3dba0382fc1)) -- **icon:** Apply className to wrapper when background is set [#344](https://github.com/TEHIK-EE/tedi-design-system/issues/344) ([#359](https://github.com/TEHIK-EE/tedi-design-system/issues/359)) ([f0e1a68](https://github.com/TEHIK-EE/tedi-design-system/commit/f0e1a68ef4cdd1bed19cf9b89b8f6c123fd1ba80)) -- **link:** Icon not vertically center [#347](https://github.com/TEHIK-EE/tedi-design-system/issues/347) ([#349](https://github.com/TEHIK-EE/tedi-design-system/issues/349)) ([4d209bc](https://github.com/TEHIK-EE/tedi-design-system/commit/4d209bc53c8285804b695dd5d65989fa6ffebd9d)) -- **modal:** Modal open focus fix [#343](https://github.com/TEHIK-EE/tedi-design-system/issues/343) ([#357](https://github.com/TEHIK-EE/tedi-design-system/issues/357)) ([0a8b54c](https://github.com/TEHIK-EE/tedi-design-system/commit/0a8b54c777da611367c1e2007170848939623d5e)) -- **scroll-fade:** round calculation for scrollToBottom [#353](https://github.com/TEHIK-EE/tedi-design-system/issues/353) ([#354](https://github.com/TEHIK-EE/tedi-design-system/issues/354)) ([46b5dce](https://github.com/TEHIK-EE/tedi-design-system/commit/46b5dce1002ec184739484bc3dde4f3de1736c72)) -- **scroll-fade:** round calculation for scrollToBottom [#353](https://github.com/TEHIK-EE/tedi-design-system/issues/353) ([#355](https://github.com/TEHIK-EE/tedi-design-system/issues/355)) ([762982c](https://github.com/TEHIK-EE/tedi-design-system/commit/762982c7ced2de8e630d62620d5fdc8f836cda83)) -- **skeleton:** Apply opacity to skeleton background [#341](https://github.com/TEHIK-EE/tedi-design-system/issues/341) ([#342](https://github.com/TEHIK-EE/tedi-design-system/issues/342)) ([bf31f15](https://github.com/TEHIK-EE/tedi-design-system/commit/bf31f1571599efcfae3f63976339b3db3a35e453)) -- **typography:** Base font values to rem [#365](https://github.com/TEHIK-EE/tedi-design-system/issues/365) ([#366](https://github.com/TEHIK-EE/tedi-design-system/issues/366)) ([074c590](https://github.com/TEHIK-EE/tedi-design-system/commit/074c590be2334e291b6903444d921dd548caa09a)) - -### Features - -- **floating-button:** add component [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) ([#360](https://github.com/TEHIK-EE/tedi-design-system/issues/360)) ([c25470e](https://github.com/TEHIK-EE/tedi-design-system/commit/c25470ea7230b143d6a248f5f040d0c46cd5f3a4)) -- **floating-button:** add export [#371](https://github.com/TEHIK-EE/tedi-design-system/issues/371) ([#372](https://github.com/TEHIK-EE/tedi-design-system/issues/372)) ([37ab729](https://github.com/TEHIK-EE/tedi-design-system/commit/37ab729a6597e542eed020ad49a9cd951ba6e27d)) -- **hide-on-scroll:** add component [#339](https://github.com/TEHIK-EE/tedi-design-system/issues/339) ([#363](https://github.com/TEHIK-EE/tedi-design-system/issues/363)) ([9b356f0](https://github.com/TEHIK-EE/tedi-design-system/commit/9b356f0c2801ca5d86bca7750952ad034ce74b4d)), closes [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) -- **info-button:** New TEDI-Ready InfoButton component development [#332](https://github.com/TEHIK-EE/tedi-design-system/issues/332) ([#338](https://github.com/TEHIK-EE/tedi-design-system/issues/338)) ([635916f](https://github.com/TEHIK-EE/tedi-design-system/commit/635916f628b97a458c7ace62530c8799e5c6322e)) -- **label:** Add infobutton props [#340](https://github.com/TEHIK-EE/tedi-design-system/issues/340) ([#348](https://github.com/TEHIK-EE/tedi-design-system/issues/348)) ([a1f9532](https://github.com/TEHIK-EE/tedi-design-system/commit/a1f953265eac9cb8bb8b57312df1c8f0cf85185c)) -- **number-field:** TEDI-Ready NumberField development [#309](https://github.com/TEHIK-EE/tedi-design-system/issues/309) ([#361](https://github.com/TEHIK-EE/tedi-design-system/issues/361)) ([cafd8e4](https://github.com/TEHIK-EE/tedi-design-system/commit/cafd8e4d74dcb57331859bd07ca5ebca06edfb7e)), closes [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) -- **section:** TEDI-Ready Section component development [#350](https://github.com/TEHIK-EE/tedi-design-system/issues/350) ([#351](https://github.com/TEHIK-EE/tedi-design-system/issues/351)) ([fb1db42](https://github.com/TEHIK-EE/tedi-design-system/commit/fb1db423a5118b09ffddd405c13b27afa8149a5b)) -- **select:** Align clear icon with tag text [#367](https://github.com/TEHIK-EE/tedi-design-system/issues/367) ([#368](https://github.com/TEHIK-EE/tedi-design-system/issues/368)) ([d723de0](https://github.com/TEHIK-EE/tedi-design-system/commit/d723de0d2b9822feb5c5aefe64cacdb826003da9)) -- **textarea:** TEDI-Ready TextArea development [#282](https://github.com/TEHIK-EE/tedi-design-system/issues/282) ([#369](https://github.com/TEHIK-EE/tedi-design-system/issues/369)) ([857b441](https://github.com/TEHIK-EE/tedi-design-system/commit/857b44115d245da478dbcf0fa2a601b836fa4664)), closes [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) -- **textfield:** TEDI-Ready TextField development [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) ([#352](https://github.com/TEHIK-EE/tedi-design-system/issues/352)) ([967b1a1](https://github.com/TEHIK-EE/tedi-design-system/commit/967b1a1d8287f0e2b31e60d201f664dc95d155b3)) -- **toast:** TEDI-Ready Toast component development [#356](https://github.com/TEHIK-EE/tedi-design-system/issues/356) ([#375](https://github.com/TEHIK-EE/tedi-design-system/issues/375)) ([850286a](https://github.com/TEHIK-EE/tedi-design-system/commit/850286a5cd6ccd90c51f47441f51d70d584081cd)) -- **truncate:** TEDI-Ready Truncate development [#364](https://github.com/TEHIK-EE/tedi-design-system/issues/364) ([#370](https://github.com/TEHIK-EE/tedi-design-system/issues/370)) ([6cbac4c](https://github.com/TEHIK-EE/tedi-design-system/commit/6cbac4cbb6c3e550fe2dc394bc60c938ab8072f0)) - -### BREAKING CHANGES - -- **toast:** Community Toast removed, use TEDI-Ready Toast and update imports - -Co-authored-by: Airike Jaska <airike.jaska@bitweb.ee> - -- **textarea:** Community's TextArea Removed, use TEDI-Ready TextArea, update imports -- **hide-on-scroll:** remove community component -- **hide-on-scroll:** show component when scrolling back up needs now toggleVisibility prop -- **number-field:** Community TextField removed, use TEDI-Ready TextField instead, update imports -- **number-field:** Community NumberField replaced with TEDI-Ready NumberField, update imports -- **textfield:** Community TextField removed, use TEDI-Ready TextField instead, update imports -- **section:** Communitys Section removed, use TEDI-Ready Section instead, update imports - -# [10.0.0-rc.11](https://github.com/TEHIK-EE/tedi-design-system/compare/v10.0.0-rc.10...v10.0.0-rc.11) (2024-12-18) - -### Features - -- **toast:** TEDI-Ready Toast component development [#356](https://github.com/TEHIK-EE/tedi-design-system/issues/356) ([#375](https://github.com/TEHIK-EE/tedi-design-system/issues/375)) ([850286a](https://github.com/TEHIK-EE/tedi-design-system/commit/850286a5cd6ccd90c51f47441f51d70d584081cd)) - -### BREAKING CHANGES - -- **toast:** Community Toast removed, use TEDI-Ready Toast and update imports - -Co-authored-by: Airike Jaska <airike.jaska@bitweb.ee> - -# [10.0.0-rc.10](https://github.com/TEHIK-EE/tedi-design-system/compare/v10.0.0-rc.9...v10.0.0-rc.10) (2024-12-18) - -### Features - -- **textarea:** TEDI-Ready TextArea development [#282](https://github.com/TEHIK-EE/tedi-design-system/issues/282) ([#369](https://github.com/TEHIK-EE/tedi-design-system/issues/369)) ([857b441](https://github.com/TEHIK-EE/tedi-design-system/commit/857b44115d245da478dbcf0fa2a601b836fa4664)), closes [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) - -### BREAKING CHANGES - -- **textarea:** Community's TextArea Removed, use TEDI-Ready TextArea, update imports - -# [10.0.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/v10.0.0-rc.8...v10.0.0-rc.9) (2024-12-17) - -### Features - -- **truncate:** TEDI-Ready Truncate development [#364](https://github.com/TEHIK-EE/tedi-design-system/issues/364) ([#370](https://github.com/TEHIK-EE/tedi-design-system/issues/370)) ([6cbac4c](https://github.com/TEHIK-EE/tedi-design-system/commit/6cbac4cbb6c3e550fe2dc394bc60c938ab8072f0)) - -# [10.0.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/v10.0.0-rc.7...v10.0.0-rc.8) (2024-12-16) - -### Features - -- **floating-button:** add export [#371](https://github.com/TEHIK-EE/tedi-design-system/issues/371) ([#372](https://github.com/TEHIK-EE/tedi-design-system/issues/372)) ([37ab729](https://github.com/TEHIK-EE/tedi-design-system/commit/37ab729a6597e542eed020ad49a9cd951ba6e27d)) - -# [10.0.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/v10.0.0-rc.6...v10.0.0-rc.7) (2024-12-16) - -### Features - -- **hide-on-scroll:** add component [#339](https://github.com/TEHIK-EE/tedi-design-system/issues/339) ([#363](https://github.com/TEHIK-EE/tedi-design-system/issues/363)) ([9b356f0](https://github.com/TEHIK-EE/tedi-design-system/commit/9b356f0c2801ca5d86bca7750952ad034ce74b4d)), closes [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) - -### BREAKING CHANGES - -- **hide-on-scroll:** remove community component -- **hide-on-scroll:** show component when scrolling back up needs now toggleVisibility prop - -# [10.0.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/v10.0.0-rc.5...v10.0.0-rc.6) (2024-12-16) - -### Features - -- **select:** Align clear icon with tag text [#367](https://github.com/TEHIK-EE/tedi-design-system/issues/367) ([#368](https://github.com/TEHIK-EE/tedi-design-system/issues/368)) ([d723de0](https://github.com/TEHIK-EE/tedi-design-system/commit/d723de0d2b9822feb5c5aefe64cacdb826003da9)) - -# [10.0.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/v10.0.0-rc.4...v10.0.0-rc.5) (2024-12-13) - -### Bug Fixes - -- **typography:** Base font values to rem [#365](https://github.com/TEHIK-EE/tedi-design-system/issues/365) ([#366](https://github.com/TEHIK-EE/tedi-design-system/issues/366)) ([074c590](https://github.com/TEHIK-EE/tedi-design-system/commit/074c590be2334e291b6903444d921dd548caa09a)) - -# [10.0.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/v10.0.0-rc.3...v10.0.0-rc.4) (2024-12-13) - -### Features - -- **number-field:** TEDI-Ready NumberField development [#309](https://github.com/TEHIK-EE/tedi-design-system/issues/309) ([#361](https://github.com/TEHIK-EE/tedi-design-system/issues/361)) ([cafd8e4](https://github.com/TEHIK-EE/tedi-design-system/commit/cafd8e4d74dcb57331859bd07ca5ebca06edfb7e)), closes [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) - -### BREAKING CHANGES - -- **number-field:** Community TextField removed, use TEDI-Ready TextField instead, update imports -- **number-field:** Community NumberField replaced with TEDI-Ready NumberField, update imports - -# [10.0.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/v10.0.0-rc.2...v10.0.0-rc.3) (2024-12-12) - -### Features - -- **textfield:** TEDI-Ready TextField development [#234](https://github.com/TEHIK-EE/tedi-design-system/issues/234) ([#352](https://github.com/TEHIK-EE/tedi-design-system/issues/352)) ([967b1a1](https://github.com/TEHIK-EE/tedi-design-system/commit/967b1a1d8287f0e2b31e60d201f664dc95d155b3)) - -### BREAKING CHANGES - -- **textfield:** Community TextField removed, use TEDI-Ready TextField instead, update imports - -# [10.0.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/v10.0.0-rc.1...v10.0.0-rc.2) (2024-12-11) - -### Features - -- **floating-button:** add component [#303](https://github.com/TEHIK-EE/tedi-design-system/issues/303) ([#360](https://github.com/TEHIK-EE/tedi-design-system/issues/360)) ([c25470e](https://github.com/TEHIK-EE/tedi-design-system/commit/c25470ea7230b143d6a248f5f040d0c46cd5f3a4)) - -# [10.0.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.1.0-rc.8...v10.0.0-rc.1) (2024-12-11) - -### Features - -- **section:** TEDI-Ready Section component development [#350](https://github.com/TEHIK-EE/tedi-design-system/issues/350) ([#351](https://github.com/TEHIK-EE/tedi-design-system/issues/351)) ([fb1db42](https://github.com/TEHIK-EE/tedi-design-system/commit/fb1db423a5118b09ffddd405c13b27afa8149a5b)) - -### BREAKING CHANGES - -- **section:** Communitys Section removed, use TEDI-Ready Section instead, update imports - -# [9.1.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.1.0-rc.7...v9.1.0-rc.8) (2024-12-10) - -### Features - -- **label:** Add infobutton props [#340](https://github.com/TEHIK-EE/tedi-design-system/issues/340) ([#348](https://github.com/TEHIK-EE/tedi-design-system/issues/348)) ([a1f9532](https://github.com/TEHIK-EE/tedi-design-system/commit/a1f953265eac9cb8bb8b57312df1c8f0cf85185c)) - -# [9.1.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.1.0-rc.6...v9.1.0-rc.7) (2024-12-10) - -### Bug Fixes - -- **link:** Icon not vertically center [#347](https://github.com/TEHIK-EE/tedi-design-system/issues/347) ([#349](https://github.com/TEHIK-EE/tedi-design-system/issues/349)) ([4d209bc](https://github.com/TEHIK-EE/tedi-design-system/commit/4d209bc53c8285804b695dd5d65989fa6ffebd9d)) - -# [9.1.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.1.0-rc.5...v9.1.0-rc.6) (2024-12-10) - -### Bug Fixes - -- **icon:** Apply className to wrapper when background is set [#344](https://github.com/TEHIK-EE/tedi-design-system/issues/344) ([#359](https://github.com/TEHIK-EE/tedi-design-system/issues/359)) ([f0e1a68](https://github.com/TEHIK-EE/tedi-design-system/commit/f0e1a68ef4cdd1bed19cf9b89b8f6c123fd1ba80)) - -# [9.1.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.1.0-rc.4...v9.1.0-rc.5) (2024-12-10) - -### Bug Fixes - -- **grid:** Increase $grid-row-columns to 12 [#345](https://github.com/TEHIK-EE/tedi-design-system/issues/345) ([#358](https://github.com/TEHIK-EE/tedi-design-system/issues/358)) ([4326af5](https://github.com/TEHIK-EE/tedi-design-system/commit/4326af5705d27002faaece768505b3dba0382fc1)) -- **modal:** Modal open focus fix [#343](https://github.com/TEHIK-EE/tedi-design-system/issues/343) ([#357](https://github.com/TEHIK-EE/tedi-design-system/issues/357)) ([0a8b54c](https://github.com/TEHIK-EE/tedi-design-system/commit/0a8b54c777da611367c1e2007170848939623d5e)) - -# [9.1.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.1.0-rc.3...v9.1.0-rc.4) (2024-12-08) - -### Bug Fixes - -- **scroll-fade:** round calculation for scrollToBottom [#353](https://github.com/TEHIK-EE/tedi-design-system/issues/353) ([#355](https://github.com/TEHIK-EE/tedi-design-system/issues/355)) ([762982c](https://github.com/TEHIK-EE/tedi-design-system/commit/762982c7ced2de8e630d62620d5fdc8f836cda83)) - -# [9.1.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.1.0-rc.2...v9.1.0-rc.3) (2024-12-06) - -### Bug Fixes - -- **scroll-fade:** round calculation for scrollToBottom [#353](https://github.com/TEHIK-EE/tedi-design-system/issues/353) ([#354](https://github.com/TEHIK-EE/tedi-design-system/issues/354)) ([46b5dce](https://github.com/TEHIK-EE/tedi-design-system/commit/46b5dce1002ec184739484bc3dde4f3de1736c72)) - -# [9.1.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.1.0-rc.1...v9.1.0-rc.2) (2024-12-02) - -### Bug Fixes - -- **skeleton:** Apply opacity to skeleton background [#341](https://github.com/TEHIK-EE/tedi-design-system/issues/341) ([#342](https://github.com/TEHIK-EE/tedi-design-system/issues/342)) ([bf31f15](https://github.com/TEHIK-EE/tedi-design-system/commit/bf31f1571599efcfae3f63976339b3db3a35e453)) - -# [9.1.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0...v9.1.0-rc.1) (2024-12-02) - -### Features - -- **info-button:** New TEDI-Ready InfoButton component development [#332](https://github.com/TEHIK-EE/tedi-design-system/issues/332) ([#338](https://github.com/TEHIK-EE/tedi-design-system/issues/338)) ([635916f](https://github.com/TEHIK-EE/tedi-design-system/commit/635916f628b97a458c7ace62530c8799e5c6322e)) - -# [9.0.0](https://github.com/TEHIK-EE/tedi-design-system/compare/v8.0.0...v9.0.0) (2024-11-28) - -### Bug Fixes - -- **alert:** Fix content only alignment [#320](https://github.com/TEHIK-EE/tedi-design-system/issues/320) ([#324](https://github.com/TEHIK-EE/tedi-design-system/issues/324)) ([fa44d69](https://github.com/TEHIK-EE/tedi-design-system/commit/fa44d6921159b960511e4600e511720db22fa9e3)) -- **alert:** Wrap title and children inside a div to prevent display flex problems [#314](https://github.com/TEHIK-EE/tedi-design-system/issues/314) ([#317](https://github.com/TEHIK-EE/tedi-design-system/issues/317)) ([c1a5994](https://github.com/TEHIK-EE/tedi-design-system/commit/c1a5994c5c3d214c6d67cdc2a4c62e63c183badf)) -- **anchor, toggleOpen, Accordion:** link toggle-open not rotating [#286](https://github.com/TEHIK-EE/tedi-design-system/issues/286) ([#287](https://github.com/TEHIK-EE/tedi-design-system/issues/287)) ([23d342e](https://github.com/TEHIK-EE/tedi-design-system/commit/23d342ed550ada67c98955f2b322d7dc201f7f29)) -- **button, link, formLabel, list, separator, verticalSpacing:** Added tedi- prefix to classes [#291](https://github.com/TEHIK-EE/tedi-design-system/issues/291) ([#298](https://github.com/TEHIK-EE/tedi-design-system/issues/298)) ([489d577](https://github.com/TEHIK-EE/tedi-design-system/commit/489d577bdf98af39aba2ef0384901d4b93ffee13)) -- **button, link:** Prevent text wrapping in Button and Link components [#311](https://github.com/TEHIK-EE/tedi-design-system/issues/311) ([#312](https://github.com/TEHIK-EE/tedi-design-system/issues/312)) ([8fb3016](https://github.com/TEHIK-EE/tedi-design-system/commit/8fb301602e624d75752623cfc6a8783b17736051)) -- **check:** Check icon positioning bug [#300](https://github.com/TEHIK-EE/tedi-design-system/issues/300) ([#301](https://github.com/TEHIK-EE/tedi-design-system/issues/301)) ([3c85ec4](https://github.com/TEHIK-EE/tedi-design-system/commit/3c85ec4760875e2a71e662ff5ab6f964e8c0c077)) -- **ClosingButton:** add type button [#302](https://github.com/TEHIK-EE/tedi-design-system/issues/302) ([#305](https://github.com/TEHIK-EE/tedi-design-system/issues/305)) ([4188d1b](https://github.com/TEHIK-EE/tedi-design-system/commit/4188d1b22ddb6d2b46d5608fac9a526f1f4ff2a9)) -- **colors:** Update color variables [#268](https://github.com/TEHIK-EE/tedi-design-system/issues/268) ([#273](https://github.com/TEHIK-EE/tedi-design-system/issues/273)) ([e62595e](https://github.com/TEHIK-EE/tedi-design-system/commit/e62595e6b64d4f3521f5a30248019bf45efe6218)) -- **icon, spinner, status-badge:** Fix BEM convention [#328](https://github.com/TEHIK-EE/tedi-design-system/issues/328) ([#329](https://github.com/TEHIK-EE/tedi-design-system/issues/329)) ([9082213](https://github.com/TEHIK-EE/tedi-design-system/commit/90822132747ae335bfd96b58c810382a0cf1b0e0)) -- **icon:** Add material-symbols class to Community Icon to fix icon dimensions [#313](https://github.com/TEHIK-EE/tedi-design-system/issues/313) ([#315](https://github.com/TEHIK-EE/tedi-design-system/issues/315)) ([d63c86a](https://github.com/TEHIK-EE/tedi-design-system/commit/d63c86a6507f76fe78054b6383145473a192837e)) -- **icon:** Added forwardRef possibility to Icon [#318](https://github.com/TEHIK-EE/tedi-design-system/issues/318) ([#321](https://github.com/TEHIK-EE/tedi-design-system/issues/321)) ([7719a76](https://github.com/TEHIK-EE/tedi-design-system/commit/7719a764da2f3167af2ce23434814e4dc3ada0d2)) -- **icon:** Improve display style usage [#323](https://github.com/TEHIK-EE/tedi-design-system/issues/323) ([#325](https://github.com/TEHIK-EE/tedi-design-system/issues/325)) ([315a64e](https://github.com/TEHIK-EE/tedi-design-system/commit/315a64e79ac3dea7a2033af4cd843ba079d8afee)) -- **icon:** Material symbols css overriding icon--block css [#276](https://github.com/TEHIK-EE/tedi-design-system/issues/276) ([#277](https://github.com/TEHIK-EE/tedi-design-system/issues/277)) ([65f5741](https://github.com/TEHIK-EE/tedi-design-system/commit/65f5741723d10e33e23f46cd405d3b839ca09f85)) -- **Icon:** specify icon display classes [#326](https://github.com/TEHIK-EE/tedi-design-system/issues/326) ([#327](https://github.com/TEHIK-EE/tedi-design-system/issues/327)) ([9599e85](https://github.com/TEHIK-EE/tedi-design-system/commit/9599e85d0de53f6a2915a7361aa6dda2595b17a8)) -- **link, closing-button:** Fix double focus border [#297](https://github.com/TEHIK-EE/tedi-design-system/issues/297) ([#299](https://github.com/TEHIK-EE/tedi-design-system/issues/299)) ([7a8212e](https://github.com/TEHIK-EE/tedi-design-system/commit/7a8212e789d28ca6680c017b9775aef398cf894a)) -- **link:** Allow link wrapping into multiple lines [#316](https://github.com/TEHIK-EE/tedi-design-system/issues/316) ([#322](https://github.com/TEHIK-EE/tedi-design-system/issues/322)) ([8b651f2](https://github.com/TEHIK-EE/tedi-design-system/commit/8b651f22c1b4203b217c52b4032e405dcf636feb)) -- **link:** Fix horizontal paddings [#293](https://github.com/TEHIK-EE/tedi-design-system/issues/293) ([#295](https://github.com/TEHIK-EE/tedi-design-system/issues/295)) ([3580270](https://github.com/TEHIK-EE/tedi-design-system/commit/358027071221037e114cc19a50e884826158f21a)) -- **print:** new Tedi Print component shows console.error on tests [#271](https://github.com/TEHIK-EE/tedi-design-system/issues/271) ([#272](https://github.com/TEHIK-EE/tedi-design-system/issues/272)) ([311e659](https://github.com/TEHIK-EE/tedi-design-system/commit/311e659c0947f2effdfa19fbdbf621a23997f62a)) -- **print:** Print helper styles missing [#269](https://github.com/TEHIK-EE/tedi-design-system/issues/269) ([#270](https://github.com/TEHIK-EE/tedi-design-system/issues/270)) ([a534d60](https://github.com/TEHIK-EE/tedi-design-system/commit/a534d60b3e38c2a26ac7fb1b9679c23073925798)) -- **spinner:** Remove Community Spinner and Replace with TEDI-Ready Sp… ([#285](https://github.com/TEHIK-EE/tedi-design-system/issues/285)) ([fca3643](https://github.com/TEHIK-EE/tedi-design-system/commit/fca3643471c80fb107136374531803884ca32078)), closes [#228](https://github.com/TEHIK-EE/tedi-design-system/issues/228) - -### Features - -- **alert:** TEDI-Ready Alert development [#290](https://github.com/TEHIK-EE/tedi-design-system/issues/290) ([#294](https://github.com/TEHIK-EE/tedi-design-system/issues/294)) ([f7b7a2d](https://github.com/TEHIK-EE/tedi-design-system/commit/f7b7a2d04c69d20015ce8d36593486f47ff6f9e1)) -- **button:** TEDI-Ready Button development [#225](https://github.com/TEHIK-EE/tedi-design-system/issues/225) ([#281](https://github.com/TEHIK-EE/tedi-design-system/issues/281)) ([9f794ee](https://github.com/TEHIK-EE/tedi-design-system/commit/9f794eeb4b8df2855ae65bc871e39489cef6d83a)) -- **feedback-text:** TEDI-Ready FeedbackText component development [#304](https://github.com/TEHIK-EE/tedi-design-system/issues/304) ([#306](https://github.com/TEHIK-EE/tedi-design-system/issues/306)) ([7341d8c](https://github.com/TEHIK-EE/tedi-design-system/commit/7341d8c5e48f94bba9896855978f96a707b1cc9d)) -- **link:** TEDI-Ready Link development [#213](https://github.com/TEHIK-EE/tedi-design-system/issues/213) ([#283](https://github.com/TEHIK-EE/tedi-design-system/issues/283)) ([92b25b9](https://github.com/TEHIK-EE/tedi-design-system/commit/92b25b9ed23a4855d63163c7efc4c4bc5846cfa8)), closes [#225](https://github.com/TEHIK-EE/tedi-design-system/issues/225) [#225](https://github.com/TEHIK-EE/tedi-design-system/issues/225) [#225](https://github.com/TEHIK-EE/tedi-design-system/issues/225) -- **print:** New TEDI-Ready component Print [#251](https://github.com/TEHIK-EE/tedi-design-system/issues/251) ([#259](https://github.com/TEHIK-EE/tedi-design-system/issues/259)) ([b9a333b](https://github.com/TEHIK-EE/tedi-design-system/commit/b9a333bcd21943f9e4590284f51da46e4e78b6f0)) -- **separator:** New TEDI-Ready component Separator [#206](https://github.com/TEHIK-EE/tedi-design-system/issues/206) ([#258](https://github.com/TEHIK-EE/tedi-design-system/issues/258)) ([cd57691](https://github.com/TEHIK-EE/tedi-design-system/commit/cd576912434f2599c93120686f96d9a0173b0cc2)) -- **skeleton:** TEDI-Ready component Skeleton [#167](https://github.com/TEHIK-EE/tedi-design-system/issues/167) ([#252](https://github.com/TEHIK-EE/tedi-design-system/issues/252)) ([abf93e9](https://github.com/TEHIK-EE/tedi-design-system/commit/abf93e9948c20a2e745c1d088a7353b423c8b26f)) -- **stretch-content:** TEDI-Ready StretchContent development [#288](https://github.com/TEHIK-EE/tedi-design-system/issues/288) ([#289](https://github.com/TEHIK-EE/tedi-design-system/issues/289)) ([d16fa51](https://github.com/TEHIK-EE/tedi-design-system/commit/d16fa51a68ca4aab668028a5ae348920418e0c0c)) -- **tabs:** add possibility to hide nav when printing [#266](https://github.com/TEHIK-EE/tedi-design-system/issues/266) ([#267](https://github.com/TEHIK-EE/tedi-design-system/issues/267)) ([49916a3](https://github.com/TEHIK-EE/tedi-design-system/commit/49916a3ccdc74358c7524252885f4321d967a060)) - -### BREAKING CHANGES - -- **feedback-text:** Community FormLabel removed, use TEDI-Ready FormLabel -- **alert:** Community Notification removed. Replace with TEDI-Ready Alert -- **stretch-content:** Community StretchContent removed. Replace with TEDI-Ready StretchContent -- **spinner:** Community Spinner removed. Replace with TEDI-Ready Spinner -- **skeleton:** Communitys Skeleton removed, TEDI-Ready Skeleton is now available -- **print:** This component will be removed from the Community in the next major release. - -Co-authored-by: Airike Jaska <airike.jaska@bitweb.ee> - -# [9.0.0-rc.29](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.28...v9.0.0-rc.29) (2024-11-26) - -### Bug Fixes - -- **icon, spinner, status-badge:** Fix BEM convention [#328](https://github.com/TEHIK-EE/tedi-design-system/issues/328) ([#329](https://github.com/TEHIK-EE/tedi-design-system/issues/329)) ([9082213](https://github.com/TEHIK-EE/tedi-design-system/commit/90822132747ae335bfd96b58c810382a0cf1b0e0)) - -# [9.0.0-rc.28](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.27...v9.0.0-rc.28) (2024-11-25) - -### Bug Fixes - -- **Icon:** specify icon display classes [#326](https://github.com/TEHIK-EE/tedi-design-system/issues/326) ([#327](https://github.com/TEHIK-EE/tedi-design-system/issues/327)) ([9599e85](https://github.com/TEHIK-EE/tedi-design-system/commit/9599e85d0de53f6a2915a7361aa6dda2595b17a8)) - -# [9.0.0-rc.27](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.26...v9.0.0-rc.27) (2024-11-25) - -### Bug Fixes - -- **icon:** Improve display style usage [#323](https://github.com/TEHIK-EE/tedi-design-system/issues/323) ([#325](https://github.com/TEHIK-EE/tedi-design-system/issues/325)) ([315a64e](https://github.com/TEHIK-EE/tedi-design-system/commit/315a64e79ac3dea7a2033af4cd843ba079d8afee)) - -# [9.0.0-rc.26](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.25...v9.0.0-rc.26) (2024-11-25) - -### Bug Fixes - -- **alert:** Fix content only alignment [#320](https://github.com/TEHIK-EE/tedi-design-system/issues/320) ([#324](https://github.com/TEHIK-EE/tedi-design-system/issues/324)) ([fa44d69](https://github.com/TEHIK-EE/tedi-design-system/commit/fa44d6921159b960511e4600e511720db22fa9e3)) - -# [9.0.0-rc.25](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.24...v9.0.0-rc.25) (2024-11-25) - -### Bug Fixes - -- **link:** Allow link wrapping into multiple lines [#316](https://github.com/TEHIK-EE/tedi-design-system/issues/316) ([#322](https://github.com/TEHIK-EE/tedi-design-system/issues/322)) ([8b651f2](https://github.com/TEHIK-EE/tedi-design-system/commit/8b651f22c1b4203b217c52b4032e405dcf636feb)) - -# [9.0.0-rc.24](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.23...v9.0.0-rc.24) (2024-11-25) - -### Bug Fixes - -- **icon:** Added forwardRef possibility to Icon [#318](https://github.com/TEHIK-EE/tedi-design-system/issues/318) ([#321](https://github.com/TEHIK-EE/tedi-design-system/issues/321)) ([7719a76](https://github.com/TEHIK-EE/tedi-design-system/commit/7719a764da2f3167af2ce23434814e4dc3ada0d2)) - -# [9.0.0-rc.23](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.22...v9.0.0-rc.23) (2024-11-22) - -### Bug Fixes - -- **alert:** Wrap title and children inside a div to prevent display flex problems [#314](https://github.com/TEHIK-EE/tedi-design-system/issues/314) ([#317](https://github.com/TEHIK-EE/tedi-design-system/issues/317)) ([c1a5994](https://github.com/TEHIK-EE/tedi-design-system/commit/c1a5994c5c3d214c6d67cdc2a4c62e63c183badf)) - -# [9.0.0-rc.22](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.21...v9.0.0-rc.22) (2024-11-22) - -### Bug Fixes - -- **icon:** Add material-symbols class to Community Icon to fix icon dimensions [#313](https://github.com/TEHIK-EE/tedi-design-system/issues/313) ([#315](https://github.com/TEHIK-EE/tedi-design-system/issues/315)) ([d63c86a](https://github.com/TEHIK-EE/tedi-design-system/commit/d63c86a6507f76fe78054b6383145473a192837e)) - -# [9.0.0-rc.21](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.20...v9.0.0-rc.21) (2024-11-22) - -### Bug Fixes - -- **button, link:** Prevent text wrapping in Button and Link components [#311](https://github.com/TEHIK-EE/tedi-design-system/issues/311) ([#312](https://github.com/TEHIK-EE/tedi-design-system/issues/312)) ([8fb3016](https://github.com/TEHIK-EE/tedi-design-system/commit/8fb301602e624d75752623cfc6a8783b17736051)) - -# [9.0.0-rc.20](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.19...v9.0.0-rc.20) (2024-11-21) - -### Features - -- **feedback-text:** TEDI-Ready FeedbackText component development [#304](https://github.com/TEHIK-EE/tedi-design-system/issues/304) ([#306](https://github.com/TEHIK-EE/tedi-design-system/issues/306)) ([7341d8c](https://github.com/TEHIK-EE/tedi-design-system/commit/7341d8c5e48f94bba9896855978f96a707b1cc9d)) - -### BREAKING CHANGES - -- **feedback-text:** Community FormLabel removed, use TEDI-Ready FormLabel - -# [9.0.0-rc.19](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.18...v9.0.0-rc.19) (2024-11-19) - -### Bug Fixes - -- **ClosingButton:** add type button [#302](https://github.com/TEHIK-EE/tedi-design-system/issues/302) ([#305](https://github.com/TEHIK-EE/tedi-design-system/issues/305)) ([4188d1b](https://github.com/TEHIK-EE/tedi-design-system/commit/4188d1b22ddb6d2b46d5608fac9a526f1f4ff2a9)) - -# [9.0.0-rc.18](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.17...v9.0.0-rc.18) (2024-11-19) - -### Bug Fixes - -- **check:** Check icon positioning bug [#300](https://github.com/TEHIK-EE/tedi-design-system/issues/300) ([#301](https://github.com/TEHIK-EE/tedi-design-system/issues/301)) ([3c85ec4](https://github.com/TEHIK-EE/tedi-design-system/commit/3c85ec4760875e2a71e662ff5ab6f964e8c0c077)) - -# [9.0.0-rc.17](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.16...v9.0.0-rc.17) (2024-11-19) - -### Bug Fixes - -- **link, closing-button:** Fix double focus border [#297](https://github.com/TEHIK-EE/tedi-design-system/issues/297) ([#299](https://github.com/TEHIK-EE/tedi-design-system/issues/299)) ([7a8212e](https://github.com/TEHIK-EE/tedi-design-system/commit/7a8212e789d28ca6680c017b9775aef398cf894a)) - -# [9.0.0-rc.16](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.15...v9.0.0-rc.16) (2024-11-19) - -### Bug Fixes - -- **button, link, formLabel, list, separator, verticalSpacing:** Added tedi- prefix to classes [#291](https://github.com/TEHIK-EE/tedi-design-system/issues/291) ([#298](https://github.com/TEHIK-EE/tedi-design-system/issues/298)) ([489d577](https://github.com/TEHIK-EE/tedi-design-system/commit/489d577bdf98af39aba2ef0384901d4b93ffee13)) - -# [9.0.0-rc.15](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.14...v9.0.0-rc.15) (2024-11-18) - -### Features - -- **alert:** TEDI-Ready Alert development [#290](https://github.com/TEHIK-EE/tedi-design-system/issues/290) ([#294](https://github.com/TEHIK-EE/tedi-design-system/issues/294)) ([f7b7a2d](https://github.com/TEHIK-EE/tedi-design-system/commit/f7b7a2d04c69d20015ce8d36593486f47ff6f9e1)) - -### BREAKING CHANGES - -- **alert:** Community Notification removed. Replace with TEDI-Ready Alert - -# [9.0.0-rc.14](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.13...v9.0.0-rc.14) (2024-11-18) - -### Bug Fixes - -- **link:** Fix horizontal paddings [#293](https://github.com/TEHIK-EE/tedi-design-system/issues/293) ([#295](https://github.com/TEHIK-EE/tedi-design-system/issues/295)) ([3580270](https://github.com/TEHIK-EE/tedi-design-system/commit/358027071221037e114cc19a50e884826158f21a)) - -# [9.0.0-rc.13](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.12...v9.0.0-rc.13) (2024-11-15) - -### Features - -- **stretch-content:** TEDI-Ready StretchContent development [#288](https://github.com/TEHIK-EE/tedi-design-system/issues/288) ([#289](https://github.com/TEHIK-EE/tedi-design-system/issues/289)) ([d16fa51](https://github.com/TEHIK-EE/tedi-design-system/commit/d16fa51a68ca4aab668028a5ae348920418e0c0c)) - -### BREAKING CHANGES - -- **stretch-content:** Community StretchContent removed. Replace with TEDI-Ready StretchContent - -# [9.0.0-rc.12](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.11...v9.0.0-rc.12) (2024-11-15) - -### Features - -- **link:** TEDI-Ready Link development [#213](https://github.com/TEHIK-EE/tedi-design-system/issues/213) ([#283](https://github.com/TEHIK-EE/tedi-design-system/issues/283)) ([92b25b9](https://github.com/TEHIK-EE/tedi-design-system/commit/92b25b9ed23a4855d63163c7efc4c4bc5846cfa8)), closes [#225](https://github.com/TEHIK-EE/tedi-design-system/issues/225) [#225](https://github.com/TEHIK-EE/tedi-design-system/issues/225) [#225](https://github.com/TEHIK-EE/tedi-design-system/issues/225) - -# [9.0.0-rc.11](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.10...v9.0.0-rc.11) (2024-11-14) - -### Bug Fixes - -- **anchor, toggleOpen, Accordion:** link toggle-open not rotating [#286](https://github.com/TEHIK-EE/tedi-design-system/issues/286) ([#287](https://github.com/TEHIK-EE/tedi-design-system/issues/287)) ([23d342e](https://github.com/TEHIK-EE/tedi-design-system/commit/23d342ed550ada67c98955f2b322d7dc201f7f29)) - -# [9.0.0-rc.10](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.9...v9.0.0-rc.10) (2024-11-14) - -### Bug Fixes - -- **spinner:** Remove Community Spinner and Replace with TEDI-Ready Sp… ([#285](https://github.com/TEHIK-EE/tedi-design-system/issues/285)) ([fca3643](https://github.com/TEHIK-EE/tedi-design-system/commit/fca3643471c80fb107136374531803884ca32078)), closes [#228](https://github.com/TEHIK-EE/tedi-design-system/issues/228) - -### BREAKING CHANGES - -- **spinner:** Community Spinner removed. Replace with TEDI-Ready Spinner - -# [9.0.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.8...v9.0.0-rc.9) (2024-11-13) - -### Features - -- **button:** TEDI-Ready Button development [#225](https://github.com/TEHIK-EE/tedi-design-system/issues/225) ([#281](https://github.com/TEHIK-EE/tedi-design-system/issues/281)) ([9f794ee](https://github.com/TEHIK-EE/tedi-design-system/commit/9f794eeb4b8df2855ae65bc871e39489cef6d83a)) - -# [9.0.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.7...v9.0.0-rc.8) (2024-11-12) - -### Features - -- **skeleton:** TEDI-Ready component Skeleton [#167](https://github.com/TEHIK-EE/tedi-design-system/issues/167) ([#252](https://github.com/TEHIK-EE/tedi-design-system/issues/252)) ([abf93e9](https://github.com/TEHIK-EE/tedi-design-system/commit/abf93e9948c20a2e745c1d088a7353b423c8b26f)) - -### BREAKING CHANGES - -- **skeleton:** Communitys Skeleton removed, TEDI-Ready Skeleton is now available - -# [9.0.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.6...v9.0.0-rc.7) (2024-11-11) - -### Bug Fixes - -- **icon:** Material symbols css overriding icon--block css [#276](https://github.com/TEHIK-EE/tedi-design-system/issues/276) ([#277](https://github.com/TEHIK-EE/tedi-design-system/issues/277)) ([65f5741](https://github.com/TEHIK-EE/tedi-design-system/commit/65f5741723d10e33e23f46cd405d3b839ca09f85)) - -# [9.0.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.5...v9.0.0-rc.6) (2024-11-07) - -### Features - -- **separator:** New TEDI-Ready component Separator [#206](https://github.com/TEHIK-EE/tedi-design-system/issues/206) ([#258](https://github.com/TEHIK-EE/tedi-design-system/issues/258)) ([cd57691](https://github.com/TEHIK-EE/tedi-design-system/commit/cd576912434f2599c93120686f96d9a0173b0cc2)) - -# [9.0.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.4...v9.0.0-rc.5) (2024-11-05) - -### Bug Fixes - -- **colors:** Update color variables [#268](https://github.com/TEHIK-EE/tedi-design-system/issues/268) ([#273](https://github.com/TEHIK-EE/tedi-design-system/issues/273)) ([e62595e](https://github.com/TEHIK-EE/tedi-design-system/commit/e62595e6b64d4f3521f5a30248019bf45efe6218)) - -# [9.0.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.3...v9.0.0-rc.4) (2024-11-05) - -### Bug Fixes - -- **print:** new Tedi Print component shows console.error on tests [#271](https://github.com/TEHIK-EE/tedi-design-system/issues/271) ([#272](https://github.com/TEHIK-EE/tedi-design-system/issues/272)) ([311e659](https://github.com/TEHIK-EE/tedi-design-system/commit/311e659c0947f2effdfa19fbdbf621a23997f62a)) - -# [9.0.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.2...v9.0.0-rc.3) (2024-11-04) - -### Bug Fixes - -- **print:** Print helper styles missing [#269](https://github.com/TEHIK-EE/tedi-design-system/issues/269) ([#270](https://github.com/TEHIK-EE/tedi-design-system/issues/270)) ([a534d60](https://github.com/TEHIK-EE/tedi-design-system/commit/a534d60b3e38c2a26ac7fb1b9679c23073925798)) - -# [9.0.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/v9.0.0-rc.1...v9.0.0-rc.2) (2024-11-04) - -### Features - -- **tabs:** add possibility to hide nav when printing [#266](https://github.com/TEHIK-EE/tedi-design-system/issues/266) ([#267](https://github.com/TEHIK-EE/tedi-design-system/issues/267)) ([49916a3](https://github.com/TEHIK-EE/tedi-design-system/commit/49916a3ccdc74358c7524252885f4321d967a060)) - -# [9.0.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v8.0.0...v9.0.0-rc.1) (2024-11-04) - -### Features - -- **print:** New TEDI-Ready component Print [#251](https://github.com/TEHIK-EE/tedi-design-system/issues/251) ([#259](https://github.com/TEHIK-EE/tedi-design-system/issues/259)) ([b9a333b](https://github.com/TEHIK-EE/tedi-design-system/commit/b9a333bcd21943f9e4590284f51da46e4e78b6f0)) - -### BREAKING CHANGES - -- **print:** This component will be removed from the Community in the next major release. - -Co-authored-by: Airike Jaska <airike.jaska@bitweb.ee> - -# [8.0.0](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.0.0...v8.0.0) (2024-10-31) - -### Bug Fixes - -- **anchor, button:** align link type button to the left [#223](https://github.com/TEHIK-EE/tedi-design-system/issues/223) ([#224](https://github.com/TEHIK-EE/tedi-design-system/issues/224)) ([effc0a4](https://github.com/TEHIK-EE/tedi-design-system/commit/effc0a45c95d92619ab11fe0ba65741223d6b301)) -- **button, anchor:** inline link style button icon [#216](https://github.com/TEHIK-EE/tedi-design-system/issues/216) ([#217](https://github.com/TEHIK-EE/tedi-design-system/issues/217)) ([a48ed15](https://github.com/TEHIK-EE/tedi-design-system/commit/a48ed1554a59f0d13d5c9019263eb1cd40b66f7d)) -- **button:** fix loading icons [#216](https://github.com/TEHIK-EE/tedi-design-system/issues/216) ([#226](https://github.com/TEHIK-EE/tedi-design-system/issues/226)) ([4310979](https://github.com/TEHIK-EE/tedi-design-system/commit/431097901bebb266196d0a0fd98d30e2a8b8f787)) -- **general:** Library structure fix [#247](https://github.com/TEHIK-EE/tedi-design-system/issues/247) ([#248](https://github.com/TEHIK-EE/tedi-design-system/issues/248)) ([293f644](https://github.com/TEHIK-EE/tedi-design-system/commit/293f644cc438af68a5d438d1029390bbc035371d)) -- **grid:** Removed test-id attribute and improved unit tests [#201](https://github.com/TEHIK-EE/tedi-design-system/issues/201) ([#202](https://github.com/TEHIK-EE/tedi-design-system/issues/202)) ([e980eb5](https://github.com/TEHIK-EE/tedi-design-system/commit/e980eb52096edac4e35477f76c9a68e0c0756d32)) -- **icon:** Optimize material-symbols font pack [#230](https://github.com/TEHIK-EE/tedi-design-system/issues/230) ([#232](https://github.com/TEHIK-EE/tedi-design-system/issues/232)) ([76a388d](https://github.com/TEHIK-EE/tedi-design-system/commit/76a388d0ce272e4a6a298b870047bf6b7a38d8fb)) -- **icon:** Remove material-symbols font-size to respect custom Icon sizes [#208](https://github.com/TEHIK-EE/tedi-design-system/issues/208) ([#209](https://github.com/TEHIK-EE/tedi-design-system/issues/209)) ([b4e1d61](https://github.com/TEHIK-EE/tedi-design-system/commit/b4e1d618b1b1c4346684340cbe92f484e471d4ea)) -- **label:** add aria-hidden true to required label [#245](https://github.com/TEHIK-EE/tedi-design-system/issues/245) ([#246](https://github.com/TEHIK-EE/tedi-design-system/issues/246)) ([0deb6e6](https://github.com/TEHIK-EE/tedi-design-system/commit/0deb6e6fb2bd4a7197904240521cc6073669dd55)) -- **spinner:** Added default label, breakpointSupport, fixed test [#148](https://github.com/TEHIK-EE/tedi-design-system/issues/148) ([#220](https://github.com/TEHIK-EE/tedi-design-system/issues/220)) ([43599ee](https://github.com/TEHIK-EE/tedi-design-system/commit/43599ee4dc3c287fe84979176c1355d44e5c50ee)) -- **tag:** Close button size and tag paddings fix [#262](https://github.com/TEHIK-EE/tedi-design-system/issues/262) ([#263](https://github.com/TEHIK-EE/tedi-design-system/issues/263)) ([553507b](https://github.com/TEHIK-EE/tedi-design-system/commit/553507b945936e39309ae1ad1c0a876672172c56)) -- **tooltip:** add tooltip box shadow change [#243](https://github.com/TEHIK-EE/tedi-design-system/issues/243) ([#244](https://github.com/TEHIK-EE/tedi-design-system/issues/244)) ([96ec34e](https://github.com/TEHIK-EE/tedi-design-system/commit/96ec34e264180b0b728a0e76a19b15ceabef96d3)) - -### Features - -- **badge:** TEDI-402 Component: Badge [#174](https://github.com/TEHIK-EE/tedi-design-system/issues/174) ([#215](https://github.com/TEHIK-EE/tedi-design-system/issues/215)) ([a884f8e](https://github.com/TEHIK-EE/tedi-design-system/commit/a884f8e947fc9d1e03052f7be412a21c5c412217)), closes [#70](https://github.com/TEHIK-EE/tedi-design-system/issues/70) [#186](https://github.com/TEHIK-EE/tedi-design-system/issues/186) [TEHIK-EE#70](https://github.com/TEHIK-EE/issues/70) [#70](https://github.com/TEHIK-EE/tedi-design-system/issues/70) [#186](https://github.com/TEHIK-EE/tedi-design-system/issues/186) [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) [#195](https://github.com/TEHIK-EE/tedi-design-system/issues/195) [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) -- **form-label:** Component Label and FormLabel [#181](https://github.com/TEHIK-EE/tedi-design-system/issues/181) ([#214](https://github.com/TEHIK-EE/tedi-design-system/issues/214)) ([17f5c1d](https://github.com/TEHIK-EE/tedi-design-system/commit/17f5c1d4e4ae07718a17031cdeed653adb5fbf32)) -- **form-label:** Replace FormLabel in Community components with TEDI-Ready FormLabel [#227](https://github.com/TEHIK-EE/tedi-design-system/issues/227) ([#229](https://github.com/TEHIK-EE/tedi-design-system/issues/229)) ([ade9f77](https://github.com/TEHIK-EE/tedi-design-system/commit/ade9f776309ea5aa2bd34ae1b83f6cecd7cb680f)) -- **label-provider:** Move LabelProvider to TEDI-Ready [#207](https://github.com/TEHIK-EE/tedi-design-system/issues/207) ([#211](https://github.com/TEHIK-EE/tedi-design-system/issues/211)) ([86d259f](https://github.com/TEHIK-EE/tedi-design-system/commit/86d259fcf21febff48f03f2ef9095bd5a828198c)) -- **list:** Added indent to styled lists and className property [#221](https://github.com/TEHIK-EE/tedi-design-system/issues/221) ([#222](https://github.com/TEHIK-EE/tedi-design-system/issues/222)) ([3e0a253](https://github.com/TEHIK-EE/tedi-design-system/commit/3e0a2532fc0b00e927ef504b89fe71ac04872662)) -- **separator:** add height to Vertical Separator, deprecate fullWidth to isStretched [#218](https://github.com/TEHIK-EE/tedi-design-system/issues/218) ([#219](https://github.com/TEHIK-EE/tedi-design-system/issues/219)) ([b0c9536](https://github.com/TEHIK-EE/tedi-design-system/commit/b0c9536a9edd5df654033b823382ab1d9bf2dc17)) -- **tag, closing-button:** Component Tag and ClosingButton [#166](https://github.com/TEHIK-EE/tedi-design-system/issues/166) [#203](https://github.com/TEHIK-EE/tedi-design-system/issues/203) ([#233](https://github.com/TEHIK-EE/tedi-design-system/issues/233)) ([77095dc](https://github.com/TEHIK-EE/tedi-design-system/commit/77095dc4c35f4393f2bf9cd207155eafe90c0483)), closes [#163](https://github.com/TEHIK-EE/tedi-design-system/issues/163) -- **text-group:** TEDI-Ready component TextGroup [#180](https://github.com/TEHIK-EE/tedi-design-system/issues/180) ([#242](https://github.com/TEHIK-EE/tedi-design-system/issues/242)) ([ae2c637](https://github.com/TEHIK-EE/tedi-design-system/commit/ae2c637e33cc645cb45904ffb23c639320c51ea1)), closes [#181](https://github.com/TEHIK-EE/tedi-design-system/issues/181) [#181](https://github.com/TEHIK-EE/tedi-design-system/issues/181) -- **toggleOpen:** [#102](https://github.com/TEHIK-EE/tedi-design-system/issues/102) - Add an optional prop to render ToggleOpen as div instead of button ([#171](https://github.com/TEHIK-EE/tedi-design-system/issues/171)) ([62c9c4e](https://github.com/TEHIK-EE/tedi-design-system/commit/62c9c4e16b67e951f104d6bdca428aeab7e51f84)) - -### Reverts - -- Revert " feat(toggleOpen): #102 - Add an optional prop to render ToggleOpen a…" (#231) ([1179ad5](https://github.com/TEHIK-EE/tedi-design-system/commit/1179ad5110a6447db3c4abe7510e04f283f65c60)), closes [#102](https://github.com/TEHIK-EE/tedi-design-system/issues/102) [#231](https://github.com/TEHIK-EE/tedi-design-system/issues/231) - -### BREAKING CHANGES - -- **form-label:** The FormLabel component has been replaced with TEDI-FormLabel in Community - -Co-authored-by: Airike Jaska <airike.jaska@bitweb.ee> - -# [8.0.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/v8.0.0-rc.6...v8.0.0-rc.7) (2024-10-30) - -### Bug Fixes - -- **tag:** Close button size and tag paddings fix [#262](https://github.com/TEHIK-EE/tedi-design-system/issues/262) ([#263](https://github.com/TEHIK-EE/tedi-design-system/issues/263)) ([553507b](https://github.com/TEHIK-EE/tedi-design-system/commit/553507b945936e39309ae1ad1c0a876672172c56)) - -# [8.0.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/v8.0.0-rc.5...v8.0.0-rc.6) (2024-10-24) - -### Bug Fixes - -- **general:** Library structure fix [#247](https://github.com/TEHIK-EE/tedi-design-system/issues/247) ([#248](https://github.com/TEHIK-EE/tedi-design-system/issues/248)) ([293f644](https://github.com/TEHIK-EE/tedi-design-system/commit/293f644cc438af68a5d438d1029390bbc035371d)) - -# [8.0.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/v8.0.0-rc.4...v8.0.0-rc.5) (2024-10-24) - -### Features - -- **tag, closing-button:** Component Tag and ClosingButton [#166](https://github.com/TEHIK-EE/tedi-design-system/issues/166) [#203](https://github.com/TEHIK-EE/tedi-design-system/issues/203) ([#233](https://github.com/TEHIK-EE/tedi-design-system/issues/233)) ([77095dc](https://github.com/TEHIK-EE/tedi-design-system/commit/77095dc4c35f4393f2bf9cd207155eafe90c0483)), closes [#163](https://github.com/TEHIK-EE/tedi-design-system/issues/163) - -# [8.0.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/v8.0.0-rc.3...v8.0.0-rc.4) (2024-10-23) - -### Bug Fixes - -- **label:** add aria-hidden true to required label [#245](https://github.com/TEHIK-EE/tedi-design-system/issues/245) ([#246](https://github.com/TEHIK-EE/tedi-design-system/issues/246)) ([0deb6e6](https://github.com/TEHIK-EE/tedi-design-system/commit/0deb6e6fb2bd4a7197904240521cc6073669dd55)) - -# [8.0.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/v8.0.0-rc.2...v8.0.0-rc.3) (2024-10-22) - -### Bug Fixes - -- **tooltip:** add tooltip box shadow change [#243](https://github.com/TEHIK-EE/tedi-design-system/issues/243) ([#244](https://github.com/TEHIK-EE/tedi-design-system/issues/244)) ([96ec34e](https://github.com/TEHIK-EE/tedi-design-system/commit/96ec34e264180b0b728a0e76a19b15ceabef96d3)) - -# [8.0.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/v8.0.0-rc.1...v8.0.0-rc.2) (2024-10-22) - -### Features - -- **text-group:** TEDI-Ready component TextGroup [#180](https://github.com/TEHIK-EE/tedi-design-system/issues/180) ([#242](https://github.com/TEHIK-EE/tedi-design-system/issues/242)) ([ae2c637](https://github.com/TEHIK-EE/tedi-design-system/commit/ae2c637e33cc645cb45904ffb23c639320c51ea1)), closes [#181](https://github.com/TEHIK-EE/tedi-design-system/issues/181) [#181](https://github.com/TEHIK-EE/tedi-design-system/issues/181) - -# [8.0.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.1.0-rc.10...v8.0.0-rc.1) (2024-10-18) - -### Features - -- **form-label:** Replace FormLabel in Community components with TEDI-Ready FormLabel [#227](https://github.com/TEHIK-EE/tedi-design-system/issues/227) ([#229](https://github.com/TEHIK-EE/tedi-design-system/issues/229)) ([ade9f77](https://github.com/TEHIK-EE/tedi-design-system/commit/ade9f776309ea5aa2bd34ae1b83f6cecd7cb680f)) - -### BREAKING CHANGES - -- **form-label:** The FormLabel component has been replaced with TEDI-FormLabel in Community - -Co-authored-by: Airike Jaska <airike.jaska@bitweb.ee> - -# [7.1.0-rc.10](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.1.0-rc.9...v7.1.0-rc.10) (2024-10-16) - -### Bug Fixes - -- **icon:** Optimize material-symbols font pack [#230](https://github.com/TEHIK-EE/tedi-design-system/issues/230) ([#232](https://github.com/TEHIK-EE/tedi-design-system/issues/232)) ([76a388d](https://github.com/TEHIK-EE/tedi-design-system/commit/76a388d0ce272e4a6a298b870047bf6b7a38d8fb)) - -# [7.1.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.1.0-rc.8...v7.1.0-rc.9) (2024-10-16) - -### Features - -- **toggleOpen:** [#102](https://github.com/TEHIK-EE/tedi-design-system/issues/102) - Add an optional prop to render ToggleOpen as div instead of button ([#171](https://github.com/TEHIK-EE/tedi-design-system/issues/171)) ([62c9c4e](https://github.com/TEHIK-EE/tedi-design-system/commit/62c9c4e16b67e951f104d6bdca428aeab7e51f84)) - -### Reverts - -- Revert " feat(toggleOpen): #102 - Add an optional prop to render ToggleOpen a…" (#231) ([1179ad5](https://github.com/TEHIK-EE/tedi-design-system/commit/1179ad5110a6447db3c4abe7510e04f283f65c60)), closes [#102](https://github.com/TEHIK-EE/tedi-design-system/issues/102) [#231](https://github.com/TEHIK-EE/tedi-design-system/issues/231) - -# [7.1.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.1.0-rc.7...v7.1.0-rc.8) (2024-10-14) - -### Features - -- **badge:** TEDI-402 Component: Badge [#174](https://github.com/TEHIK-EE/tedi-design-system/issues/174) ([#215](https://github.com/TEHIK-EE/tedi-design-system/issues/215)) ([a884f8e](https://github.com/TEHIK-EE/tedi-design-system/commit/a884f8e947fc9d1e03052f7be412a21c5c412217)), closes [#70](https://github.com/TEHIK-EE/tedi-design-system/issues/70) [#186](https://github.com/TEHIK-EE/tedi-design-system/issues/186) [TEHIK-EE#70](https://github.com/TEHIK-EE/issues/70) [#70](https://github.com/TEHIK-EE/tedi-design-system/issues/70) [#186](https://github.com/TEHIK-EE/tedi-design-system/issues/186) [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) [#195](https://github.com/TEHIK-EE/tedi-design-system/issues/195) [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) - -# [7.1.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.1.0-rc.6...v7.1.0-rc.7) (2024-10-14) - -### Features - -- **form-label:** Component Label and FormLabel [#181](https://github.com/TEHIK-EE/tedi-design-system/issues/181) ([#214](https://github.com/TEHIK-EE/tedi-design-system/issues/214)) ([17f5c1d](https://github.com/TEHIK-EE/tedi-design-system/commit/17f5c1d4e4ae07718a17031cdeed653adb5fbf32)) - -# [7.1.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.1.0-rc.5...v7.1.0-rc.6) (2024-10-11) - -### Bug Fixes - -- **button:** fix loading icons [#216](https://github.com/TEHIK-EE/tedi-design-system/issues/216) ([#226](https://github.com/TEHIK-EE/tedi-design-system/issues/226)) ([4310979](https://github.com/TEHIK-EE/tedi-design-system/commit/431097901bebb266196d0a0fd98d30e2a8b8f787)) - -# [7.1.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.1.0-rc.4...v7.1.0-rc.5) (2024-10-11) - -### Features - -- **list:** Added indent to styled lists and className property [#221](https://github.com/TEHIK-EE/tedi-design-system/issues/221) ([#222](https://github.com/TEHIK-EE/tedi-design-system/issues/222)) ([3e0a253](https://github.com/TEHIK-EE/tedi-design-system/commit/3e0a2532fc0b00e927ef504b89fe71ac04872662)) - -# [7.1.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.1.0-rc.3...v7.1.0-rc.4) (2024-10-10) - -### Bug Fixes - -- **anchor, button:** align link type button to the left [#223](https://github.com/TEHIK-EE/tedi-design-system/issues/223) ([#224](https://github.com/TEHIK-EE/tedi-design-system/issues/224)) ([effc0a4](https://github.com/TEHIK-EE/tedi-design-system/commit/effc0a45c95d92619ab11fe0ba65741223d6b301)) - -# [7.1.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.1.0-rc.2...v7.1.0-rc.3) (2024-10-10) - -### Bug Fixes - -- **spinner:** Added default label, breakpointSupport, fixed test [#148](https://github.com/TEHIK-EE/tedi-design-system/issues/148) ([#220](https://github.com/TEHIK-EE/tedi-design-system/issues/220)) ([43599ee](https://github.com/TEHIK-EE/tedi-design-system/commit/43599ee4dc3c287fe84979176c1355d44e5c50ee)) - -# [7.1.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.1.0-rc.1...v7.1.0-rc.2) (2024-10-09) - -### Features - -- **label-provider:** Move LabelProvider to TEDI-Ready [#207](https://github.com/TEHIK-EE/tedi-design-system/issues/207) ([#211](https://github.com/TEHIK-EE/tedi-design-system/issues/211)) ([86d259f](https://github.com/TEHIK-EE/tedi-design-system/commit/86d259fcf21febff48f03f2ef9095bd5a828198c)) - -# [7.1.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.0.1-rc.3...v7.1.0-rc.1) (2024-10-09) - -### Features - -- **separator:** add height to Vertical Separator, deprecate fullWidth to isStretched [#218](https://github.com/TEHIK-EE/tedi-design-system/issues/218) ([#219](https://github.com/TEHIK-EE/tedi-design-system/issues/219)) ([b0c9536](https://github.com/TEHIK-EE/tedi-design-system/commit/b0c9536a9edd5df654033b823382ab1d9bf2dc17)) - -## [7.0.1-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.0.1-rc.2...v7.0.1-rc.3) (2024-10-09) - -### Bug Fixes - -- **button, anchor:** inline link style button icon [#216](https://github.com/TEHIK-EE/tedi-design-system/issues/216) ([#217](https://github.com/TEHIK-EE/tedi-design-system/issues/217)) ([a48ed15](https://github.com/TEHIK-EE/tedi-design-system/commit/a48ed1554a59f0d13d5c9019263eb1cd40b66f7d)) - -## [7.0.1-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.0.1-rc.1...v7.0.1-rc.2) (2024-10-02) - -### Bug Fixes - -- **icon:** Remove material-symbols font-size to respect custom Icon sizes [#208](https://github.com/TEHIK-EE/tedi-design-system/issues/208) ([#209](https://github.com/TEHIK-EE/tedi-design-system/issues/209)) ([b4e1d61](https://github.com/TEHIK-EE/tedi-design-system/commit/b4e1d618b1b1c4346684340cbe92f484e471d4ea)) - -## [7.0.1-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v7.0.0...v7.0.1-rc.1) (2024-09-30) - -### Bug Fixes - -- **grid:** Removed test-id attribute and improved unit tests [#201](https://github.com/TEHIK-EE/tedi-design-system/issues/201) ([#202](https://github.com/TEHIK-EE/tedi-design-system/issues/202)) ([e980eb5](https://github.com/TEHIK-EE/tedi-design-system/commit/e980eb52096edac4e35477f76c9a68e0c0756d32)) - -# [7.0.0](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0...v7.0.0) (2024-09-26) - -### Bug Fixes - -- **colors:** [#179](https://github.com/TEHIK-EE/tedi-design-system/issues/179) Community colors improvements, WCAG fixes ([#185](https://github.com/TEHIK-EE/tedi-design-system/issues/185)) ([434c722](https://github.com/TEHIK-EE/tedi-design-system/commit/434c722fa321c2c1078a0b8219143dbe6ed88e2b)) -- **general:** Changed built package structure to fix type imports [#194](https://github.com/TEHIK-EE/tedi-design-system/issues/194) ([#196](https://github.com/TEHIK-EE/tedi-design-system/issues/196)) ([f96453d](https://github.com/TEHIK-EE/tedi-design-system/commit/f96453d17868de92e8f89f89d9b5f3990f4a0f84)) -- **general:** Modify commitlint rules to include GitHub issue key [#172](https://github.com/TEHIK-EE/tedi-design-system/issues/172) ([a6ec381](https://github.com/TEHIK-EE/tedi-design-system/commit/a6ec381d0bab88e915cffa3e17c3c931436eb472)) -- **general:** Reverted built package structure changes [#194](https://github.com/TEHIK-EE/tedi-design-system/issues/194) ([#198](https://github.com/TEHIK-EE/tedi-design-system/issues/198)) ([a651bea](https://github.com/TEHIK-EE/tedi-design-system/commit/a651bea76c08bf4ef721e6dc0e8c208d9f904a61)) -- **list:** VerticalSpacing margin override fixes [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) ([#197](https://github.com/TEHIK-EE/tedi-design-system/issues/197)) ([3915619](https://github.com/TEHIK-EE/tedi-design-system/commit/3915619fc531c993c0498d9ba838b094050b1a48)) -- **stepper:** [#70](https://github.com/TEHIK-EE/tedi-design-system/issues/70) - Background bleed on different zoom levels, active arrow scaling ([#186](https://github.com/TEHIK-EE/tedi-design-system/issues/186)) ([972e090](https://github.com/TEHIK-EE/tedi-design-system/commit/972e090c76ec747777da5dd3abe4a43b5b8328a6)) -- TEDI-381 Organize TEDI CSS variables ([#168](https://github.com/TEHIK-EE/tedi-design-system/issues/168)) ([#175](https://github.com/TEHIK-EE/tedi-design-system/issues/175)) ([5037137](https://github.com/TEHIK-EE/tedi-design-system/commit/5037137092942e557870d389dc4c7f262809a26d)) - -### Features - -- [#163](https://github.com/TEHIK-EE/tedi-design-system/issues/163) add missing attribute ([7962566](https://github.com/TEHIK-EE/tedi-design-system/commit/796256603e96fa801d52d17e0142fd47811045bd)) -- **ellipsis:** add showTooltip property ([#170](https://github.com/TEHIK-EE/tedi-design-system/issues/170)) ([37e5e70](https://github.com/TEHIK-EE/tedi-design-system/commit/37e5e70f716eb110e27e71e5d4433979fc26acfb)), closes [#169](https://github.com/TEHIK-EE/tedi-design-system/issues/169) -- **grid:** TEDI-375 Component Grid [#165](https://github.com/TEHIK-EE/tedi-design-system/issues/165) ([#176](https://github.com/TEHIK-EE/tedi-design-system/issues/176)) ([d13624c](https://github.com/TEHIK-EE/tedi-design-system/commit/d13624c6a719069965585db0d7407e845b488db4)) -- **list:** TEDI-202 Component List [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) ([#195](https://github.com/TEHIK-EE/tedi-design-system/issues/195)) ([d931d72](https://github.com/TEHIK-EE/tedi-design-system/commit/d931d72622d1f86b5142694fb63ebfb57c80658f)) -- **tableOfContents:** [#163](https://github.com/TEHIK-EE/tedi-design-system/issues/163) add roles ([0e40037](https://github.com/TEHIK-EE/tedi-design-system/commit/0e40037af406e632682f2ae733d9340edf9097d5)) -- **tag:** [#163](https://github.com/TEHIK-EE/tedi-design-system/issues/163) add id ([61a72a0](https://github.com/TEHIK-EE/tedi-design-system/commit/61a72a017a99972a7a2bab9d77d733f6db7def5e)) -- **Tag:** [#163](https://github.com/TEHIK-EE/tedi-design-system/issues/163) add id to Tag element ([553aa52](https://github.com/TEHIK-EE/tedi-design-system/commit/553aa52119f5f3e3baacdbd1c184f5fc7474cb14)) -- **vertical-spacing:** Add BreakpointSupport [#182](https://github.com/TEHIK-EE/tedi-design-system/issues/182) ([#183](https://github.com/TEHIK-EE/tedi-design-system/issues/183)) ([9582bd6](https://github.com/TEHIK-EE/tedi-design-system/commit/9582bd66b93f4210b77cf1917ffc249c2c777cb9)) - -### BREAKING CHANGES - -- **general:** List, VerticalSpacing, Grid components imports changed from community to tedi - -Co-authored-by: Airike Jaska <airike.jaska@bitweb.ee> - -# [7.0.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.32.0-rc.11...v7.0.0-rc.1) (2024-09-26) - -### Bug Fixes - -- **general:** Reverted built package structure changes [#194](https://github.com/TEHIK-EE/tedi-design-system/issues/194) ([#198](https://github.com/TEHIK-EE/tedi-design-system/issues/198)) ([a651bea](https://github.com/TEHIK-EE/tedi-design-system/commit/a651bea76c08bf4ef721e6dc0e8c208d9f904a61)) - -### BREAKING CHANGES - -- **general:** List, VerticalSpacing, Grid components imports changed from community to tedi - -Co-authored-by: Airike Jaska <airike.jaska@bitweb.ee> - -# [6.32.0-rc.11](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.32.0-rc.10...v6.32.0-rc.11) (2024-09-26) - -### Bug Fixes - -- **general:** Changed built package structure to fix type imports [#194](https://github.com/TEHIK-EE/tedi-design-system/issues/194) ([#196](https://github.com/TEHIK-EE/tedi-design-system/issues/196)) ([f96453d](https://github.com/TEHIK-EE/tedi-design-system/commit/f96453d17868de92e8f89f89d9b5f3990f4a0f84)) - -# [6.32.0-rc.10](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.32.0-rc.9...v6.32.0-rc.10) (2024-09-26) - -### Bug Fixes - -- **list:** VerticalSpacing margin override fixes [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) ([#197](https://github.com/TEHIK-EE/tedi-design-system/issues/197)) ([3915619](https://github.com/TEHIK-EE/tedi-design-system/commit/3915619fc531c993c0498d9ba838b094050b1a48)) - -# [6.32.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.32.0-rc.8...v6.32.0-rc.9) (2024-09-26) - -### Features - -- **list:** TEDI-202 Component List [#177](https://github.com/TEHIK-EE/tedi-design-system/issues/177) ([#195](https://github.com/TEHIK-EE/tedi-design-system/issues/195)) ([d931d72](https://github.com/TEHIK-EE/tedi-design-system/commit/d931d72622d1f86b5142694fb63ebfb57c80658f)) - -# [6.32.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.32.0-rc.7...v6.32.0-rc.8) (2024-09-24) - -### Bug Fixes - -- **stepper:** [#70](https://github.com/TEHIK-EE/tedi-design-system/issues/70) - Background bleed on different zoom levels, active arrow scaling ([#186](https://github.com/TEHIK-EE/tedi-design-system/issues/186)) ([972e090](https://github.com/TEHIK-EE/tedi-design-system/commit/972e090c76ec747777da5dd3abe4a43b5b8328a6)) - -# [6.32.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.32.0-rc.6...v6.32.0-rc.7) (2024-09-24) - -### Bug Fixes - -- **colors:** [#179](https://github.com/TEHIK-EE/tedi-design-system/issues/179) Community colors improvements, WCAG fixes ([#185](https://github.com/TEHIK-EE/tedi-design-system/issues/185)) ([434c722](https://github.com/TEHIK-EE/tedi-design-system/commit/434c722fa321c2c1078a0b8219143dbe6ed88e2b)) - -# [6.32.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.32.0-rc.5...v6.32.0-rc.6) (2024-09-23) - -### Features - -- **vertical-spacing:** Add BreakpointSupport [#182](https://github.com/TEHIK-EE/tedi-design-system/issues/182) ([#183](https://github.com/TEHIK-EE/tedi-design-system/issues/183)) ([9582bd6](https://github.com/TEHIK-EE/tedi-design-system/commit/9582bd66b93f4210b77cf1917ffc249c2c777cb9)) - -# [6.32.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.32.0-rc.4...v6.32.0-rc.5) (2024-09-23) - -### Features - -- **grid:** TEDI-375 Component Grid [#165](https://github.com/TEHIK-EE/tedi-design-system/issues/165) ([#176](https://github.com/TEHIK-EE/tedi-design-system/issues/176)) ([d13624c](https://github.com/TEHIK-EE/tedi-design-system/commit/d13624c6a719069965585db0d7407e845b488db4)) - -# [6.32.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.32.0-rc.3...v6.32.0-rc.4) (2024-09-16) - -### Bug Fixes - -- TEDI-381 Organize TEDI CSS variables ([#168](https://github.com/TEHIK-EE/tedi-design-system/issues/168)) ([#175](https://github.com/TEHIK-EE/tedi-design-system/issues/175)) ([5037137](https://github.com/TEHIK-EE/tedi-design-system/commit/5037137092942e557870d389dc4c7f262809a26d)) - -# [6.32.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.32.0-rc.2...v6.32.0-rc.3) (2024-09-06) - -### Bug Fixes - -- **general:** Modify commitlint rules to include GitHub issue key [#172](https://github.com/TEHIK-EE/tedi-design-system/issues/172) ([a6ec381](https://github.com/TEHIK-EE/tedi-design-system/commit/a6ec381d0bab88e915cffa3e17c3c931436eb472)) - -# [6.32.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.32.0-rc.1...v6.32.0-rc.2) (2024-09-05) - -### Features - -- **ellipsis:** add showTooltip property ([#170](https://github.com/TEHIK-EE/tedi-design-system/issues/170)) ([37e5e70](https://github.com/TEHIK-EE/tedi-design-system/commit/37e5e70f716eb110e27e71e5d4433979fc26acfb)), closes [#169](https://github.com/TEHIK-EE/tedi-design-system/issues/169) - -# [6.32.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0...v6.32.0-rc.1) (2024-09-02) - -### Features - -- [#163](https://github.com/TEHIK-EE/tedi-design-system/issues/163) add missing attribute ([7962566](https://github.com/TEHIK-EE/tedi-design-system/commit/796256603e96fa801d52d17e0142fd47811045bd)) -- **tableOfContents:** [#163](https://github.com/TEHIK-EE/tedi-design-system/issues/163) add roles ([0e40037](https://github.com/TEHIK-EE/tedi-design-system/commit/0e40037af406e632682f2ae733d9340edf9097d5)) -- **tag:** [#163](https://github.com/TEHIK-EE/tedi-design-system/issues/163) add id ([61a72a0](https://github.com/TEHIK-EE/tedi-design-system/commit/61a72a017a99972a7a2bab9d77d733f6db7def5e)) -- **Tag:** [#163](https://github.com/TEHIK-EE/tedi-design-system/issues/163) add id to Tag element ([553aa52](https://github.com/TEHIK-EE/tedi-design-system/commit/553aa52119f5f3e3baacdbd1c184f5fc7474cb14)) - -# [6.31.0](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.1...v6.31.0) (2024-08-29) - -### Bug Fixes - -- **accordionitemheader:** [#102](https://github.com/TEHIK-EE/tedi-design-system/issues/102) - Swap ToggleOpen Button for an Icon ([8c765cd](https://github.com/TEHIK-EE/tedi-design-system/commit/8c765cdd6e184924c8ae5dc42170d8c6ee69c61e)) -- **choice-group:** fix radio and check button screenreader bug ([c57e700](https://github.com/TEHIK-EE/tedi-design-system/commit/c57e70040a9064cb32e82d18714081f90e824ad6)) -- **ellipsis:** [#92](https://github.com/TEHIK-EE/tedi-design-system/issues/92) - Add responsivness support for ellipsis ([00311f8](https://github.com/TEHIK-EE/tedi-design-system/commit/00311f8127df07c2b6b677bc721aa1b6ce1bf0ae)) -- **heading-with-icon:** TEDI-370 Allow all props from HeadingProps and IconProps ([a1c54fb](https://github.com/TEHIK-EE/tedi-design-system/commit/a1c54fb7c7ecc342bc917cee642fb6f262db2b4a)) -- **heading-with-icon:** TEDI-370 Improved type extending ([a2de154](https://github.com/TEHIK-EE/tedi-design-system/commit/a2de154b0841a0bbfee1c5e58e587852688bbd92)) -- **icon:** TEDI-350 Added TEDI Icon export ([c7a5a8b](https://github.com/TEHIK-EE/tedi-design-system/commit/c7a5a8b11cd7b289858d66dc3a7ad67729b9db14)) -- **icon:** TEDI-350 TEDI Icon changes ([d0f5d5a](https://github.com/TEHIK-EE/tedi-design-system/commit/d0f5d5af519c64e0c2f28ef0acd7b518a7a119b8)) -- **icon:** TEDI-350 TEDI Icon changes and font update ([9f73f78](https://github.com/TEHIK-EE/tedi-design-system/commit/9f73f7870f29d5c79b5138f376930ce1bff05934)) -- **layout:** fix role for sidenav and add break-all to footer links ([1d547a8](https://github.com/TEHIK-EE/tedi-design-system/commit/1d547a8830fb16e7a431da7a0690d622e3a54b80)) -- **layout:** remove fix role for sidenav ([4130bdb](https://github.com/TEHIK-EE/tedi-design-system/commit/4130bdbe65b642f251012cb22a5c686172ee2b87)) -- **pickers:** [#94](https://github.com/TEHIK-EE/tedi-design-system/issues/94) - Clear picker value with the clear button ([78f9468](https://github.com/TEHIK-EE/tedi-design-system/commit/78f9468b7d103be4e3064b89e414be42b33317e3)) -- **select:** [#103](https://github.com/TEHIK-EE/tedi-design-system/issues/103) - Increase placeholder contrast ([2602358](https://github.com/TEHIK-EE/tedi-design-system/commit/260235800f0d5d4fe4032a11057c76c02c98dac2)) -- **table:** [#48](https://github.com/TEHIK-EE/tedi-design-system/issues/48) - add scope col to table headers for a11y ([1d2614a](https://github.com/TEHIK-EE/tedi-design-system/commit/1d2614abbb356d6038a0b57b36734b734b9cf9ed)) -- **TextField:** [#88](https://github.com/TEHIK-EE/tedi-design-system/issues/88) - Icon now aligns correctly in small TextField ([#90](https://github.com/TEHIK-EE/tedi-design-system/issues/90)) ([d76ebb2](https://github.com/TEHIK-EE/tedi-design-system/commit/d76ebb256c2c7f2abee7267d557df826e7f828f3)) -- **typography:** TEDI-349 - Harmonizing the colors/typography of TEDI & Community ([a10415c](https://github.com/TEHIK-EE/tedi-design-system/commit/a10415c7a6cdb214d6b44774684a5d4e503d0855)) -- **typography:** TEDI-349 - Harmonizing the colors/typography of TEDI & Community ([bea5c77](https://github.com/TEHIK-EE/tedi-design-system/commit/bea5c77a7564723752819dda318959d3a1a37214)) -- **typography:** TEDI-371 Browser font scale fix ([3306f46](https://github.com/TEHIK-EE/tedi-design-system/commit/3306f46957303f876f512745b539d80a8dbec4db)) -- **vertical-spacing:** TEDI-367 Added VerticalSpacingItem unit test, improved story with badge ([0096a1c](https://github.com/TEHIK-EE/tedi-design-system/commit/0096a1cbb402648cb230b4320ea88bb5e86587a6)) - -### Features - -- **accordion, card-header:** add muted-bg for accordion header ([#85](https://github.com/TEHIK-EE/tedi-design-system/issues/85)) ([577c13f](https://github.com/TEHIK-EE/tedi-design-system/commit/577c13fdbaa6c97f9521d2d0c72da08d778467eb)) -- **FileUpload:** added default helper texts, onInvalid size or file extension ([#72](https://github.com/TEHIK-EE/tedi-design-system/issues/72)) ([142520a](https://github.com/TEHIK-EE/tedi-design-system/commit/142520abe9a2282d3af8bf7e81dca098a3bcd139)) -- **heading-with-icon:** Component HeadingWithIcon ([2997811](https://github.com/TEHIK-EE/tedi-design-system/commit/2997811c5db38a05f6c8f36ee58e4f5b1e300679)) -- **pickers:** [#99](https://github.com/TEHIK-EE/tedi-design-system/issues/99) - Added referenceDate prop to the pickers ([4639385](https://github.com/TEHIK-EE/tedi-design-system/commit/4639385a89f109a069e38b523420d4760fd04944)) -- **select:** [#93](https://github.com/TEHIK-EE/tedi-design-system/issues/93) - Add support for stacked tags ([fc149e0](https://github.com/TEHIK-EE/tedi-design-system/commit/fc149e0718aa8af2c667d99ab2da0b90a8789f0d)) -- **select:** [#97](https://github.com/TEHIK-EE/tedi-design-system/issues/97) - Add individual tag clearing ([44763c7](https://github.com/TEHIK-EE/tedi-design-system/commit/44763c7a1e0331d3ded6663f373b70ebb8a5c5ff)) -- **select:** [#97](https://github.com/TEHIK-EE/tedi-design-system/issues/97) - Restyle clear button ([deca20c](https://github.com/TEHIK-EE/tedi-design-system/commit/deca20c80298f35239b227c647052b2ca55f7c5b)) -- **table:** [#151](https://github.com/TEHIK-EE/tedi-design-system/issues/151) - add columnPinning prop to make columns sticky ([bba0c91](https://github.com/TEHIK-EE/tedi-design-system/commit/bba0c91aacf4b1fee7b0f21ba468279c63985c91)) -- **table:** add enableRowSelection to table [#86](https://github.com/TEHIK-EE/tedi-design-system/issues/86) ([7ff33c9](https://github.com/TEHIK-EE/tedi-design-system/commit/7ff33c9ca7491c29d9cd7d36569219946fc4a12f)) -- **table:** add enableRowSelection to table [#86](https://github.com/TEHIK-EE/tedi-design-system/issues/86) ([b8dbd92](https://github.com/TEHIK-EE/tedi-design-system/commit/b8dbd9210a8eaa886ee4ca2e682937a065533be3)) -- **table:** add options for 50 and 100 rows for tables ([#84](https://github.com/TEHIK-EE/tedi-design-system/issues/84)) ([a00256c](https://github.com/TEHIK-EE/tedi-design-system/commit/a00256c171ccf5ffd5ad1b90f0ca644c01f190b9)) -- **TextField:** [#89](https://github.com/TEHIK-EE/tedi-design-system/issues/89) - Add clearable option ([7cee277](https://github.com/TEHIK-EE/tedi-design-system/commit/7cee277003126482b91f684a923a6cf8bf8ee58a)) -- **TextField:** [#89](https://github.com/TEHIK-EE/tedi-design-system/issues/89) - Add large size option ([af58659](https://github.com/TEHIK-EE/tedi-design-system/commit/af586592c402c4ac9c5a22ddcbdc05d73d0465fa)) -- **vertical-spacing:** TEDI-195 Fixed community story import ([5f65277](https://github.com/TEHIK-EE/tedi-design-system/commit/5f65277d235ba58e766ee1bbf7d9f05860e350c6)) -- **vertical-spacing:** TEDI-195 Fixed community story import ([7a1e4d7](https://github.com/TEHIK-EE/tedi-design-system/commit/7a1e4d762958b70adf97c82cda62d3038001c8ea)) -- **vertical-spacing:** TEDI-358 Replaced Community components with Tedi-ready VerticalSpacing ([586dd5c](https://github.com/TEHIK-EE/tedi-design-system/commit/586dd5cd0e42da89a7e0fc71bc2efd51ac3fa5d5)) -- **vertical-spacing:** VerticalSpacing component ([fb4b901](https://github.com/TEHIK-EE/tedi-design-system/commit/fb4b90107eae3f3a139ebb00bcf7163c4919387b)) - -# [6.31.0-rc.22](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.21...v6.31.0-rc.22) (2024-08-29) - -### Bug Fixes - -- **heading-with-icon:** TEDI-370 Allow all props from HeadingProps and IconProps ([a1c54fb](https://github.com/TEHIK-EE/tedi-design-system/commit/a1c54fb7c7ecc342bc917cee642fb6f262db2b4a)) - -# [6.31.0-rc.21](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.20...v6.31.0-rc.21) (2024-08-29) - -### Bug Fixes - -- **typography:** TEDI-371 Browser font scale fix ([3306f46](https://github.com/TEHIK-EE/tedi-design-system/commit/3306f46957303f876f512745b539d80a8dbec4db)) - -# [6.31.0-rc.20](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.19...v6.31.0-rc.20) (2024-08-29) - -### Bug Fixes - -- **heading-with-icon:** TEDI-370 Improved type extending ([a2de154](https://github.com/TEHIK-EE/tedi-design-system/commit/a2de154b0841a0bbfee1c5e58e587852688bbd92)) - -# [6.31.0-rc.19](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.18...v6.31.0-rc.19) (2024-08-29) - -### Bug Fixes - -- **vertical-spacing:** TEDI-367 Added VerticalSpacingItem unit test, improved story with badge ([0096a1c](https://github.com/TEHIK-EE/tedi-design-system/commit/0096a1cbb402648cb230b4320ea88bb5e86587a6)) - -# [6.31.0-rc.18](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.17...v6.31.0-rc.18) (2024-08-27) - -### Features - -- **vertical-spacing:** TEDI-358 Replaced Community components with Tedi-ready VerticalSpacing ([586dd5c](https://github.com/TEHIK-EE/tedi-design-system/commit/586dd5cd0e42da89a7e0fc71bc2efd51ac3fa5d5)) -- **vertical-spacing:** VerticalSpacing component ([fb4b901](https://github.com/TEHIK-EE/tedi-design-system/commit/fb4b90107eae3f3a139ebb00bcf7163c4919387b)) - -# [6.31.0-rc.17](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.16...v6.31.0-rc.17) (2024-08-27) - -### Features - -- **heading-with-icon:** Component HeadingWithIcon ([2997811](https://github.com/TEHIK-EE/tedi-design-system/commit/2997811c5db38a05f6c8f36ee58e4f5b1e300679)) - -# [6.31.0-rc.16](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.15...v6.31.0-rc.16) (2024-08-27) - -### Features - -- **table:** [#151](https://github.com/TEHIK-EE/tedi-design-system/issues/151) - add columnPinning prop to make columns sticky ([bba0c91](https://github.com/TEHIK-EE/tedi-design-system/commit/bba0c91aacf4b1fee7b0f21ba468279c63985c91)) - -# [6.31.0-rc.15](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.14...v6.31.0-rc.15) (2024-08-22) - -### Bug Fixes - -- **icon:** TEDI-350 Added TEDI Icon export ([c7a5a8b](https://github.com/TEHIK-EE/tedi-design-system/commit/c7a5a8b11cd7b289858d66dc3a7ad67729b9db14)) -- **icon:** TEDI-350 TEDI Icon changes ([d0f5d5a](https://github.com/TEHIK-EE/tedi-design-system/commit/d0f5d5af519c64e0c2f28ef0acd7b518a7a119b8)) -- **icon:** TEDI-350 TEDI Icon changes and font update ([9f73f78](https://github.com/TEHIK-EE/tedi-design-system/commit/9f73f7870f29d5c79b5138f376930ce1bff05934)) -- **typography:** TEDI-349 - Harmonizing the colors/typography of TEDI & Community ([a10415c](https://github.com/TEHIK-EE/tedi-design-system/commit/a10415c7a6cdb214d6b44774684a5d4e503d0855)) - -# [6.31.0-rc.14](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.13...v6.31.0-rc.14) (2024-08-21) - -### Bug Fixes - -- **typography:** TEDI-349 - Harmonizing the colors/typography of TEDI & Community ([bea5c77](https://github.com/TEHIK-EE/tedi-design-system/commit/bea5c77a7564723752819dda318959d3a1a37214)) - -# [6.31.0-rc.13](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.12...v6.31.0-rc.13) (2024-08-14) - -### Bug Fixes - -- **select:** [#103](https://github.com/TEHIK-EE/tedi-design-system/issues/103) - Increase placeholder contrast ([2602358](https://github.com/TEHIK-EE/tedi-design-system/commit/260235800f0d5d4fe4032a11057c76c02c98dac2)) - -# [6.31.0-rc.12](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.11...v6.31.0-rc.12) (2024-08-13) - -### Bug Fixes - -- **table:** [#48](https://github.com/TEHIK-EE/tedi-design-system/issues/48) - add scope col to table headers for a11y ([1d2614a](https://github.com/TEHIK-EE/tedi-design-system/commit/1d2614abbb356d6038a0b57b36734b734b9cf9ed)) - -# [6.31.0-rc.11](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.10...v6.31.0-rc.11) (2024-07-09) - -### Features - -- **pickers:** [#99](https://github.com/TEHIK-EE/tedi-design-system/issues/99) - Added referenceDate prop to the pickers ([4639385](https://github.com/TEHIK-EE/tedi-design-system/commit/4639385a89f109a069e38b523420d4760fd04944)) - -# [6.31.0-rc.10](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.9...v6.31.0-rc.10) (2024-07-08) - -### Features - -- **select:** [#93](https://github.com/TEHIK-EE/tedi-design-system/issues/93) - Add support for stacked tags ([fc149e0](https://github.com/TEHIK-EE/tedi-design-system/commit/fc149e0718aa8af2c667d99ab2da0b90a8789f0d)) -- **select:** [#97](https://github.com/TEHIK-EE/tedi-design-system/issues/97) - Add individual tag clearing ([44763c7](https://github.com/TEHIK-EE/tedi-design-system/commit/44763c7a1e0331d3ded6663f373b70ebb8a5c5ff)) -- **select:** [#97](https://github.com/TEHIK-EE/tedi-design-system/issues/97) - Restyle clear button ([deca20c](https://github.com/TEHIK-EE/tedi-design-system/commit/deca20c80298f35239b227c647052b2ca55f7c5b)) - -# [6.31.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.8...v6.31.0-rc.9) (2024-07-02) - -### Bug Fixes - -- **ellipsis:** [#92](https://github.com/TEHIK-EE/tedi-design-system/issues/92) - Add responsivness support for ellipsis ([00311f8](https://github.com/TEHIK-EE/tedi-design-system/commit/00311f8127df07c2b6b677bc721aa1b6ce1bf0ae)) -- **pickers:** [#94](https://github.com/TEHIK-EE/tedi-design-system/issues/94) - Clear picker value with the clear button ([78f9468](https://github.com/TEHIK-EE/tedi-design-system/commit/78f9468b7d103be4e3064b89e414be42b33317e3)) - -# [6.31.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.7...v6.31.0-rc.8) (2024-06-20) - -### Features - -- **TextField:** [#89](https://github.com/TEHIK-EE/tedi-design-system/issues/89) - Add clearable option ([7cee277](https://github.com/TEHIK-EE/tedi-design-system/commit/7cee277003126482b91f684a923a6cf8bf8ee58a)) -- **TextField:** [#89](https://github.com/TEHIK-EE/tedi-design-system/issues/89) - Add large size option ([af58659](https://github.com/TEHIK-EE/tedi-design-system/commit/af586592c402c4ac9c5a22ddcbdc05d73d0465fa)) - -# [6.31.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.6...v6.31.0-rc.7) (2024-06-20) - -### Bug Fixes - -- **TextField:** [#88](https://github.com/TEHIK-EE/tedi-design-system/issues/88) - Icon now aligns correctly in small TextField ([#90](https://github.com/TEHIK-EE/tedi-design-system/issues/90)) ([d76ebb2](https://github.com/TEHIK-EE/tedi-design-system/commit/d76ebb256c2c7f2abee7267d557df826e7f828f3)) - -# [6.31.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.5...v6.31.0-rc.6) (2024-06-10) - -### Features - -- **accordion, card-header:** add muted-bg for accordion header ([#85](https://github.com/TEHIK-EE/tedi-design-system/issues/85)) ([577c13f](https://github.com/TEHIK-EE/tedi-design-system/commit/577c13fdbaa6c97f9521d2d0c72da08d778467eb)) - -# [6.31.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.4...v6.31.0-rc.5) (2024-06-10) - -### Features - -- **table:** add enableRowSelection to table [#86](https://github.com/TEHIK-EE/tedi-design-system/issues/86) ([7ff33c9](https://github.com/TEHIK-EE/tedi-design-system/commit/7ff33c9ca7491c29d9cd7d36569219946fc4a12f)) -- **table:** add enableRowSelection to table [#86](https://github.com/TEHIK-EE/tedi-design-system/issues/86) ([b8dbd92](https://github.com/TEHIK-EE/tedi-design-system/commit/b8dbd9210a8eaa886ee4ca2e682937a065533be3)) - -# [6.31.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.3...v6.31.0-rc.4) (2024-06-10) - -### Bug Fixes - -- **choice-group:** fix radio and check button screenreader bug ([c57e700](https://github.com/TEHIK-EE/tedi-design-system/commit/c57e70040a9064cb32e82d18714081f90e824ad6)) -- **layout:** fix role for sidenav and add break-all to footer links ([1d547a8](https://github.com/TEHIK-EE/tedi-design-system/commit/1d547a8830fb16e7a431da7a0690d622e3a54b80)) -- **layout:** remove fix role for sidenav ([4130bdb](https://github.com/TEHIK-EE/tedi-design-system/commit/4130bdbe65b642f251012cb22a5c686172ee2b87)) - -# [6.31.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.2...v6.31.0-rc.3) (2024-06-06) - -### Features - -- **table:** add options for 50 and 100 rows for tables ([#84](https://github.com/TEHIK-EE/tedi-design-system/issues/84)) ([a00256c](https://github.com/TEHIK-EE/tedi-design-system/commit/a00256c171ccf5ffd5ad1b90f0ca644c01f190b9)) - -# [6.31.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.31.0-rc.1...v6.31.0-rc.2) (2024-05-31) - -### Bug Fixes - -- Fixed breakpoint helpers imports ([72400d4](https://github.com/TEHIK-EE/tedi-design-system/commit/72400d4dc4dd851ad0a949a38a7876e3b976ad3a)) - -## [6.30.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0...v6.30.1) (2024-05-31) - -### Bug Fixes - -- Fixed breakpoint helpers imports ([72400d4](https://github.com/TEHIK-EE/tedi-design-system/commit/72400d4dc4dd851ad0a949a38a7876e3b976ad3a)) - -# [6.31.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0...v6.31.0-rc.1) (2024-05-31) - -### Features - -- **FileUpload:** added default helper texts, onInvalid size or file extension ([#72](https://github.com/TEHIK-EE/tedi-design-system/issues/72)) ([142520a](https://github.com/TEHIK-EE/tedi-design-system/commit/142520abe9a2282d3af8bf7e81dca098a3bcd139)) - -# [6.30.0](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.29.0...v6.30.0) (2024-05-30) - -### Bug Fixes - -- **Breadcrumbs:** Make last element text ([1f78783](https://github.com/TEHIK-EE/tedi-design-system/commit/1f787832c615b712f1370799c16b8df1542898c9)) -- **button:** TEHVEER-299 - fullWidth prop should still work with noStyle ([b5d64b5](https://github.com/TEHIK-EE/tedi-design-system/commit/b5d64b5ef2f43f46237fdec1833adefac3d92911)) -- **chore:** Fixed breakpoints style path in variables ([5d59860](https://github.com/TEHIK-EE/tedi-design-system/commit/5d598607423dd6ea149abc21ab5af3cc25538a4c)) -- **chore:** TEDI-216 - Stories paths, changelog and readme fixes ([af5d743](https://github.com/TEHIK-EE/tedi-design-system/commit/af5d743e8df1e0c2d7d7d2592df39ae12dda2c4e)) -- **chore:** TEDI-277 - TEDI components export ([168fffc](https://github.com/TEHIK-EE/tedi-design-system/commit/168fffc975462a8507c7bd33792ab7810af760ee)) -- **chore:** TEDI-278 - Fixed TEDI Icon rendering in next.js project ([f5ffd87](https://github.com/TEHIK-EE/tedi-design-system/commit/f5ffd873d2e1f1518d4b890e1a418ffc73124e57)) -- **common:** Remove unused react-test-renderer ([1a0eca9](https://github.com/TEHIK-EE/tedi-design-system/commit/1a0eca9b572c603f1b9f57c16c43e38577bbaf28)) -- **Continious deployment:** Fixed the way base href is composed to exclude query part ([5c3e973](https://github.com/TEHIK-EE/tedi-design-system/commit/5c3e973bd05d4eb31c9537162e09646acbb24b1a)) -- Fixed semantic-release config ([cca9bec](https://github.com/TEHIK-EE/tedi-design-system/commit/cca9bec8dffb9a2f0854c11084e92f98bd2fecee)) -- **library:** TEDI-277 - Library components export fix ([5ef9d39](https://github.com/TEHIK-EE/tedi-design-system/commit/5ef9d39a7809b08039a6bf3eb06a370f4a5fc4b6)) -- **library:** TEDI-277 - Library components export fix ([#43](https://github.com/TEHIK-EE/tedi-design-system/issues/43)) ([f4ba2cb](https://github.com/TEHIK-EE/tedi-design-system/commit/f4ba2cb2c3ef491c94e084a992001be5ed415105)) -- **modal:** TEHVEER-240 - Add displayNames to CardHeader and CardContent ([54d6a7b](https://github.com/TEHIK-EE/tedi-design-system/commit/54d6a7b2f9d4591239fcff28d471b15c8046ba66)) -- **modal:** TEHVEER-240 - Prevent close button and content overlap ([f152de9](https://github.com/TEHIK-EE/tedi-design-system/commit/f152de9d66ad698362f639e55c1745a5e9ed38e8)) -- **NPM:** fixed package.lock file ([c352106](https://github.com/TEHIK-EE/tedi-design-system/commit/c35210631c82b1f5987869f78715c0aa553186f7)) -- **NPM:** fixed package.lock file ([a0a83c4](https://github.com/TEHIK-EE/tedi-design-system/commit/a0a83c4e6bce3eb982ff124dd153ad4a2ff12322)) -- **select:** fix multiselect do not scroll top after selection - TEHVEER-304 ([dc151db](https://github.com/TEHIK-EE/tedi-design-system/commit/dc151dba8a209a57b806abb721d8510980d3ea2a)) -- **select:** required props passed to input ([#58](https://github.com/TEHIK-EE/tedi-design-system/issues/58)) ([eb6428f](https://github.com/TEHIK-EE/tedi-design-system/commit/eb6428fc73773157148d2368802c7047f5ff9a21)) -- **spinner:** TEDI-304 - WCAG changes ([#73](https://github.com/TEHIK-EE/tedi-design-system/issues/73)) ([12ec7b9](https://github.com/TEHIK-EE/tedi-design-system/commit/12ec7b9e2d77e34f4553588d09e69f46d213fb20)) -- **storybook:** TEDI-271 - Display type values in argsTable ([88a4507](https://github.com/TEHIK-EE/tedi-design-system/commit/88a4507fbe8a6ec23ea6ea4f64a923ad14da7901)) - -### Features - -- **chore:** Library structure changes ([80a142d](https://github.com/TEHIK-EE/tedi-design-system/commit/80a142d9328e0212b830c1ea08535ceebdec27cf)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **chore:** Move Welcome, GetStarted and Changelog docs to shared folder ([#33](https://github.com/TEHIK-EE/tedi-design-system/issues/33)) ([10fa8cb](https://github.com/TEHIK-EE/tedi-design-system/commit/10fa8cb2f1c6aa77a1a21d217a24f5591f709cda)) -- **colors:** TEDI-242 - Added TEDI colors docs ([12aae95](https://github.com/TEHIK-EE/tedi-design-system/commit/12aae957ca067d7a9871454f83af96f640ef0e03)) -- **FileUpload:** added optional size checking and callback ([#55](https://github.com/TEHIK-EE/tedi-design-system/issues/55)) ([569f1d6](https://github.com/TEHIK-EE/tedi-design-system/commit/569f1d68f0c04c9de80886ef1a2ba9dcae17bf46)) -- **general:** TEDI-261 - Added TEDI components export ([919319e](https://github.com/TEHIK-EE/tedi-design-system/commit/919319ecdaa63b785951def02083343d52a9df43)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **icon:** TEDI-41 - TEDI icon component ([da3b2e4](https://github.com/TEHIK-EE/tedi-design-system/commit/da3b2e426fc1d80229214489b39fb4e0f6ed9607)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **migration:** GitHub migration ([d8f9be5](https://github.com/TEHIK-EE/tedi-design-system/commit/d8f9be52b9c54bc94fc35bfc066e09cbc0846f68)) -- **migration:** GitHub migration ([bf56030](https://github.com/TEHIK-EE/tedi-design-system/commit/bf560304b81b04d35b967c190816b0d9325b6735)), closes [#1](https://github.com/TEHIK-EE/tedi-design-system/issues/1) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **pipeline:** Added GitHub Code scanning ([#31](https://github.com/TEHIK-EE/tedi-design-system/issues/31)) ([72d5a04](https://github.com/TEHIK-EE/tedi-design-system/commit/72d5a04ccfad82c7aba903ce294504974aa9c2fd)) -- **release:** Fixing versioning conflict by forcing semantic release to bump version ([f56b500](https://github.com/TEHIK-EE/tedi-design-system/commit/f56b5005458dc8416155f189e202f456c997a839)) -- **spinner:** TEDI-199 - TEDI Spinner component ([fb24128](https://github.com/TEHIK-EE/tedi-design-system/commit/fb24128f7798bf952d382d6cfc35e20a138e9e72)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **table:** add visibilityState, to hide columns - TEHVEER-303 ([c3b57ae](https://github.com/TEHIK-EE/tedi-design-system/commit/c3b57aea8ddd325961e7126d9adac656a408c5fc)) -- **typography:** TEDI-264 - TEDI typography component ([033fb7d](https://github.com/TEHIK-EE/tedi-design-system/commit/033fb7dd40f5f65d2ec7647ad1bd34ed8efe7064)) -- **typography:** TEHVEER-302 - Add typography styles for mobile ([215fddb](https://github.com/TEHIK-EE/tedi-design-system/commit/215fddb5c95411c98a5e72be0d24b4ef2d85be24)) - -# [6.30.0](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.29.0...v6.30.0) (2024-05-30) - -### Bug Fixes - -- **Breadcrumbs:** Make last element text ([1f78783](https://github.com/TEHIK-EE/tedi-design-system/commit/1f787832c615b712f1370799c16b8df1542898c9)) -- **button:** TEHVEER-299 - fullWidth prop should still work with noStyle ([b5d64b5](https://github.com/TEHIK-EE/tedi-design-system/commit/b5d64b5ef2f43f46237fdec1833adefac3d92911)) -- **chore:** Fixed breakpoints style path in variables ([5d59860](https://github.com/TEHIK-EE/tedi-design-system/commit/5d598607423dd6ea149abc21ab5af3cc25538a4c)) -- **chore:** TEDI-216 - Stories paths, changelog and readme fixes ([af5d743](https://github.com/TEHIK-EE/tedi-design-system/commit/af5d743e8df1e0c2d7d7d2592df39ae12dda2c4e)) -- **chore:** TEDI-277 - TEDI components export ([168fffc](https://github.com/TEHIK-EE/tedi-design-system/commit/168fffc975462a8507c7bd33792ab7810af760ee)) -- **chore:** TEDI-278 - Fixed TEDI Icon rendering in next.js project ([f5ffd87](https://github.com/TEHIK-EE/tedi-design-system/commit/f5ffd873d2e1f1518d4b890e1a418ffc73124e57)) -- **common:** Remove unused react-test-renderer ([1a0eca9](https://github.com/TEHIK-EE/tedi-design-system/commit/1a0eca9b572c603f1b9f57c16c43e38577bbaf28)) -- **Continious deployment:** Fixed the way base href is composed to exclude query part ([5c3e973](https://github.com/TEHIK-EE/tedi-design-system/commit/5c3e973bd05d4eb31c9537162e09646acbb24b1a)) -- Fixed semantic-release config ([cca9bec](https://github.com/TEHIK-EE/tedi-design-system/commit/cca9bec8dffb9a2f0854c11084e92f98bd2fecee)) -- **library:** TEDI-277 - Library components export fix ([5ef9d39](https://github.com/TEHIK-EE/tedi-design-system/commit/5ef9d39a7809b08039a6bf3eb06a370f4a5fc4b6)) -- **library:** TEDI-277 - Library components export fix ([#43](https://github.com/TEHIK-EE/tedi-design-system/issues/43)) ([f4ba2cb](https://github.com/TEHIK-EE/tedi-design-system/commit/f4ba2cb2c3ef491c94e084a992001be5ed415105)) -- **modal:** TEHVEER-240 - Add displayNames to CardHeader and CardContent ([54d6a7b](https://github.com/TEHIK-EE/tedi-design-system/commit/54d6a7b2f9d4591239fcff28d471b15c8046ba66)) -- **modal:** TEHVEER-240 - Prevent close button and content overlap ([f152de9](https://github.com/TEHIK-EE/tedi-design-system/commit/f152de9d66ad698362f639e55c1745a5e9ed38e8)) -- **NPM:** fixed package.lock file ([c352106](https://github.com/TEHIK-EE/tedi-design-system/commit/c35210631c82b1f5987869f78715c0aa553186f7)) -- **NPM:** fixed package.lock file ([a0a83c4](https://github.com/TEHIK-EE/tedi-design-system/commit/a0a83c4e6bce3eb982ff124dd153ad4a2ff12322)) -- **select:** fix multiselect do not scroll top after selection - TEHVEER-304 ([dc151db](https://github.com/TEHIK-EE/tedi-design-system/commit/dc151dba8a209a57b806abb721d8510980d3ea2a)) -- **select:** required props passed to input ([#58](https://github.com/TEHIK-EE/tedi-design-system/issues/58)) ([eb6428f](https://github.com/TEHIK-EE/tedi-design-system/commit/eb6428fc73773157148d2368802c7047f5ff9a21)) -- **spinner:** TEDI-304 - WCAG changes ([#73](https://github.com/TEHIK-EE/tedi-design-system/issues/73)) ([12ec7b9](https://github.com/TEHIK-EE/tedi-design-system/commit/12ec7b9e2d77e34f4553588d09e69f46d213fb20)) -- **storybook:** TEDI-271 - Display type values in argsTable ([88a4507](https://github.com/TEHIK-EE/tedi-design-system/commit/88a4507fbe8a6ec23ea6ea4f64a923ad14da7901)) - -### Features - -- **chore:** Library structure changes ([80a142d](https://github.com/TEHIK-EE/tedi-design-system/commit/80a142d9328e0212b830c1ea08535ceebdec27cf)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **chore:** Move Welcome, GetStarted and Changelog docs to shared folder ([#33](https://github.com/TEHIK-EE/tedi-design-system/issues/33)) ([10fa8cb](https://github.com/TEHIK-EE/tedi-design-system/commit/10fa8cb2f1c6aa77a1a21d217a24f5591f709cda)) -- **colors:** TEDI-242 - Added TEDI colors docs ([12aae95](https://github.com/TEHIK-EE/tedi-design-system/commit/12aae957ca067d7a9871454f83af96f640ef0e03)) -- **FileUpload:** added optional size checking and callback ([#55](https://github.com/TEHIK-EE/tedi-design-system/issues/55)) ([569f1d6](https://github.com/TEHIK-EE/tedi-design-system/commit/569f1d68f0c04c9de80886ef1a2ba9dcae17bf46)) -- **general:** TEDI-261 - Added TEDI components export ([919319e](https://github.com/TEHIK-EE/tedi-design-system/commit/919319ecdaa63b785951def02083343d52a9df43)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **icon:** TEDI-41 - TEDI icon component ([da3b2e4](https://github.com/TEHIK-EE/tedi-design-system/commit/da3b2e426fc1d80229214489b39fb4e0f6ed9607)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **migration:** GitHub migration ([d8f9be5](https://github.com/TEHIK-EE/tedi-design-system/commit/d8f9be52b9c54bc94fc35bfc066e09cbc0846f68)) -- **migration:** GitHub migration ([bf56030](https://github.com/TEHIK-EE/tedi-design-system/commit/bf560304b81b04d35b967c190816b0d9325b6735)), closes [#1](https://github.com/TEHIK-EE/tedi-design-system/issues/1) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **pipeline:** Added GitHub Code scanning ([#31](https://github.com/TEHIK-EE/tedi-design-system/issues/31)) ([72d5a04](https://github.com/TEHIK-EE/tedi-design-system/commit/72d5a04ccfad82c7aba903ce294504974aa9c2fd)) -- **release:** Fixing versioning conflict by forcing semantic release to bump version ([f56b500](https://github.com/TEHIK-EE/tedi-design-system/commit/f56b5005458dc8416155f189e202f456c997a839)) -- **spinner:** TEDI-199 - TEDI Spinner component ([fb24128](https://github.com/TEHIK-EE/tedi-design-system/commit/fb24128f7798bf952d382d6cfc35e20a138e9e72)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **table:** add visibilityState, to hide columns - TEHVEER-303 ([c3b57ae](https://github.com/TEHIK-EE/tedi-design-system/commit/c3b57aea8ddd325961e7126d9adac656a408c5fc)) -- **typography:** TEDI-264 - TEDI typography component ([033fb7d](https://github.com/TEHIK-EE/tedi-design-system/commit/033fb7dd40f5f65d2ec7647ad1bd34ed8efe7064)) -- **typography:** TEHVEER-302 - Add typography styles for mobile ([215fddb](https://github.com/TEHIK-EE/tedi-design-system/commit/215fddb5c95411c98a5e72be0d24b4ef2d85be24)) - -# [6.30.0](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.29.0...v6.30.0) (2024-05-30) - -### Bug Fixes - -- **Breadcrumbs:** Make last element text ([1f78783](https://github.com/TEHIK-EE/tedi-design-system/commit/1f787832c615b712f1370799c16b8df1542898c9)) -- **button:** TEHVEER-299 - fullWidth prop should still work with noStyle ([b5d64b5](https://github.com/TEHIK-EE/tedi-design-system/commit/b5d64b5ef2f43f46237fdec1833adefac3d92911)) -- **chore:** Fixed breakpoints style path in variables ([5d59860](https://github.com/TEHIK-EE/tedi-design-system/commit/5d598607423dd6ea149abc21ab5af3cc25538a4c)) -- **chore:** TEDI-216 - Stories paths, changelog and readme fixes ([af5d743](https://github.com/TEHIK-EE/tedi-design-system/commit/af5d743e8df1e0c2d7d7d2592df39ae12dda2c4e)) -- **chore:** TEDI-277 - TEDI components export ([168fffc](https://github.com/TEHIK-EE/tedi-design-system/commit/168fffc975462a8507c7bd33792ab7810af760ee)) -- **chore:** TEDI-278 - Fixed TEDI Icon rendering in next.js project ([f5ffd87](https://github.com/TEHIK-EE/tedi-design-system/commit/f5ffd873d2e1f1518d4b890e1a418ffc73124e57)) -- **common:** Remove unused react-test-renderer ([1a0eca9](https://github.com/TEHIK-EE/tedi-design-system/commit/1a0eca9b572c603f1b9f57c16c43e38577bbaf28)) -- **Continious deployment:** Fixed the way base href is composed to exclude query part ([5c3e973](https://github.com/TEHIK-EE/tedi-design-system/commit/5c3e973bd05d4eb31c9537162e09646acbb24b1a)) -- Fixed semantic-release config ([cca9bec](https://github.com/TEHIK-EE/tedi-design-system/commit/cca9bec8dffb9a2f0854c11084e92f98bd2fecee)) -- **library:** TEDI-277 - Library components export fix ([5ef9d39](https://github.com/TEHIK-EE/tedi-design-system/commit/5ef9d39a7809b08039a6bf3eb06a370f4a5fc4b6)) -- **library:** TEDI-277 - Library components export fix ([#43](https://github.com/TEHIK-EE/tedi-design-system/issues/43)) ([f4ba2cb](https://github.com/TEHIK-EE/tedi-design-system/commit/f4ba2cb2c3ef491c94e084a992001be5ed415105)) -- **modal:** TEHVEER-240 - Add displayNames to CardHeader and CardContent ([54d6a7b](https://github.com/TEHIK-EE/tedi-design-system/commit/54d6a7b2f9d4591239fcff28d471b15c8046ba66)) -- **modal:** TEHVEER-240 - Prevent close button and content overlap ([f152de9](https://github.com/TEHIK-EE/tedi-design-system/commit/f152de9d66ad698362f639e55c1745a5e9ed38e8)) -- **NPM:** fixed package.lock file ([c352106](https://github.com/TEHIK-EE/tedi-design-system/commit/c35210631c82b1f5987869f78715c0aa553186f7)) -- **NPM:** fixed package.lock file ([a0a83c4](https://github.com/TEHIK-EE/tedi-design-system/commit/a0a83c4e6bce3eb982ff124dd153ad4a2ff12322)) -- **select:** fix multiselect do not scroll top after selection - TEHVEER-304 ([dc151db](https://github.com/TEHIK-EE/tedi-design-system/commit/dc151dba8a209a57b806abb721d8510980d3ea2a)) -- **select:** required props passed to input ([#58](https://github.com/TEHIK-EE/tedi-design-system/issues/58)) ([eb6428f](https://github.com/TEHIK-EE/tedi-design-system/commit/eb6428fc73773157148d2368802c7047f5ff9a21)) -- **spinner:** TEDI-304 - WCAG changes ([#73](https://github.com/TEHIK-EE/tedi-design-system/issues/73)) ([12ec7b9](https://github.com/TEHIK-EE/tedi-design-system/commit/12ec7b9e2d77e34f4553588d09e69f46d213fb20)) -- **storybook:** TEDI-271 - Display type values in argsTable ([88a4507](https://github.com/TEHIK-EE/tedi-design-system/commit/88a4507fbe8a6ec23ea6ea4f64a923ad14da7901)) - -### Features - -- **chore:** Library structure changes ([80a142d](https://github.com/TEHIK-EE/tedi-design-system/commit/80a142d9328e0212b830c1ea08535ceebdec27cf)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **chore:** Move Welcome, GetStarted and Changelog docs to shared folder ([#33](https://github.com/TEHIK-EE/tedi-design-system/issues/33)) ([10fa8cb](https://github.com/TEHIK-EE/tedi-design-system/commit/10fa8cb2f1c6aa77a1a21d217a24f5591f709cda)) -- **colors:** TEDI-242 - Added TEDI colors docs ([12aae95](https://github.com/TEHIK-EE/tedi-design-system/commit/12aae957ca067d7a9871454f83af96f640ef0e03)) -- **FileUpload:** added optional size checking and callback ([#55](https://github.com/TEHIK-EE/tedi-design-system/issues/55)) ([569f1d6](https://github.com/TEHIK-EE/tedi-design-system/commit/569f1d68f0c04c9de80886ef1a2ba9dcae17bf46)) -- **general:** TEDI-261 - Added TEDI components export ([919319e](https://github.com/TEHIK-EE/tedi-design-system/commit/919319ecdaa63b785951def02083343d52a9df43)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **icon:** TEDI-41 - TEDI icon component ([da3b2e4](https://github.com/TEHIK-EE/tedi-design-system/commit/da3b2e426fc1d80229214489b39fb4e0f6ed9607)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **migration:** GitHub migration ([d8f9be5](https://github.com/TEHIK-EE/tedi-design-system/commit/d8f9be52b9c54bc94fc35bfc066e09cbc0846f68)) -- **migration:** GitHub migration ([bf56030](https://github.com/TEHIK-EE/tedi-design-system/commit/bf560304b81b04d35b967c190816b0d9325b6735)), closes [#1](https://github.com/TEHIK-EE/tedi-design-system/issues/1) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **pipeline:** Added GitHub Code scanning ([#31](https://github.com/TEHIK-EE/tedi-design-system/issues/31)) ([72d5a04](https://github.com/TEHIK-EE/tedi-design-system/commit/72d5a04ccfad82c7aba903ce294504974aa9c2fd)) -- **spinner:** TEDI-199 - TEDI Spinner component ([fb24128](https://github.com/TEHIK-EE/tedi-design-system/commit/fb24128f7798bf952d382d6cfc35e20a138e9e72)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **table:** add visibilityState, to hide columns - TEHVEER-303 ([c3b57ae](https://github.com/TEHIK-EE/tedi-design-system/commit/c3b57aea8ddd325961e7126d9adac656a408c5fc)) -- **typography:** TEDI-264 - TEDI typography component ([033fb7d](https://github.com/TEHIK-EE/tedi-design-system/commit/033fb7dd40f5f65d2ec7647ad1bd34ed8efe7064)) -- **typography:** TEHVEER-302 - Add typography styles for mobile ([215fddb](https://github.com/TEHIK-EE/tedi-design-system/commit/215fddb5c95411c98a5e72be0d24b4ef2d85be24)) - -# [6.30.0-rc.16](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.15...v6.30.0-rc.16) (2024-05-30) - -### Bug Fixes - -- **spinner:** TEDI-304 - WCAG changes ([#73](https://github.com/TEHIK-EE/tedi-design-system/issues/73)) ([12ec7b9](https://github.com/TEHIK-EE/tedi-design-system/commit/12ec7b9e2d77e34f4553588d09e69f46d213fb20)) - -# [6.30.0-rc.15](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.14...v6.30.0-rc.15) (2024-05-30) - -### Features - -- **typography:** TEDI-264 - TEDI typography component ([033fb7d](https://github.com/TEHIK-EE/tedi-design-system/commit/033fb7dd40f5f65d2ec7647ad1bd34ed8efe7064)) - -# [6.30.0-rc.14](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.13...v6.30.0-rc.14) (2024-05-29) - -### Bug Fixes - -- **select:** required props passed to input ([#58](https://github.com/TEHIK-EE/tedi-design-system/issues/58)) ([eb6428f](https://github.com/TEHIK-EE/tedi-design-system/commit/eb6428fc73773157148d2368802c7047f5ff9a21)) - -# [6.30.0-rc.13](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.12...v6.30.0-rc.13) (2024-05-29) - -### Features - -- **colors:** TEDI-242 - Added TEDI colors docs ([12aae95](https://github.com/TEHIK-EE/tedi-design-system/commit/12aae957ca067d7a9871454f83af96f640ef0e03)) - -# [6.30.0-rc.12](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.11...v6.30.0-rc.12) (2024-05-24) - -### Features - -- **FileUpload:** added optional size checking and callback ([#55](https://github.com/TEHIK-EE/tedi-design-system/issues/55)) ([569f1d6](https://github.com/TEHIK-EE/tedi-design-system/commit/569f1d68f0c04c9de80886ef1a2ba9dcae17bf46)) - -# [6.30.0-rc.11](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.10...v6.30.0-rc.11) (2024-05-23) - -### Bug Fixes - -- **storybook:** TEDI-271 - Display type values in argsTable ([88a4507](https://github.com/TEHIK-EE/tedi-design-system/commit/88a4507fbe8a6ec23ea6ea4f64a923ad14da7901)) - -# [6.30.0-rc.10](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.9...v6.30.0-rc.10) (2024-05-21) - -### Bug Fixes - -- **Breadcrumbs:** Make last element text ([1f78783](https://github.com/TEHIK-EE/tedi-design-system/commit/1f787832c615b712f1370799c16b8df1542898c9)) - -# [6.30.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.8...v6.30.0-rc.9) (2024-05-21) - -### Bug Fixes - -- **chore:** TEDI-278 - Fixed TEDI Icon rendering in next.js project ([f5ffd87](https://github.com/TEHIK-EE/tedi-design-system/commit/f5ffd873d2e1f1518d4b890e1a418ffc73124e57)) - -# [6.30.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.7...v6.30.0-rc.8) (2024-05-20) - -### Bug Fixes - -- **chore:** TEDI-277 - TEDI components export ([168fffc](https://github.com/TEHIK-EE/tedi-design-system/commit/168fffc975462a8507c7bd33792ab7810af760ee)) - -# [6.30.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.6...v6.30.0-rc.7) (2024-05-20) - -### Bug Fixes - -- **library:** TEDI-277 - Library components export fix ([#43](https://github.com/TEHIK-EE/tedi-design-system/issues/43)) ([f4ba2cb](https://github.com/TEHIK-EE/tedi-design-system/commit/f4ba2cb2c3ef491c94e084a992001be5ed415105)) - -# [6.30.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.5...v6.30.0-rc.6) (2024-05-20) - -### Bug Fixes - -- **library:** TEDI-277 - Library components export fix ([5ef9d39](https://github.com/TEHIK-EE/tedi-design-system/commit/5ef9d39a7809b08039a6bf3eb06a370f4a5fc4b6)) - -# [6.30.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.4...v6.30.0-rc.5) (2024-05-17) - -### Features - -- **spinner:** TEDI-199 - TEDI Spinner component ([fb24128](https://github.com/TEHIK-EE/tedi-design-system/commit/fb24128f7798bf952d382d6cfc35e20a138e9e72)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) - -# [6.30.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.3...v6.30.0-rc.4) (2024-05-16) - -### Features - -- **general:** TEDI-261 - Added TEDI components export ([919319e](https://github.com/TEHIK-EE/tedi-design-system/commit/919319ecdaa63b785951def02083343d52a9df43)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) - -# [6.30.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.2...v6.30.0-rc.3) (2024-05-16) - -### Features - -- **icon:** TEDI-41 - TEDI icon component ([da3b2e4](https://github.com/TEHIK-EE/tedi-design-system/commit/da3b2e426fc1d80229214489b39fb4e0f6ed9607)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) - -# [6.30.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.30.0-rc.1...v6.30.0-rc.2) (2024-05-15) - -### Bug Fixes - -- **chore:** Fixed breakpoints style path in variables ([5d59860](https://github.com/TEHIK-EE/tedi-design-system/commit/5d598607423dd6ea149abc21ab5af3cc25538a4c)) - -### Features - -- **typography:** TEHVEER-302 - Add typography styles for mobile ([215fddb](https://github.com/TEHIK-EE/tedi-design-system/commit/215fddb5c95411c98a5e72be0d24b4ef2d85be24)) - -# [6.30.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.29.5...v6.30.0) (2024-05-15) - -### Features - -- **typography:** TEHVEER-302 - Add typography styles for mobile ([d4e87b0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d4e87b0e84a6aa82227fdc7d86ed8aea756b563c)) - -# [6.30.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.29.0...v6.30.0-rc.1) (2024-05-10) - -### Bug Fixes - -- **button:** TEHVEER-299 - fullWidth prop should still work with noStyle ([b5d64b5](https://github.com/TEHIK-EE/tedi-design-system/commit/b5d64b5ef2f43f46237fdec1833adefac3d92911)) -- **chore:** TEDI-216 - Stories paths, changelog and readme fixes ([af5d743](https://github.com/TEHIK-EE/tedi-design-system/commit/af5d743e8df1e0c2d7d7d2592df39ae12dda2c4e)) -- **common:** Remove unused react-test-renderer ([1a0eca9](https://github.com/TEHIK-EE/tedi-design-system/commit/1a0eca9b572c603f1b9f57c16c43e38577bbaf28)) -- **Continious deployment:** Fixed the way base href is composed to exclude query part ([5c3e973](https://github.com/TEHIK-EE/tedi-design-system/commit/5c3e973bd05d4eb31c9537162e09646acbb24b1a)) -- Fixed semantic-release config ([cca9bec](https://github.com/TEHIK-EE/tedi-design-system/commit/cca9bec8dffb9a2f0854c11084e92f98bd2fecee)) -- **modal:** TEHVEER-240 - Add displayNames to CardHeader and CardContent ([54d6a7b](https://github.com/TEHIK-EE/tedi-design-system/commit/54d6a7b2f9d4591239fcff28d471b15c8046ba66)) -- **modal:** TEHVEER-240 - Prevent close button and content overlap ([f152de9](https://github.com/TEHIK-EE/tedi-design-system/commit/f152de9d66ad698362f639e55c1745a5e9ed38e8)) -- **NPM:** fixed package.lock file ([c352106](https://github.com/TEHIK-EE/tedi-design-system/commit/c35210631c82b1f5987869f78715c0aa553186f7)) -- **NPM:** fixed package.lock file ([a0a83c4](https://github.com/TEHIK-EE/tedi-design-system/commit/a0a83c4e6bce3eb982ff124dd153ad4a2ff12322)) -- **select:** fix multiselect do not scroll top after selection - TEHVEER-304 ([dc151db](https://github.com/TEHIK-EE/tedi-design-system/commit/dc151dba8a209a57b806abb721d8510980d3ea2a)) - -### Features - -- **chore:** Library structure changes ([80a142d](https://github.com/TEHIK-EE/tedi-design-system/commit/80a142d9328e0212b830c1ea08535ceebdec27cf)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **chore:** Move Welcome, GetStarted and Changelog docs to shared folder ([#33](https://github.com/TEHIK-EE/tedi-design-system/issues/33)) ([10fa8cb](https://github.com/TEHIK-EE/tedi-design-system/commit/10fa8cb2f1c6aa77a1a21d217a24f5591f709cda)) -- **migration:** GitHub migration ([d8f9be5](https://github.com/TEHIK-EE/tedi-design-system/commit/d8f9be52b9c54bc94fc35bfc066e09cbc0846f68)) -- **migration:** GitHub migration ([bf56030](https://github.com/TEHIK-EE/tedi-design-system/commit/bf560304b81b04d35b967c190816b0d9325b6735)), closes [#1](https://github.com/TEHIK-EE/tedi-design-system/issues/1) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) -- **pipeline:** Added GitHub Code scanning ([#31](https://github.com/TEHIK-EE/tedi-design-system/issues/31)) ([72d5a04](https://github.com/TEHIK-EE/tedi-design-system/commit/72d5a04ccfad82c7aba903ce294504974aa9c2fd)) -- **table:** add visibilityState, to hide columns - TEHVEER-303 ([c3b57ae](https://github.com/TEHIK-EE/tedi-design-system/commit/c3b57aea8ddd325961e7126d9adac656a408c5fc)) - -## [6.29.5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.29.4...v6.29.5) (2024-05-03) - -### Bug Fixes - -- **common:** Remove unused react-test-renderer ([a73dadd](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a73dadd2bc1425ad516fac73d8b06b4eb2688679)) - -## [6.29.4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.29.3...v6.29.4) (2024-05-03) - -### Bug Fixes - -- **button:** TEHVEER-299 - fullWidth prop should still work with noStyle ([9caa42f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/9caa42f3ca025f52457a8bd240e664bb0e41e1d8)) - -## [6.29.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.29.2...v6.29.3) (2024-04-29) - -### Bug Fixes - -- **select:** fix multiselect do not scroll top after selection - TEHVEER-304 ([7f9e142](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7f9e142abc27debac90e41aab2146671af422504)) - -## [6.29.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.29.1...v6.29.2) (2024-04-25) - -### Bug Fixes - -- **modal:** TEHVEER-240 - Add displayNames to CardHeader and CardContent ([3134464](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/313446443871c9cc3c3bf095d9c3cc4668cbe7d6)) - -## [6.29.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.29.0...v6.29.1) (2024-04-25) - -### Bug Fixes - -- **modal:** TEHVEER-240 - Prevent close button and content overlap ([f152de9](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f152de9d66ad698362f639e55c1745a5e9ed38e8)) - -# [6.29.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.28.4...v6.29.0) (2024-04-24) - -### Bug Fixes - -- Fixed semantic-release config ([66c5183](https://github.com/TEHIK-EE/tedi-design-system/commit/66c5183f301d7015d1683b4514433f12957e2ce2)) - -### Features - -- **table:** add visibilityState, to hide columns - TEHVEER-303 ([d5f4d85](https://github.com/TEHIK-EE/tedi-design-system/commit/d5f4d85c2aa65c91e6e5e78c45d11b8951cc103b)) - -# [6.29.0-rc.9](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.29.0-rc.8...v6.29.0-rc.9) (2024-05-08) - -### Bug Fixes - -- **Continious deployment:** Fixed the way base href is composed to exclude query part ([5c3e973](https://github.com/TEHIK-EE/tedi-design-system/commit/5c3e973bd05d4eb31c9537162e09646acbb24b1a)) - -# [6.29.0-rc.8](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.29.0-rc.7...v6.29.0-rc.8) (2024-05-06) - -### Features - -- **chore:** Move Welcome, GetStarted and Changelog docs to shared folder ([#33](https://github.com/TEHIK-EE/tedi-design-system/issues/33)) ([10fa8cb](https://github.com/TEHIK-EE/tedi-design-system/commit/10fa8cb2f1c6aa77a1a21d217a24f5591f709cda)) - -# [6.29.0-rc.7](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.29.0-rc.6...v6.29.0-rc.7) (2024-05-06) - -### Features - -- **pipeline:** Added GitHub Code scanning ([#31](https://github.com/TEHIK-EE/tedi-design-system/issues/31)) ([72d5a04](https://github.com/TEHIK-EE/tedi-design-system/commit/72d5a04ccfad82c7aba903ce294504974aa9c2fd)) - -# [6.29.0-rc.6](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.29.0-rc.5...v6.29.0-rc.6) (2024-04-30) - -### Bug Fixes - -- **chore:** TEDI-216 - Stories paths, changelog and readme fixes ([af5d743](https://github.com/TEHIK-EE/tedi-design-system/commit/af5d743e8df1e0c2d7d7d2592df39ae12dda2c4e)) - -# [6.29.0-rc.5](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.29.0-rc.4...v6.29.0-rc.5) (2024-04-29) - -### Features - -- **chore:** Library structure changes ([80a142d](https://github.com/TEHIK-EE/tedi-design-system/commit/80a142d9328e0212b830c1ea08535ceebdec27cf)), closes [#12](https://github.com/TEHIK-EE/tedi-design-system/issues/12) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) - -# [6.29.0-rc.4](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.29.0-rc.3...v6.29.0-rc.4) (2024-04-25) - -### Bug Fixes - -- Fixed semantic-release config ([cca9bec](https://github.com/TEHIK-EE/tedi-design-system/commit/cca9bec8dffb9a2f0854c11084e92f98bd2fecee)) - -# [6.29.0-rc.3](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.29.0-rc.2...v6.29.0-rc.3) (2024-04-25) - -### Features - -- **table:** add visibilityState, to hide columns - TEHVEER-303 ([d5f4d85](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d5f4d85c2aa65c91e6e5e78c45d11b8951cc103b)) - -# [6.29.0-rc.2](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.29.0-rc.1...v6.29.0-rc.2) (2024-04-25) - -### Features - -- **table:** add visibilityState, to hide columns - TEHVEER-303 ([c3b57ae](https://github.com/TEHIK-EE/tedi-design-system/commit/c3b57aea8ddd325961e7126d9adac656a408c5fc)) - -# [6.29.0-rc.1](https://github.com/TEHIK-EE/tedi-design-system/compare/v6.28.4...v6.29.0-rc.1) (2024-04-24) - -### Features - -- **migration:** GitHub migration ([d8f9be5](https://github.com/TEHIK-EE/tedi-design-system/commit/d8f9be52b9c54bc94fc35bfc066e09cbc0846f68)) -- **migration:** GitHub migration ([bf56030](https://github.com/TEHIK-EE/tedi-design-system/commit/bf560304b81b04d35b967c190816b0d9325b6735)), closes [#1](https://github.com/TEHIK-EE/tedi-design-system/issues/1) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) [#8](https://github.com/TEHIK-EE/tedi-design-system/issues/8) - -## [6.28.4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.28.3...v6.28.4) (2024-04-18) - -### Bug Fixes - -- **table:** TEHVEER-300 fix small table header gutter ([296089c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/296089cc35fb99ea6970c2b0e0821149c4ab1c30)) - -## [6.28.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.28.2...v6.28.3) (2024-04-18) - -### Bug Fixes - -- **anchor:** TEHVEER-299 - fullWidth now stretches Anchor ([825511b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/825511b13df56e92d5b013dfa6af1be82fcb8655)) - -## [6.28.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.28.1...v6.28.2) (2024-04-17) - -### Bug Fixes - -- **table:** allow to save table text-filter with nullable value to clear filter - TEHVEER-298 ([46d2525](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/46d25250cfab42b9aa80ea574553c4ebb307bbcf)) - -## [6.28.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.28.0...v6.28.1) (2024-04-17) - -### Bug Fixes - -- **hash-trigger:** fix scroll not called on hashchange event - TEHVEER-297 ([656ee7d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/656ee7dc699b27d4bb03061e05a49e8a794ff0b6)) - -# [6.28.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.27.1...v6.28.0) (2024-04-16) - -### Bug Fixes - -- **choice-group:** TEHVEER-296 - Move the vertical spacing from Check and Radio to ChoiceGroup ([fb9f08d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/fb9f08de4cd3b53387d7792b7dd730bc05627d88)) -- **choice-group:** TEHVEER-296 - Remove extra padding from last item ([41f346a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/41f346a15f724ed1938e1034ee95c074b2c7dc85)) - -### Features - -- **choice-group:** TEHVEER-296 - Add rowProps prop to ChoiceGroup ([6dfd876](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6dfd87697d6326011027ab979e77d6ba0bb485f5)) - -## [6.27.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.27.0...v6.27.1) (2024-04-12) - -### Bug Fixes - -- **card:** TEHVEER-295 - fix nested card inheriting border radius ([12eb87f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/12eb87ff7d71f16e209350a92b19b540e1158071)) - -# [6.27.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.26.3...v6.27.0) (2024-04-11) - -### Bug Fixes - -- **table:** TEHVEER-290 - use correct state for rowSelection ([315d76e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/315d76ed01840d1a1a17275681839ebc3152bd75)) - -### Features - -- **notification:** TEHVEER-294 Increase notification font size to 16px ([b9d828f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b9d828f77c134bc1d2f9612692c2952fe2c0da4e)) - -## [6.26.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.26.2...v6.26.3) (2024-04-10) - -### Bug Fixes - -- **table:** TEHVEER-290 - call onRowSelectionChange only when controlled form outside ([115ce10](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/115ce10a5482d8afdf81f6578459ed41f06dd446)) - -## [6.26.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.26.1...v6.26.2) (2024-04-04) - -### Bug Fixes - -- **tag:** TEHVEER-209 - Wrap tag text as last resort ([33e064e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/33e064ed4b5456f224e5b34f37b3dd7460e0568c)) - -## [6.26.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.26.0...v6.26.1) (2024-04-04) - -### Bug Fixes - -- **check:** TEHVEER-293 - Remove double label from check and radio ([8e754fd](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8e754fddb1297eda9eb1229a372346fde48dbb3e)) - -# [6.26.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.25.0...v6.26.0) (2024-04-04) - -### Features - -- **tabs:** TEHVEER-291 - Support padding and background props on TabsItem ([2cb08a9](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2cb08a9cbe9d938fa2a65e1401a993004244f6eb)) - -# [6.25.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.24.0...v6.25.0) (2024-04-03) - -### Features - -- **table:** TEHVEER-290 - add option to control rowSelection from outside and add border after footer when pagination also used ([ebb7210](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ebb72109adcc914699f3bb06ef2b738f4391b0d1)) -- **tag:** TEHVEER-209 - Allow tag text to wrap ([90647a1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/90647a1ebf62f5951be5b6316f1966bd785da0eb)) - -# [6.24.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.23.0...v6.24.0) (2024-04-02) - -### Features - -- **select:** add no-options and loading labels from labelProvider - TEHVEER-289 ([a7f11c2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a7f11c20cd39fb6c0378a72d6ce8292dc10b2ea1)) - -# [6.23.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.22.0...v6.23.0) (2024-04-01) - -### Features - -- **accordion:** TEHVEER-288 - Add another background option to AccordionItemHeader ([0690565](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0690565cfcf08626c2e4eb1ebcb2121cb483a566)) -- **accordion:** TEHVEER-288 - Add gutter option to Accordion ([5e72c1c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5e72c1cd1c8bead21f5eb4dbbc9a1396b70e5549)) - -# [6.22.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.21.3...v6.22.0) (2024-03-28) - -### Bug Fixes - -- **table:** TEHVEER-287 - Show all pages in table pagination during printing ([f5f466c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f5f466c54f3a9d7ae6c480aae5d5f1a818bda493)) - -### Features - -- **table:** TEHVEER-287 - Allow date range filter customization through column meta ([06addb6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/06addb6e6a9164ee362ecf79fad16085b47c5698)) - -## [6.21.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.21.2...v6.21.3) (2024-03-26) - -### Bug Fixes - -- **table:** TEHVEER-286 - Memoize table data internally to prevent infinite rerender ([c63bedd](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c63bedd06e44df8df80e09d36586ed9d87e3f0dd)) - -## [6.21.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.21.1...v6.21.2) (2024-03-22) - -### Bug Fixes - -- **table:** TEHVEER-283 - textFilterFn should be case-insensitive ([ba86e3b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ba86e3bdf2025308ab7fb1314183e027b9682631)) - -## [6.21.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.21.0...v6.21.1) (2024-03-22) - -### Bug Fixes - -- **table:** TEHVEER-285 - verticalAlign was only working with classNames set ([9d147e7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/9d147e79b5e9c283fcfc59208ac610606fbf936f)) - -# [6.21.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.20.0...v6.21.0) (2024-03-22) - -### Features - -- **table:** TEHVEER-285 - Added verticalAlignment prop to CustomizeTableCell ([82b8718](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/82b8718400b44632f58d318c47725a50921b7384)) - -# [6.20.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.19.0...v6.20.0) (2024-03-22) - -### Features - -- **text:** TEHVEER-284 - Update roboto font files ([7462e66](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7462e661ee6599c1d0b181f357548464e5aa1e78)) - -# [6.19.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.18.0...v6.19.0) (2024-03-22) - -### Bug Fixes - -- **choice-group:** TEHVEER-268 - fix wrong cursor on radio and check hover ([a057fba](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a057fba987708162d7eb84e0defa4513989f7751)) - -### Features - -- **table:** TEHVEER-283 - Added manualSorting and manualFiltering props ([209de75](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/209de75e6fdc5b61b21252968a3c473c0bfc0d7b)) -- **table:** TEHVEER-283 - Export filter-fn, so they can be used in the app if needed ([e59f620](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e59f62074713b3b73a41b72f6721f9418923574e)) -- **table:** TEHVEER-283 - Store date filter value as ISOString instead of Dayjs object ([c6d0d0b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c6d0d0b7e3eddba747a400e9e17f5e698c963069)) - -# [6.18.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.17.1...v6.18.0) (2024-03-21) - -### Features - -- **col, row:** extend Row and Col component typings to accommodate html attributes - TEHVEER-274 ([3641978](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/364197854d30e960ebcad5aa0a6d8451b4bf8d61)) -- **table:** add getRowId property, use Checks inside getRowSelectionColumn - TEHVEER-282 ([d80a7ae](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d80a7ae64f38c51b34c162e16787b3e615e56b18)) - -## [6.17.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.17.0...v6.17.1) (2024-03-21) - -### Bug Fixes - -- **table:** TEHVEER-281 - Fix filtering logic for date-range-period when only end filter was set ([ed2bc29](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ed2bc2903638d2016d171bb5dfc8ce5eed23cae9)) - -# [6.17.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.16.0...v6.17.0) (2024-03-21) - -### Bug Fixes - -- **table:** TEHVEER-281 - Date-range filter should also match the same day ([e00f49c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e00f49c33c252628dc51338018cd75820abe5acc)) - -### Features - -- **table:** TEHVEER-281 - Add validation to date-range filter ([ae7f60e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ae7f60ee88075f378a3ed175cd34073336c15292)) -- **table:** TEHVEER-281 - Added date-range-period filter ([0a8ea61](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0a8ea61712ff723cde139a1a9d77697efbc97c28)) - -# [6.16.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.15.0...v6.16.0) (2024-03-20) - -### Features - -- **choice-group:** TEHVEER-268 - add tooltip capability to check and radio ([bafd612](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/bafd6122e3d258c2e75818161efa8df375a0ad3a)) - -# [6.15.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.14.1...v6.15.0) (2024-03-20) - -### Features - -- **status:** TEHVEER-275 add warning option to status component ([2e082c4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2e082c4fd8232e20d4cfdd6a368c758b3eb9acfc)) - -## [6.14.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.14.0...v6.14.1) (2024-03-19) - -### Bug Fixes - -- **common:** fix storybook showin wrong sorce code for stories - TEHVEER-278 ([1495633](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/14956339284ddaaa6851e1479f0407ccce216a16)) - -# [6.14.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.13.0...v6.14.0) (2024-03-19) - -### Features - -- **choice-group:** Add color support for filter items in choice group - TEHVEER-276 ([2f7a6ea](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2f7a6ea737cebc5be54253d1bb63efac07149403)) - -# [6.13.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.12.2...v6.13.0) (2024-03-18) - -### Features - -- **tag:** TEHVEER-279 - Added borderless tag type ([c1c7b04](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c1c7b04f2e7d18df757bf74f548ead5ed9e0f812)) - -## [6.12.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.12.1...v6.12.2) (2024-03-14) - -### Bug Fixes - -- **modal:** TEHVEER-273 - Modal close button was hidden since 6.7.0 ([f2ef783](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f2ef7839c2c24be25206ddb0542f0ea155897a3d)) - -## [6.12.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.12.0...v6.12.1) (2024-03-13) - -### Bug Fixes - -- **vertical-spacing:** New sizes for VerticalSpacing from 6.12.0 were not working ([dad9c99](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/dad9c99d181d51b7f6bb3b49b8e1b5f42590cf44)) - -# [6.12.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.11.0...v6.12.0) (2024-03-13) - -### Features - -- **text:** add breakpoint support to Text - TEHVEER-270 ([7d3c70d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7d3c70dc9553d741232793eb2e4d2bf94394d0d4)) - -# [6.11.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.10.0...v6.11.0) (2024-03-12) - -### Features - -- **typography:** Added line-height utility classes ([724cedb](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/724cedb276489a014a7d54a58e18da9b4f31f977)) - -# [6.10.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.9.2...v6.10.0) (2024-03-12) - -### Features - -- **accordion:** TEHVEER-269 - Remove margin from last accordion item ([c57ae26](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c57ae262192c868185fa19d87e46ff854272bba9)) - -## [6.9.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.9.1...v6.9.2) (2024-03-12) - -### Bug Fixes - -- **card:** props with undefined value now allow the value to fallback to lower breakpoint value ([c1c769b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c1c769bc6fb9d6d4d5dc64dd8464e5726cc665fe)) - -## [6.9.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.9.0...v6.9.1) (2024-03-11) - -### Bug Fixes - -- **accordion:** fix accordionContent border-radius when with background - TEHVEER-262 ([b36f27c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b36f27c46144f49f077e08aa16c3a52e1eea9d88)) - -# [6.9.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.8.4...v6.9.0) (2024-03-07) - -### Features - -- **datepicker, datetimepicker:** TEHVEER-267 - add onClose property to datepicker, datetimepicker ([d606d6b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d606d6b29fc0e19a31cdb0ee872c330d062f5a75)) -- **timepicker:** TEHVEER-267 - add onClose property to timepicker ([7ec9238](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7ec923804dc771dbf9d65bebf79e746f92596b57)) - -## [6.8.4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.8.3...v6.8.4) (2024-03-06) - -### Bug Fixes - -- **textfield, textarea:** Use roboto font-family - TEHVEER-266 ([c7dc6b1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c7dc6b16d65bac3ebe277512ec960939f5947a89)) - -## [6.8.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.8.2...v6.8.3) (2024-03-06) - -### Bug Fixes - -- **table-of-contents:** fix icon alignment with item - TEHVEER-258 ([320942a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/320942a7bb9781538b8845a42dcaac4d02575267)) - -## [6.8.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.8.1...v6.8.2) (2024-03-05) - -### Bug Fixes - -- **table-of-contents:** Export missing TableOfContentsItemProps ([0345c9f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0345c9fb98f2937725e6dadc25852afd2dbff4a5)) - -## [6.8.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.8.0...v6.8.1) (2024-03-05) - -### Bug Fixes - -- **card:** TEHVEER-264 - Card should still show left or top border when borderless prop is used ([0e28f1b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0e28f1b859f69408913da2f53f9d0dc860e40732)) - -# [6.8.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.7.0...v6.8.0) (2024-03-05) - -### Bug Fixes - -- **table-of-contents:** code review fixes - TEHVEER-258 ([d88aee5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d88aee5d9d85482bb90f6ef3ce1f8f8056dd9a1f)) - -### Features - -- **table-of-contents:** TEHVEER-257 - move story items into tah-example template ([a72050b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a72050b6df6485f5c61a3193f955f1ad48500610)) -- **table-of-contents:** TEHVEER-258 - Add classNames import and styles to TableOfContentsItem ([e21cea9](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e21cea971fe18a87bb73a0190f253d542b42307c)) -- **table-of-contents:** TEHVEER-258 - extract state from component, add example of use-case ([46765ad](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/46765ad3a92a20e6a4eaa7565b92f4be94cdca31)) -- **table-of-contents:** TEHVEER-258 - extract table of contents components to separate files ([defa858](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/defa858ca7d17180cfedbe5b805b912fb07b879a)) -- **table-of-contents:** TEHVEER-258 - Extract tableofcontentsitem to separate component ([e5b75d1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e5b75d160681e5e9ede90bfceee09969c35f7757)) -- **table-of-contents:** TEHVEER-258 - Extract tableofcontentsitem to separate component ([74cafb1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/74cafb1091a9f000dd0319dd9e6737501b4b3947)) -- **table-of-contents:** TEHVEER-258 - pr feedback, interface changes ([24143ed](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/24143edc4ae10404205b44fa2274750d44feb673)) -- **table-of-contents:** TEHVEER-258: add new stories ([39a3d3e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/39a3d3e643d9649b9d924763398ef4cc913ecfda)) - -# [6.7.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.6.0...v6.7.0) (2024-03-04) - -### Features - -- **accordion:** TEHVEER-262 - Refactor accordion to use card internally ([14b91cd](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/14b91cdcd6424aa79f538069a9ad99d4ce1571e5)) - -# [6.6.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.5.4...v6.6.0) (2024-03-01) - -### Features - -- **card:** TEHVEER-263 - Add CardNotification component ([c94b855](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c94b85548e9e3fc124dbce236779689f47c03ae7)) -- **card:** TEHVEER-263 - Add primary-main and primary-active variant to CardHeader ([3988c4b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3988c4b6b75ec902e8f6e0e851d49e9ba5edd948)) - -## [6.5.4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.5.3...v6.5.4) (2024-02-28) - -### Bug Fixes - -- **feedback:** TEHVEER-261 - Prevent feedback trigger from overlapping content ([89afb6a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/89afb6a91eea5e338d6df5beea03e7f6619d295f)) - -## [6.5.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.5.2...v6.5.3) (2024-02-27) - -### Bug Fixes - -- **table:** Fix table text filters not saving filter value - TEHVEER-260 ([90362f3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/90362f31cb891d067d76890a2415c54d964d3f27)) - -## [6.5.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.5.1...v6.5.2) (2024-02-23) - -### Bug Fixes - -- **tooltip:** bordered tooltip arrow placement - TEHVEER-259 ([d424d1f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d424d1fc7f604311442ac898deeb9bcc4b979979)) - -## [6.5.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.5.0...v6.5.1) (2024-02-21) - -### Bug Fixes - -- **table:** unify table filter action buttons alignment - TEHVEER-245 ([27e6d92](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/27e6d92c4686557f98805db87ac37f6065a38c2f)) - -# [6.5.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.4.0...v6.5.0) (2024-02-20) - -### Features - -- **choice-group:** TEHVEER-257 - remove center align for radio and checkbox items ([b8f9bcd](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b8f9bcd8834c748b4af662b2362abfc4cab156df)) -- **table:** add functionaly to defaultPagination to reset when filter changes - TEHVEER-250 ([4c9dd2e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/4c9dd2e2b395e819752de8c3dc065403507d77b1)) - -# [6.4.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.3.0...v6.4.0) (2024-02-19) - -### Features - -- **table:** add date-range filter - TEHVEER-245 ([2f566b1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2f566b1cd76f77b69fbae79ea39a640356b8c955)) - -# [6.3.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.2.0...v6.3.0) (2024-02-15) - -### Features - -- **card:** Change card left and top border to 4px - TEHVEER-256 ([a4fdf41](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a4fdf4182b4628c87471444b4008cf1f1cfda322)) - -# [6.2.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.1.0...v6.2.0) (2024-02-15) - -### Features - -- **separator:** Add thickness prop for Separator - TEHVEER-184 ([51edb8a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/51edb8a5cb56f9633d071921d1a3f34e7bfe8b63)) - -# [6.1.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.0.1...v6.1.0) (2024-02-07) - -### Features - -- **header:** Hide notification when printing - TEHVEER-255 ([4a21ab5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/4a21ab51edf6147c020aa0aea6c5dc03245c3af9)) - -## [6.0.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v6.0.0...v6.0.1) (2024-02-07) - -### Bug Fixes - -- **file-upload:** fix file-upload card border ([a95b6d2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a95b6d2c3bb34b3aa08020febe60ce36820fadfc)) - -# [6.0.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.39.1...v6.0.0) (2024-02-07) - -### Features - -- **file-upload:** rework file-upload according to new design - TEHVEER-244 ([82aed18](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/82aed18f0127febe4f643f6e6f9e167ffb0f9019)) - -### BREAKING CHANGES - -- **file-upload:** FileUpload visual change to match other inputs, remove button props - -## [5.39.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.39.0...v5.39.1) (2024-02-02) - -### Bug Fixes - -- **choice-group:** fix value error occurring on dynamic change of inputType - TEHVEER-253 ([d59c79e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d59c79e27d250759d3c0f4ff034f71793fcfc621)) - -# [5.39.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.38.1...v5.39.0) (2024-02-02) - -### Features - -- **placeholder:** Add rowProps to customize spacing between children - TEHVEER-254 ([ee74f36](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ee74f362f44abdf71e3417da72d0b04075f2ef04)) - -## [5.38.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.38.0...v5.38.1) (2024-02-02) - -### Bug Fixes - -- **table:** export table types from lib ([32021d6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/32021d66a6e8cb40b798a57eaff63c242be15f91)) - -# [5.38.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.37.0...v5.38.0) (2024-02-01) - -### Features - -- **hooks:** export use-breakpoint-props helpers ([d28f825](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d28f82564f610263c009fceab98d6ded76cec875)) - -# [5.37.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.36.0...v5.37.0) (2024-01-23) - -### Features - -- **textfield:** TEHVEER-251 - Add a prop to hide arrows for number input ([d2ded86](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d2ded863ea82a99b07de4bb1e462c0bd6818d97d)) - -# [5.36.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.35.1...v5.36.0) (2024-01-22) - -### Bug Fixes - -- **affix:** fix sticky affix when affix is taller than viewport - TEHVEER-249 ([eca8e88](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/eca8e88500bec38eb2171b4a8f50a31d3b5918dd)) - -### Features - -- **choice-group:** add new 'light' type, improve items gap - TEHVEER-248 ([fe9a813](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/fe9a813c1b2b648e700abde8cacfdb4a5d0a98f8)) - -## [5.35.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.35.0...v5.35.1) (2024-01-15) - -### Bug Fixes - -- **header-notification:** fix headerNotification staying under sidenav overlay - TEHVEER-247 ([9b0f2b1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/9b0f2b16a36e0517d1013cb19653cc65b7eed8bb)) - -# [5.35.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.34.1...v5.35.0) (2024-01-11) - -### Features - -- **toggle:** Change toggle icon when in checked state - TEHVEER-243 ([f2fdc08](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f2fdc0888ad30bdf51cce08442643c971237fd2d)) - -## [5.34.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.34.0...v5.34.1) (2024-01-05) - -### Bug Fixes - -- **number-field:** add export default - TEHVEER-235 ([75930b6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/75930b62ed2cfe74feed560ee0bacc9889aa431c)) -- **number-field:** export component - TEHVEER-235 ([40a57b8](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/40a57b82f5cdc37ce912a39bab0e6564c5803c3d)) - -# [5.34.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.33.0...v5.34.0) (2024-01-03) - -### Features - -- **select:** Grouped options design tweaks - TEHVEER-242 ([57ba9ba](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/57ba9ba5949b812423ae69c66ed67a9f0a15030e)) - -# [5.33.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.32.1...v5.33.0) (2023-12-19) - -### Features - -- **number-field:** add number type input field - TEHVEER-234 ([1976d2b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1976d2bcf221e405dc8dc9c5e01432bce8a3a715)) - -## [5.32.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.32.0...v5.32.1) (2023-12-15) - -### Bug Fixes - -- **select:** add optionGroup types to async select properties - TEHVEER-239 ([318a9bc](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/318a9bc7a0da6621f6234ded9e95f6e9cad61751)) - -# [5.32.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.31.1...v5.32.0) (2023-12-14) - -### Features - -- **select:** add grouped options feature for select - TEHVEER-232 ([e1e42c1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e1e42c1f5cc8fe657251e7db7380145750503223)) - -## [5.31.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.31.0...v5.31.1) (2023-12-11) - -### Bug Fixes - -- **check:** TEHVEER-234 - Improve check focus styles for accessibility ([c25fad0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c25fad0da36157ec12279960388b8a977a4c5bb6)) - -# [5.31.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.30.0...v5.31.0) (2023-12-07) - -### Features - -- **layout:** TEHVEER-236 - Add optional notification component above header ([384ffd3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/384ffd3304c747c57742499c3793e61dddd321de)) - -# [5.30.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.29.2...v5.30.0) (2023-11-30) - -### Features - -- **icon:** add notranslate class to icons - TEHVEER-233 ([59a0efa](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/59a0efa26e9c8410f373451ab3df9246a15b99ff)) - -## [5.29.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.29.1...v5.29.2) (2023-11-30) - -### Bug Fixes - -- **layout:** reduce sf logo sizes ([fb4b127](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/fb4b127e434047bb0f21c128f08dd512f9bdd57f)) - -## [5.29.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.29.0...v5.29.1) (2023-11-13) - -### Bug Fixes - -- **layout:** UPP-1160 - TEHVEER: Ligipääsetavus (Android tablet) - teksti suurendamine (kõik vaated) ([f318a3e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f318a3e753e939cb9700da4780089d8ff94ef124)) - -# [5.29.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.28.0...v5.29.0) (2023-11-02) - -### Features - -- **layout:** TEHVEER-229 - Added mainContentClassname prop to Layout component ([def67a2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/def67a28237306e9513a3a951c70f766303a2f58)) - -# [5.28.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.27.0...v5.28.0) (2023-11-02) - -### Features - -- **vertical-progress:** add option to hide edit button per item - TEHVEER-222 ([42f48ee](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/42f48eec4e0bc5c1d2a2353941c98c7f53f35c29)) - -# [5.27.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.26.0...v5.27.0) (2023-11-01) - -### Features - -- **card:** allow to use transparent background ([71514d1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/71514d192d8534ba7a0af1518ea7e0d969e4a295)) -- **card:** remove background prop from CardHeader ([01430d5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/01430d58a5661ed6a6c2ffefa78526723a04d3fe)) - -# [5.26.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.25.3...v5.26.0) (2023-11-01) - -### Features - -- **toggle:** TEHVEER-162 - Added toggle loading state ([4a0cfe8](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/4a0cfe8a99e276452a62f02bf8fa03014b45c280)) - -## [5.25.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.25.2...v5.25.3) (2023-10-31) - -### Bug Fixes - -- **notification:** TEHVEER-228 - Read notifications on page load ([e48b7a3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e48b7a346ee93488a9803226f235aa5584df26bc)) - -## [5.25.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.25.1...v5.25.2) (2023-10-31) - -### Bug Fixes - -- **header:** TEHVEER-226 - Move BottomHeader underneath Sidenav on mobile ([e8440ca](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e8440cab825282bbadaf832c0c403ae5e24947b7)) -- **tooltip:** TEHVEER-227 - Close HeaderRole with re-click on trigger ([fbaa63f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/fbaa63f9d50ba5f86b03304b4b03e26fa6e5e26e)) - -## [5.25.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.25.0...v5.25.1) (2023-10-30) - -### Bug Fixes - -- **select:** TEHVEER-225 - Fix select input not working with right click ([8cf7d94](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8cf7d94637d29903b295986bf772aed645307c03)) - -# [5.25.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.24.0...v5.25.0) (2023-10-27) - -### Features - -- **header:** TEHVEER-224 - Take HeaderBottom height into account when scrolling ([255f056](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/255f056ef0c94a6b91ac6ccbb58dd5e8352e3518)) - -# [5.24.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.23.0...v5.24.0) (2023-10-27) - -### Features - -- **common:** TEHVEER-220 - Switch debounce to lodash-es debounce ([59912f6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/59912f64d6c1aee2903530de631c525fe98c28fa)) -- **hide-on-scroll:** Added component to hide content when user scrolls ([8ea971c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8ea971cf094d77718ffa167044239d836cf5d7e8)) -- **table-of-content:** Turn table of contents into a navigation landmark ([9d0967a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/9d0967a85f65229f645218b0626d4e23bd76cd12)) - -# [5.23.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.22.2...v5.23.0) (2023-10-26) - -### Features - -- **affix:** TEHVEER-221 - Allow Affix to be relative to the header ([0d09c93](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0d09c930aacda49a06d25f40a368e982e0d2d688)) -- **common:** TEHVEER-218 - Unify z-index order across components ([6e757c6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6e757c6d3a1461dc6bb93216ece8c8d32d05ac11)) -- **table-of-contents:** TEHVEER-219 - Refactor table-of-contents to modal ([60dc19d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/60dc19d51bec650829a06780c22cb0c0ee9bb194)) -- **table-of-contents:** TEHVEER-221 - Added props to override modal behavior ([da70177](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/da701772655e2249fa3464a39a5ad1f5332e227f)) - -## [5.22.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.22.1...v5.22.2) (2023-10-24) - -### Bug Fixes - -- **toggle:** pass floating-ui onClick on Toggle button click - TEHVEER-196 ([b40cf22](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b40cf22f35273895d6123beba48269017d7065c0)) -- **toggle:** pass floating-ui onClick on Toggle button click - TEHVEER-196 ([6c2d545](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6c2d54575d5bd2908e334dcbe58105881dfb6632)) - -## [5.22.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.22.0...v5.22.1) (2023-10-24) - -### Bug Fixes - -- **tooltip:** TEHVEER-217 - useIsTouchDevice will not return true for jest tests ([0e6e96c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0e6e96c08e7ae8296f3190c566294e0873576aa8)) - -# [5.22.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.21.3...v5.22.0) (2023-10-24) - -### Features - -- **toggle:** Add ref to toggle button - TEHVEER-196 ([70a08b6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/70a08b62674abcd3b606f036747963df40375181)) - -## [5.21.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.21.2...v5.21.3) (2023-10-24) - -### Bug Fixes - -- **tooltip:** TEHVEER-217 - Re-enable mouse click on tooltip on desktop ([6b4ed13](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6b4ed13b4c451d2d35800f4991ba7ea6c6b213ae)) - -## [5.21.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.21.1...v5.21.2) (2023-10-24) - -### Bug Fixes - -- **tooltip:** TEHVEER-217 - Use click tooltips on touch devices by default ([e9c9a31](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e9c9a31746fa5b20e62dc9f5be70ad5965f7cfb6)) - -## [5.21.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.21.0...v5.21.1) (2023-10-23) - -### Bug Fixes - -- **header-navigation:** use linkAs prop from sidenavProps - TEHVEER-216 ([14af0e7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/14af0e749fe473621b1657acb87dff30ba60cd31)) - -# [5.21.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.20.0...v5.21.0) (2023-10-20) - -### Features - -- **header-dropdown:** Align HeaderDropdown with bottom of header - TEHVEER-215 ([32e5547](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/32e5547d88def0788d2c76ef6ed72b546dc5db27)) - -# [5.20.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.19.2...v5.20.0) (2023-10-20) - -### Features - -- **accordion:** TEHVEER-214 - Extract Heading from AccordionItemHeader to have valid HTML ([3962950](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3962950a2b0dd40dc4146a2d0ce1c085a096c242)) - -## [5.19.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.19.1...v5.19.2) (2023-10-18) - -### Bug Fixes - -- **select:** TEHVEER-213 - Allow navigation between items in multi select ([53337d0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/53337d05976ce473bc6b6e0d179c11ff0364dcdb)) - -## [5.19.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.19.0...v5.19.1) (2023-10-17) - -### Bug Fixes - -- **select:** TEHVEER-212 - Select options are now selectable with double tab on touch screenreaders ([d8f785f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d8f785f4ead29d4b964643f2fb230a3f27b2f70a)) - -# [5.19.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.18.4...v5.19.0) (2023-10-16) - -### Features - -- **tooltip:** TEHVEER-210 - Tooltip should always have click interaction ([96754e7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/96754e7d41efba85d154bfad05db6bb6787eac0e)) - -## [5.18.4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.18.3...v5.18.4) (2023-10-06) - -### Bug Fixes - -- **tooltip:** TEHVEER-208 - Have an accessibility label for icon as tooltip trigger ([f7006ae](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f7006ae3a5363675c90d8a3dc870c3e1fd8c9101)) - -## [5.18.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.18.2...v5.18.3) (2023-10-05) - -### Bug Fixes - -- **tabs:** TEHVEER-207 - preventDefault was too generic ([b95fe88](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b95fe88c3e53f34f00b5b42743589eaf994117eb)) - -## [5.18.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.18.1...v5.18.2) (2023-10-05) - -### Bug Fixes - -- Create a new release since 5.18.1 did not publish ([9a091bb](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/9a091bbd84568f82dc86dd797b9d71103162c7f1)) - -## [5.18.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.18.0...v5.18.1) (2023-10-05) - -### Bug Fixes - -- **tabs:** TEHVEER-207 - Prevent default for tabs keyboard navigation ([5c510fe](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5c510fedac582e8850c853bd02d075007d7a9cd0)) - -# [5.18.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.17.4...v5.18.0) (2023-10-05) - -### Bug Fixes - -- **header:** Separator vertical alignment on mobile ([e00f0b3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e00f0b3a2f1db3af4c73dd202f1b4534cda58c22)) -- **tabs:** Improve tabs accessibility by providing navigation with arrows ([a68230a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a68230af54b704761c146360c670d0ecd283055a)) - -### Features - -- **toggle:** Add visual label and extracontent - TEHVEER-203 ([dc7e57f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/dc7e57fcbff6ab60d1a306739e56913a99c51c14)) - -## [5.17.4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.17.3...v5.17.4) (2023-10-04) - -### Bug Fixes - -- **select:** TEHVEER-205 - Prevent select input blur to have correct accessibility on mobile ([175311c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/175311c036beb5d734ead2f4e33374770d0071bc)) - -## [5.17.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.17.2...v5.17.3) (2023-10-04) - -### Bug Fixes - -- **header:** TEHVEER-204 - Use callback for language change instead of built-in menu close ([397d93a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/397d93a5117c809e4c959fb686a4f4c19f129f63)) - -## [5.17.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.17.1...v5.17.2) (2023-10-03) - -### Bug Fixes - -- **header:** fix header adding duplicated childrens and not rendering anchor - TEHVEER-202 ([ee4a17d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ee4a17d20d5987781fc7f6611e456ef7ebc38810)) - -## [5.17.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.17.0...v5.17.1) (2023-10-02) - -### Bug Fixes - -- **select:** TEHVEER-200 - Use position fixed instead of portaling to get right focus order on menu ([b0a89b1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b0a89b13fc14c512fbd71d77365335b677194a3c)) - -# [5.17.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.16.0...v5.17.0) (2023-10-02) - -### Features - -- **modal:** TEHVEER-199 - Allow separate esc and backdrop click control ([80e4089](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/80e4089f6badd3b9c63fa539c1124e10459bea43)) - -# [5.16.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.15.0...v5.16.0) (2023-10-02) - -### Features - -- **header:** TEHVEER-197 - Allow closing of header dropdown after item click ([fa92f4d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/fa92f4d445bc095fd61fb5015d3bcfcf533cc118)) - -# [5.15.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.14.0...v5.15.0) (2023-09-25) - -### Bug Fixes - -- **placeholder:** placeholder wrapper can't be paragraph, to support buttons as children ([1babb79](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1babb7969768ff9f8ebff8d0064a5a85859ce6b8)) - -### Features - -- **dropdown:** add isDisabled state to items, change item from anchor to button - TEHVEER-195 ([e424b46](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e424b46094ea4c49a0660456f199da43d1ba4c2b)) - -# [5.14.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.13.0...v5.14.0) (2023-09-25) - -### Features - -- **table:** Add CustomRow possibility and defaultExpanded state - TEHVEER-194 ([44d2736](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/44d2736d6f1d77b56f9c4291b66c8e300d71f7c2)) - -# [5.13.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.12.0...v5.13.0) (2023-09-21) - -### Features - -- **vertical-progress:** Add new component VerticalProgress - TEHVEER-193 ([2a6565b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2a6565bc91aeb9bb6ac0c9b6aa612d5480f0a2e9)) - -# [5.12.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.11.0...v5.12.0) (2023-09-19) - -### Features - -- **table-of-contents:** Add table-of-contents - TEHVEER-187 ([6c4ee1a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6c4ee1ab59e8608be1446b4bbe705274a0e74a89)) - -# [5.11.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.10.1...v5.11.0) (2023-09-19) - -### Features - -- **card:** Add possibility to pass props per breakpoint - TEHVEER-191 ([532d43e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/532d43eddb8847b1cad65cfe7ccdcbfd13f75269)) - -## [5.10.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.10.0...v5.10.1) (2023-09-19) - -### Bug Fixes - -- **customize-table-cell:** TEHVEER-192- Fix old class names not removed from element ([e0535d4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e0535d4abd0c8f1a63c32d694da7520e354ad966)) - -# [5.10.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.9.0...v5.10.0) (2023-09-19) - -### Features - -- **card:** Add possibilty to change padding by card side - TEHVEER-188 ([52628e5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/52628e527334e9d331926517d3efd74c3873cd7b)) - -# [5.9.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.8.1...v5.9.0) (2023-09-19) - -### Features - -- **header:** UPP-953 - Fix small inconsistencies in header components and stories ([2f6568e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2f6568eba477d41ef780ac6c73cec910e13005a1)) - -## [5.8.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.8.0...v5.8.1) (2023-09-18) - -### Bug Fixes - -- **select:** UPP-953 - Fix select border color ([b6742e7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b6742e7e0b3655412176d26bf0a7723a59591463)) - -# [5.8.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.7.1...v5.8.0) (2023-09-18) - -### Features - -- **card:** Remove deprecated padding options and type property - TEHVEER-190 ([090dd80](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/090dd803f7b8a87a261282f1bfa55d135ddca821)) - -## [5.7.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.7.0...v5.7.1) (2023-09-18) - -### Bug Fixes - -- **customize-table-cell:** TEHVEER-189 - Fix error when providing multiple class names ([2760b4a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2760b4a656947db799f01344c7e192ff683a7ec8)) - -# [5.7.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.6.0...v5.7.0) (2023-09-12) - -### Features - -- **header-role:** UPP-953 - Add long role list example to header stories ([b444559](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b44455978cdba1fc07435cdc0e2859848007e124)) -- **header-role:** UPP-953 - Allow header role content scrollbar to be snug against the side ([80fc41f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/80fc41fa4ab615972d0628cf1db81820edec7bcc)) - -# [5.6.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.5.1...v5.6.0) (2023-09-08) - -### Features - -- **header:** UPP-953 - Change header role modal default background color to bg-muted ([3d367c2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3d367c276286ca4cb16b09af1b02451f7237601e)) - -## [5.5.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.5.0...v5.5.1) (2023-09-08) - -### Bug Fixes - -- **header:** UPP-953 - Not all dropdowns should have 0 padding ([a85fa22](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a85fa22948613275ff625f57636339c885eea825)) - -# [5.5.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.4.0...v5.5.0) (2023-09-07) - -### Features - -- **header:** UPP-953 - Remove padding from role modal/dropdown ([8db4742](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8db4742f9e8c5634b1041c9facbd9bdeff6aee74)) - -# [5.4.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.3.0...v5.4.0) (2023-09-06) - -### Features - -- **scroll-fade:** UPP-892 - Add 0 fadeSize option to scroll-fade ([268e905](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/268e905de6c219d60a5ee943474b5b773d2c2b82)) - -# [5.3.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.2.0...v5.3.0) (2023-09-04) - -### Features - -- **spinner:** Limit spinner colors and sizes - TEHVEER-186 ([8b2f29c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8b2f29c5e2a56a48f4bbedfe251d5c44df07c550)) - -# [5.2.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.1.0...v5.2.0) (2023-09-01) - -### Features - -- **spinner:** Create spinner - TEHVEER-186 ([02a0bbe](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/02a0bbe2a131bb29d191fb764733fea44b6ad95c)) - -# [5.1.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.0.1...v5.1.0) (2023-08-22) - -### Features - -- **notification:** update notification template, when there is no title - TEHVEER-183 ([ff8fea7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ff8fea73bcccbbbacdb9b34eb3dc46ef45de2cea)) - -## [5.0.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v5.0.0...v5.0.1) (2023-08-17) - -### Bug Fixes - -- **header-role:** Add missing export of HeaderRole ([276ba84](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/276ba844d08b32f1a68307e8d113811c121b2dd1)) - -# [5.0.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v4.6.0...v5.0.0) (2023-08-17) - -- Merge branch 'feature/TEHVEER-180-layout' into 'master' ([425e2c2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/425e2c256c58b700a253e24244b855be9d574dbc)) - -### Features - -- **new-layout:** Rework layout and Header logic, apply new design - TEHVEER-180 ([0b2e933](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0b2e933fe73db871668c7133b45e681463e72850)) - -### BREAKING CHANGES - -- Layout and Header structure is different. Look Layout overview and Header overview for more info. - See merge request tehik-react/tehik-react-components!186 -- **new-layout:** Layout and Header structure is different. Look Layout overview and Header overview for more info. - -# [4.6.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v4.5.0...v4.6.0) (2023-08-15) - -### Features - -- **toast:** UPP-961 - Move default toast to right, increase timeout to 6s ([ab54dd1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ab54dd100d5b7fdbbbb4bb06ba5dd68894e7f93a)) - -# [4.5.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v4.4.0...v4.5.0) (2023-08-14) - -### Features - -- **tooltip:** Add tooltip with cardBorder and arrow stoke - TEHVEER-180 ([37c674d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/37c674d8a1d403733995c7d0379bbd3456a29978)) - -# [4.4.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v4.3.0...v4.4.0) (2023-08-14) - -### Features - -- **card:** add border radius false option, rework utility - TEHVEER-180 ([0ae679a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0ae679a969819d80a625862dfa359df3d4498e68)) -- **list:** Add List and ListItem components - TEHVEER-180 ([6b43f19](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6b43f1954598f30c8146f11556e431f9ca87143e)) - -# [4.3.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v4.2.0...v4.3.0) (2023-08-10) - -### Features - -- **card:** Deprecated type property,add border & borderless,change padding... ([f774351](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f774351531cf0dabcf36954cc51ab25789a0fc42)) - -# [4.2.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v4.1.0...v4.2.0) (2023-08-10) - -### Features - -- **tooltip:** wrap tooltip content with Card, simplify arrow logic ([fc251ae](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/fc251ae22bf6f7eee1d609c7acc070f455d3fe19)) - -# [4.1.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v4.0.0...v4.1.0) (2023-08-08) - -### Features - -- **icon:** Add color prop to Icon ([6cff4be](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6cff4be64319d6704f823e05e0360affb7918e45)) - -# [4.0.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.42.2...v4.0.0) (2023-08-07) - -### Features - -- **background-colors:** - Remove depracted bg-colors - TEHVEER-52 ([84da3f2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/84da3f2d9197ca8fed8a31674042d3c67203e08f)) -- **button:** Depracted error nad success colors ([0361856](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/036185687539eab806d5ff56ebac37a4c99ca742)) -- **button:** Remove deprecated classNameIcon prop - TEHVEER-52 ([3c9314c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3c9314c99882ae4391bce14f7ba48fadbf20ff37)) -- **card-header:** Remove deprecated style prop - TEHVEER-52 ([b6727e1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b6727e134b67ece3f0afd38a378d13563fabb4de)) -- **collapse:** Remove deprecated heading prop - TEHVEER-52 ([f4b5108](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f4b5108d17f141bf5c43274aa438433ea199f916)) -- **footer:** Remove deprecated links property from FooterCategory - TEHVEER-52 ([c4e0c33](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c4e0c337f2881076d68ff2e1212fc18a6f463770)) -- **header:** Remove deprecated hideToggle - TEHVEER-52 ([b2e6d0a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b2e6d0a5e8cc2260dae07a09ed4610d742c29e95)) -- **heading:** Remove deprecated level property - TEHVEER-52 ([33b242d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/33b242d4be0ece006e022d783205bd0aa6241f6d)) -- **Tag:** Depracted primary-accent nad success colors ([45f1368](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/45f1368c7b3a0c3858eb4c0f470b563fd0ffc256)) -- **textfield:** Remove deprecated classNameIcon prop - TEHVEER-52 ([1289bad](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1289bade364403bf54d80472b4681ba6e3a31bdf)) -- **typography:** Remove old global css classes - TEHVEER-52 ([503b7b4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/503b7b4c02645b83cf5bcef4804a36a68a47341e)) - -### BREAKING CHANGES - -- **Tag:** Depracted primary-accent nad success colors. - Use "positive" and "accent" instead! -- **button:** Depracted error nad success colors. - Use color important & positive instead! -- **typography:** Remove deprecated classes: -- text-black -> text-default -- text-secondary -> text-muted -- text-white -> text-inverted -- text-success -> text-positive -- text-error -> text-important -- inactive -> Removed! -- **heading:** Remove deprecated level property. - Use element property instead. -- **header:** Should be okay to just remove. - When no navItems for sideNav are defined, then we hide the toggle anyway. -- **footer:** links prop removed from FooterCategory - Use elements property instead, need to pass Anchor elements from now, if links are wanted! -- **textfield:** classNameIcon prop removed - Pass an IconProps object to icon instead! -- **collapse:** style prop removed - replace with title! -- **card-header:** style prop removed - replace with variant! -- **button:** classNameIcon prop removed - Check slack for more info! - -## [3.42.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.42.1...v3.42.2) (2023-08-07) - -### Bug Fixes - -- **footer:** TEHVEER-169 - mark footer heading element as headings ([e115d98](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e115d98881b9b3266ce27a10300398b5d4a84e9d)) - -## [3.42.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.42.0...v3.42.1) (2023-08-07) - -### Bug Fixes - -- **form-helper:** TEHVEER-170 - add aria role for all valid and error formHelper types ([5949996](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/594999631155736dc4f8af6a950f21271de6ed8c)) - -# [3.42.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.41.2...v3.42.0) (2023-08-07) - -### Features - -- **stepper:** Add possibilty to allowStepLabelClick as 'completed' | 'completed-next' - TEHVEER-172 ([5ecd2d6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5ecd2d67de3935913c3d2f1df7e7eebd2267768c)) - -## [3.41.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.41.1...v3.41.2) (2023-08-07) - -### Bug Fixes - -- **separator:** unify dot size from figma, simplify examples - TEHVEER-177 ([a555f87](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a555f87e4fc6986cb1dedfcee28c31183490ad74)) - -## [3.41.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.41.0...v3.41.1) (2023-08-02) - -### Bug Fixes - -- **choice-group:** TEHVEER-174 - fix choice group type filter to be selectable with keyboard ([c25139c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c25139cb018309eb0de961e2165f4dc1f5c73542)) - -# [3.41.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.40.1...v3.41.0) (2023-08-01) - -### Features - -- **colors:** Update text and border-contrast colors - TEHVEER-178 ([aac17a4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/aac17a4ab2fc200c022ac2a0812226e7cb65f00a)) - -## [3.40.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.40.0...v3.40.1) (2023-08-01) - -### Bug Fixes - -- **scss:** TEHVEER-176 - remove html font size ([e652115](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e652115da737aa32bd6c4b9fbd716c261a4551ee)) - -# [3.40.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.39.2...v3.40.0) (2023-08-01) - -### Features - -- **accordion:** TEHVEER-173 - set tabIndex -1 to open and close buttons, if provided ([eb31bab](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/eb31babd312548527b639d15e52dd9e514da9058)) - -## [3.39.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.39.1...v3.39.2) (2023-08-01) - -### Bug Fixes - -- **stepper:** TEHVEER-171 - fix screenreader problems in stepper navigation ([b53c527](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b53c52735d770b4607e173e1226fa180674accf3)) - -## [3.39.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.39.0...v3.39.1) (2023-08-01) - -### Bug Fixes - -- **choice-group:** Fix selector column visual & stories - UPP-679 ([40755d4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/40755d4688497d6b19ab94c44951d83da2622a45)) - -# [3.39.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.38.3...v3.39.0) (2023-07-31) - -### Features - -- **choice-group:** UPP-679 - Add direction prop ([9d5b0db](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/9d5b0dbb3b73775c0c583fac5bc81590b4597211)) - -## [3.38.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.38.2...v3.38.3) (2023-07-03) - -### Bug Fixes - -- **sidenav:** TEHVEER-164 - aria-current not in the DOM for active page ([cc9db4d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/cc9db4de663fc7b04073963134ee055de2b7a9a8)) - -## [3.38.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.38.1...v3.38.2) (2023-07-03) - -### Bug Fixes - -- **sidenav:** TEHVEER-164 - Fix a problem with sidenav focus on mobiles ([be5b2c4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/be5b2c4988a9ba16f50554d3c44a26c49b217662)) - -## [3.38.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.38.0...v3.38.1) (2023-06-29) - -### Bug Fixes - -- **card:** fix card background not reverting border radius ([524e76a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/524e76a31312bbe0dbfd8ad64cefe344939d9a35)) - -# [3.38.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.37.1...v3.38.0) (2023-06-27) - -### Features - -- **text:** Add inline variants for text component ([2b8de79](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2b8de798eb5b66093cac6a8864230ff3b8999b93)) - -## [3.37.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.37.0...v3.37.1) (2023-06-20) - -### Bug Fixes - -- **build:** Fix css index file name ([69b6e5f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/69b6e5ffa6edf164f933e054a97efb225a7540c5)) - -# [3.37.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.36.0...v3.37.0) (2023-06-20) - -### Features - -- **common:** Fix a couple of html validation errors ([18b2313](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/18b231348b79a86f567a0116e0a587cb53719fdb)) - -# [3.36.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.35.0...v3.36.0) (2023-06-20) - -### Features - -- **button:** Deprecate Error and Success colors, use positive and important instead - TEHVEER-154 ([0cf3962](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0cf396299f20053182a63f1daf2b69e5c4d51385)) - -# [3.35.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.34.1...v3.35.0) (2023-06-19) - -### Features - -- **tag:** Remove small size, visual design changes - TEHVEER-160 ([94d29f7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/94d29f7d74209e7ed022d5d8a090c16cadd04a30)) - -## [3.34.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.34.0...v3.34.1) (2023-06-19) - -### Bug Fixes - -- **floating-ui:** Fix elements not positioned right with floating-ui ([1d21eff](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1d21effbe141c8d0d5d3c456dbd3972c045470e4)) -- **floating-ui:** Fix elements not positioned right with floating-ui ([bc0d75f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/bc0d75fffac970a7b160ccd44fc51c76dfb9ead7)) -- **stories:** Remove duplicates of default stories ([bb5fa9a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/bb5fa9ac0e7d566668dde825611d6954baf8f1fa)) - -# [3.34.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.33.0...v3.34.0) (2023-06-19) - -### Features - -- **focus:** Update inverted focus color to primary-highlight - TEHVEER-144 ([368877b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/368877b39891aa7a665e09aceaf48dac36c4353c)) - -# [3.33.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.32.0...v3.33.0) (2023-06-15) - -### Features - -- **toast:** add possibilty to pass toastOptions to sendNotification ([45af8d6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/45af8d619cbb89a4873642c2567cf8936a1804d8)) - -# [3.32.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.31.1...v3.32.0) (2023-06-14) - -### Features - -- **text:** Add break-spaces modifier for Text component ([28f9f1e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/28f9f1ee34325db794256e1bfa19a2600b126145)) - -## [3.31.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.31.0...v3.31.1) (2023-06-12) - -### Bug Fixes - -- **vertical-spacing, separator:** Add 5em spacing option ([a3d22ea](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a3d22eac1f72a23e9778a3963c7797d844b82b99)) - -# [3.31.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.30.0...v3.31.0) (2023-06-12) - -### Features - -- **vertical-spacing:** Add 5em spacing option ([b8d34a6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b8d34a62c8bf706321488015d51132e101639617)) - -# [3.30.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.29.0...v3.30.0) (2023-06-09) - -### Features - -- **skeleton:** TEHVEER-157 - Skeleton loading accessibility ([2bb3c96](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2bb3c9649dea55c092efe3dc0f734851a0552a6f)) - -# [3.29.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.28.1...v3.29.0) (2023-06-07) - -### Features - -- **select:** TEHVEER-158 - update select to add possibility to edit async results ([b081888](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b081888814d1a8d4601496bca99bb6c0ad68ef6b)) - -## [3.28.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.28.0...v3.28.1) (2023-06-07) - -### Bug Fixes - -- **tokens:** Fix primary-highlight hex values - TEHVEER-161 ([4c126e6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/4c126e620b2a1da0eae73322bb8a5ce8654179a8)) - -# [3.28.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.27.0...v3.28.0) (2023-06-02) - -### Features - -- **breadcrumbs:** TEHVEER-155 - Improve breadcrumbs accessibility ([c5e60eb](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c5e60eb0e6a84a3812c1fc68ef4beafa7f8fbb36)) - -# [3.27.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.26.0...v3.27.0) (2023-06-02) - -### Features - -- **anchor:** TEHVEER-156 - Added accessibility label for new tab anchors ([dad3a1a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/dad3a1a3fd40f9d79f2800b53fbd2b87c4bddbae)) - -# [3.26.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.25.3...v3.26.0) (2023-05-29) - -### Features - -- **button:** Add tertiary type buttons - TEHVEER-151 ([e78ee86](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e78ee86943a907094432908c8b89461769af5dcc)) -- **button:** Upadate button icon spacings - TEHVEER-151 ([be39407](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/be394075ada9aa4e0d61f58401e6d34204c8ace6)) - -## [3.25.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.25.2...v3.25.3) (2023-05-23) - -### Bug Fixes - -- **anchor:** fix ancor as buttons alignment - TEHVEER-149 ([6b6af6c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6b6af6c0e6760cebcee854868228daed5bd3df5f)) - -## [3.25.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.25.1...v3.25.2) (2023-05-23) - -### Bug Fixes - -- **button:** Fix button loading animation not centered - TEHVEER-149 ([2da25ad](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2da25ad106abdad462919e27dfec942709ce17d9)) -- **button:** Fix loading button hover and cursor - TEHVEER-149 ([1eefd9e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1eefd9e130cf6c4bcca12d3539a2e6f58ae98932)) - -## [3.25.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.25.0...v3.25.1) (2023-05-23) - -### Bug Fixes - -- **button:** Fix link button height - TEHVEER-148 ([9231ddd](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/9231dddadeb08bef0bd47dcca88ba41e860f8a77)) - -# [3.25.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.24.0...v3.25.0) (2023-05-23) - -### Features - -- **button:** Increase deafult and small button size - TEHVEER-148 ([e00e3c7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e00e3c75dab9f8242b88bda61fd42b366aa2eb9c)) -- **button:** Increase deafult and small button size - TEHVEER-148 ([5288b2a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5288b2aab17f8becff81df3a090761c85369ca6c)) - -# [3.24.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.23.0...v3.24.0) (2023-05-23) - -### Features - -- **button:** Fix WGAC contrast issues with secondary and inverted buttons - TEHVEER-147 ([a90ceb0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a90ceb0ad5636d7983cac11115b664d797bfe1b4)) - -# [3.23.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.22.0...v3.23.0) (2023-05-22) - -### Bug Fixes - -- **dcoker_build:** Test with 23.0.5-dind docer ([993c17b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/993c17bcaf4635b2f716d8dac24023b1199ac674)) -- **docker:** Test DOCKER_HOST variable disable inside pipeline ([2d80893](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2d808935d5ec7925990b2389beba8c0facba1139)) -- **vertical-spacing:** Fix margin-bottom when wrapped with VerticalSpacingItem - TEHVEER-146 ([39d3808](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/39d3808371ce3392a00a99d193112670e1728a0c)) - -### Features - -- **bg-colros:** Update possible background colors - TEHVEER-143 ([4bd35a5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/4bd35a51df454b5909b9e52759d143328139b68c)) -- **typography:** Update line-heights from design - TEHVEER-145 ([7565b19](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7565b1988da4b1a2143b649a5064644f8864e6f8)) - -# [3.22.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.21.2...v3.22.0) (2023-05-18) - -### Features - -- **header:** UPP-619 Add possibility to use bottomContent for when things won't fit in header ([b7337b6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b7337b60c98d89e8bcd8c8f311f03bf22da180e0)) - -## [3.21.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.21.1...v3.21.2) (2023-05-16) - -### Bug Fixes - -- **k8s:** Test k8s deploy. ([a65cd48](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a65cd486d883e12b33b968234d119e77efa81138)) - -## [3.21.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.21.0...v3.21.1) (2023-05-16) - -### Bug Fixes - -- **k8s:** Test k8s deploy. ([2131eb1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2131eb17029e1e980538af79e00b48b890239819)) - -# [3.21.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.20.0...v3.21.0) (2023-05-16) - -### Features - -- **k8s:** Added publish to TEHIK k8s. ([b967f3f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b967f3f5154eeeda1d69403c379a3559af300bbc)) - -# [3.20.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.19.0...v3.20.0) (2023-05-16) - -### Bug Fixes - -- **docker:** Test docker build ([11d4100](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/11d410067789bfb3ce7b1d4e30caa6624b4d845d)) -- **docker:** Test docker build ([2ab65af](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2ab65affffa3665a0f3411c3e7d9ac3fa9efe87d)) -- **docker:** Test docker build ([278766b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/278766b1007b68b4ce687595fc2799c8a14a447b)) - -### Features - -- **docker:** Added storybook docker build ([1747bd0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1747bd05d76896503c0c802b40ef5c882ec4b7a7)) - -# [3.19.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.18.0...v3.19.0) (2023-05-10) - -### Features - -- **button:** TEHVEER-141 - Added formNoValidate prop to button ([63cff01](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/63cff012a03c012e9abfa7faaf6f510a21e55df4)) -- **button:** TEHVEER-141 - Added general form story for validation ([7c86853](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7c86853fbd5792014e4f2c5b8092824c6a1a9094)) - -# [3.18.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.17.1...v3.18.0) (2023-05-10) - -### Features - -- **table:** Add possibilty to pass ChoiceGroupItems to tableFilter - TEHVEER-142 ([cf1f277](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/cf1f277ea0de7fad0199414d1371d1372ceac890)) - -## [3.17.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.17.0...v3.17.1) (2023-05-10) - -### Bug Fixes - -- **button-loader:** Fix strokeWidth property typo - TEHVEER-140 ([a371551](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a371551e0d487dc5c851a22a5665edf3d53661bc)) -- **toast:** Do not pass react-toastify props to Notification component ([6c2e27b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6c2e27b2c2170ff415359b6a1fbcc3f88e11c3c3)) - -# [3.17.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.16.1...v3.17.0) (2023-05-10) - -### Features - -- **button:** Add loading state to button - TEHVEER-140 ([bf6b6e0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/bf6b6e094414619affc58afecb4bf7fd002982d8)) -- **button:** Add loading state to button - TEHVEER-140 ([7aff951](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7aff9517e3e3abee719a0d4fd4f580e06779f47a)) - -## [3.16.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.16.0...v3.16.1) (2023-05-09) - -### Bug Fixes - -- **table:** active sort icon color - TEHVEER-139 ([d640777](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d640777b211cd4bdd079a49d46296c0afe5072fd)) - -# [3.16.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.15.0...v3.16.0) (2023-05-09) - -### Features - -- **sidenav:** UPP-619 Fix problem with sidenav being behind content ([45151ab](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/45151ab38ba8a183980b68237960de04393320f1)) - -# [3.15.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.14.2...v3.15.0) (2023-05-09) - -### Features - -- **validateChildren:** Remove validateChildren - TEHVEER-76 ([f1e68de](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f1e68deb6ad16aeca891b8e74330f23a8d1f0a7a)) -- **validateChildren:** Remove validateChildren from Row and Card - TEHVEER-76 ([42b7ccd](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/42b7ccdeee4a40bc39eac842e7ee81fab58408ac)) -- **validateChildren:** Remove validateChildren from Row and Card - TEHVEER-76 ([124b917](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/124b917c8359a9059b28054a7d098e75dc38fb10)) - -## [3.14.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.14.1...v3.14.2) (2023-05-08) - -### Bug Fixes - -- **choice-group:** TEHVEER-138 - Send correct value through the choice-group onChange callback ([e0c171e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e0c171e51ba4160bf81f23b6a824ac08ff6b9b37)) - -## [3.14.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.14.0...v3.14.1) (2023-05-08) - -### Bug Fixes - -- **pickers:** TEHVEER-137 - Pass input prop to TextField inside pickers ([583d6b2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/583d6b22f5e194bab6a5fde166523651ce518f33)) - -# [3.14.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.13.0...v3.14.0) (2023-05-08) - -### Features - -- **section:** Layout padding in md bp to 1.5rem to fit feedback ([31c3f8f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/31c3f8f28b4a4c3359fdbd48927eabc25bdb9474)) - -# [3.13.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.12.2...v3.13.0) (2023-05-08) - -### Features - -- **header:** TEHVEER-136 - Translate header logo alt attribute ([fc7749a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/fc7749ac97ba5cf7db991e8e38be7bb887eceed0)) - -## [3.12.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.12.1...v3.12.2) (2023-05-08) - -### Bug Fixes - -- **table:** TEHVEER-135 - New table filter empty state and support for wider filter ([74dca2a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/74dca2ad445ba97fd0f132061f4b989ca50dbda6)) - -## [3.12.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.12.0...v3.12.1) (2023-05-08) - -### Bug Fixes - -- **icon:** TEHVEER-134 - Add correct role to icon component ([b1fcb33](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b1fcb33a0fdb7f7f19a35c9d02d3865b2a2097a6)) - -# [3.12.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.11.0...v3.12.0) (2023-05-08) - -### Bug Fixes - -- **formhelper:** TEHVEER-126 - Link FormHelper with inputs ([5e30b19](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5e30b19fbbe8dcda2cd31034e08ddab62562d28e)) -- **table:** TEHVEER-126 - Allow filters to be focusable ([193d6bb](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/193d6bba6ea4c57dfd65f8b026873a1573cd1442)) - -### Features - -- **choice-group:** TEHVEER-126 - Added indeterminate option to choice-group ([bb1cd40](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/bb1cd40e841939e16c337c2468293f724912d12f)) -- **table:** TEHVEER-126 - Added caption prop for accessibility ([d26c000](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d26c0009e7bc21b8dd3e9f8c21f8ef3362fc5937)) -- **table:** TEHVEER-126 - Changed tabel filters logic ([89cd7ef](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/89cd7ef6e81487bb7d73459006ba211e9dfbd724)) - -# [3.11.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.10.0...v3.11.0) (2023-05-05) - -### Features - -- **input:** TEHVEER-129 - Improve input accessibility ([dfe4bf0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/dfe4bf0706e921453ca065b267abca51657da1a0)) -- **select:** TEHVEER-131 - Blur input only for mobile devices ([96fc72c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/96fc72c75c6229d294cf1eed6f15afe7cb3f6ff7)) - -# [3.10.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.9.0...v3.10.0) (2023-05-05) - -### Features - -- **icon:** TEHVEER-91 - Hiden icons from screen-readers when label is not used ([e5cf9c7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e5cf9c7634da2d5d86b99a414a3a48a4d8c7ff2c)) -- **notification:** TEHVEER-128 - Add alert role to notification component ([24a8e61](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/24a8e61f963072a6d7f3a3ca44e79ec9407a43a5)) - -# [3.9.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.8.1...v3.9.0) (2023-04-28) - -### Features - -- **header:** UPP-619 Make border part of logout button and remove duplicate button ([c62a970](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c62a970fe2b3f0d9c2ae3dfc3cac5dcdc7867633)) - -## [3.8.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.8.0...v3.8.1) (2023-04-26) - -### Bug Fixes - -- **check, raido:** Add indicator background color - TEHVEER-124 ([00416fe](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/00416fe6d995da3b1eed6a6a6627dd5198458816)) - -# [3.8.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.7.0...v3.8.0) (2023-04-26) - -### Features - -- **stepper:** Add deafultActiveStep, allowStepLabelClick, hover and focus styles - TEHVEER-123 ([c2b076d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c2b076d7da369b9bddb740220e7649db70280a1b)) - -# [3.7.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.6.1...v3.7.0) (2023-04-25) - -### Features - -- **footer:** UPP-620 Allow using elements in footer heading ([934912c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/934912c8e4287d783ad6ec85bbaf0574b4e5beaa)) - -## [3.6.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.6.0...v3.6.1) (2023-04-25) - -### Bug Fixes - -- **table:** Fix table sorting and filter icon alignment - TEHVEER-118 ([3423984](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3423984c868f30c3f5e711759db017c93f045866)) - -# [3.6.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.5.0...v3.6.0) (2023-04-25) - -### Features - -- **footer:** TEHVEER-104 - add option to add text to footer and a darker bottom row ([96a1ba7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/96a1ba7677dbeda8190b73d3423e50315a992a7c)) -- **footer:** UPP-620 Change category alignment in desktop mode ([c290d39](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c290d39b7c5b21ed415b089c19ab5bfe3c3c9399)) -- **footer:** UPP-620 Fix merge conflicts and clean up code ([113126c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/113126c36f1e57344cce71d654712b2f9bf36207)) - -# [3.5.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.4.0...v3.5.0) (2023-04-25) - -### Features - -- **stepper:** Add card variant possibilty - TEHVEER-107 ([27ec429](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/27ec4295cb0204141e211fbe2c7ba0d14f508346)) -- **table:** Change sort and filter icon color - TEHVEER-118 ([5d86ace](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5d86ace831e53b539baaff9bdb4a5fab7362ccf5)) - -# [3.4.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.3.2...v3.4.0) (2023-04-24) - -### Features - -- **general:** PR Fixes ([90c7db2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/90c7db285d788a805bfe1536e862e3ba82b2d61a)) -- **general:** Revert mui/x-date-pickers update ([e4852a6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e4852a6757c32db90faaac66b5f8d37422c53106)) -- **general:** Update package versions, mainly storybook and MUI ([dcefea3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/dcefea3ed5f4ff6f2f454f91864951c2ca4dc4c4)) - -## [3.3.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.3.1...v3.3.2) (2023-04-24) - -### Bug Fixes - -- **toggle:** Toggle design fixes - UPP-557 ([a387556](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a38755667a847bd2887cbe3bdebb23a208c6a26b)) - -## [3.3.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.3.0...v3.3.1) (2023-04-19) - -### Bug Fixes - -- **table:** Fix table showing 10000 rows loading, when isLoading & hidePagination are true ([6b7279d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6b7279d0cf4b0cd3bc862efcf96aad8af8f32da8)) - -# [3.3.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.2.0...v3.3.0) (2023-04-19) - -### Features - -- **text:** TEHVEER-117 - Allow rendering of h1-h6 tags ([45d6c7c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/45d6c7c6d832bfcdf7ee1bf8ae478280fd71a41e)) - -# [3.2.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.1.0...v3.2.0) (2023-04-18) - -### Features - -- **separator:** Add border contrast color - TEHVEER-115 ([5af29b2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5af29b2b29d258d1a6fa07ec4c581d54b79ec11a)) - -# [3.1.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.0.4...v3.1.0) (2023-04-18) - -### Features - -- **sidenav:** TEHVEER-114 - Sync sidenav and header design with figma ([2e5c0cc](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2e5c0cc6807968e37e76cc1e0cc0da0f133b458a)) - -## [3.0.4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.0.3...v3.0.4) (2023-04-12) - -### Bug Fixes - -- **sidenav:** remove unused allowedPrivileges property ([fca9580](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/fca9580ee36e18fc8e885ba0702bb0a707e6ca82)) - -## [3.0.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.0.2...v3.0.3) (2023-04-11) - -### Bug Fixes - -- **scroll-fade:** Move scroll-fade to new variables - TEHVEER-112 ([12f2948](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/12f2948d3dfe3fc3f198ba9f2de7a31e388ec9ab)) - -## [3.0.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.0.1...v3.0.2) (2023-04-10) - -### Bug Fixes - -- **skeleton:** Move skeleton to new variables - TEHVEER-112 ([3e1e6f5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3e1e6f552444648acb15d767c829423e84816c74)) - -## [3.0.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v3.0.0...v3.0.1) (2023-04-06) - -### Bug Fixes - -- hide addons on tokens documentation ([5cff201](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5cff201ddeb4506befc1a952c4d3488eae20ac3d)) - -# [3.0.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.26.2...v3.0.0) (2023-04-06) - -### Features - -- **colors:** :art: Implement new color variables, delete old ones ([14a2c0f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/14a2c0fe066a2f6171e3297d459f61a6fb6bfb3f)) - -### BREAKING CHANGES - -- **colors:** New color-tokens implemented, check slack for more info! -- **colors:** New color-tokens implemented, check slack for more info! - -## [2.26.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.26.1...v2.26.2) (2023-04-06) - -### Bug Fixes - -- **button:** Move button to new variables, fix disabled hover - TEHVEER-112 ([66b1191](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/66b1191795a6ac63aacf1caf97f379e248442e41)) - -## [2.26.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.26.0...v2.26.1) (2023-04-05) - -### Bug Fixes - -- **label-provider:** Fix label-provider failing in unit tests ([1c91bf8](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1c91bf85f60f7a6287fcf1fe270b3e5b994b97d2)) - -# [2.26.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.25.1...v2.26.0) (2023-04-05) - -### Features - -- **typography:** Add helper typography component, use new variables, deprecate old classes - TEHVEER-111 ([c0b808c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c0b808cd0eb43b166a0604dfdf54d0b9a9e02d88)) - -## [2.25.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.25.0...v2.25.1) (2023-04-03) - -### Bug Fixes - -- **label-provider:** Do not log errors when test env - TEHVEER-98 ([0a9996f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0a9996fc2091fece30c7f22a0c0de5d49ea4183d)) -- **svg:** Remove overall svg height and width from base.scss ([8f85831](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8f858312cd6aface43e10d2ec73c4a97567d7553)) -- **validateChildren:** Remove mocking console.log from validateChildren ([75f8038](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/75f803851ada1968dcd533183cc27d2cc0622b54)) - -# [2.25.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.24.0...v2.25.0) (2023-04-03) - -### Features - -- **toggle:** Add new sizes, type, color to toggle - TEHVEER-108 ([d869204](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d86920409dc0e9dbda0dbe0d5c0013e7e22f483d)) - -# [2.24.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.23.5...v2.24.0) (2023-03-28) - -### Features - -- **table:** Add error state placeholder - TEHVEER-109 ([adc88a4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/adc88a4e3a17689df648cb2c6504dee350945a8e)) - -## [2.23.5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.23.4...v2.23.5) (2023-03-17) - -### Bug Fixes - -- **table:** fix table pagination logic and design to match figmas - TEHVEER-106 ([41b96cb](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/41b96cb62ef2d0cb9119c307826846a095c9ed19)) -- **table:** fix table pagination logic and design to match figmas - TEHVEER-106 ([157df0e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/157df0ed6a5eabb113fba8d9a973908470f9a1da)) -- **table:** fix table pagination logic and design to match figmas - TEHVEER-106 ([cfb9905](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/cfb9905529283296de9b3efc3125f304285270ce)) -- **table:** generate better data for table stories - TEHVEER-105 ([bc66722](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/bc6672289520d3344d1586ba2b70bc59fa9df94f)) - -## [2.23.4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.23.3...v2.23.4) (2023-03-16) - -### Bug Fixes - -- **table:** fix sorting and filtering button alignment - TEHVEER-105 ([861f093](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/861f093499961a0de541d91f585d568383b4b34c)) - -## [2.23.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.23.2...v2.23.3) (2023-03-16) - -### Bug Fixes - -- **collapse:** TEHVEER-100 - support button text alignment ([f8f9897](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f8f989789d50b8d32c1a53e7f945f05b0f11716b)) - -## [2.23.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.23.1...v2.23.2) (2023-03-16) - -### Bug Fixes - -- **select:** TEHVEER-102 - fix selected item text color ([153bdf8](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/153bdf81c5faa878b1850dfca6a97facb99919e0)) - -## [2.23.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.23.0...v2.23.1) (2023-03-14) - -### Bug Fixes - -- **separator:** TEHVEER-99 - fix dotted separator dot positions ([726741b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/726741b54deec628d13e00538047c4da748daf33)) - -# [2.23.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.22.1...v2.23.0) (2023-03-13) - -### Features - -- **select:** TEHVEER-94 - add blurInputOnSelect to select ([7ea99c8](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7ea99c87fc467f473064301077bf7db7363907eb)) - -## [2.22.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.22.0...v2.22.1) (2023-03-13) - -### Bug Fixes - -- **layout:** TEHVEER-97 - support small screens ([c91189f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c91189f5900af26cee65e0d1a4d4d2504d47b7a1)) - -# [2.22.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.21.5...v2.22.0) (2023-03-12) - -### Features - -- **affix:** Add Affix component - TEHVEER-67 ([57af369](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/57af36945217a8feb39660a64d3751ea44c42218)) - -## [2.21.5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.21.4...v2.21.5) (2023-03-10) - -### Bug Fixes - -- **layout:** TEHVEER-95 - change layout min-width to 320px ([b486253](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b48625309a3af9332931e6b2dc15d7b671e09fb4)) - -## [2.21.4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.21.3...v2.21.4) (2023-03-08) - -### Bug Fixes - -- **card:** Remove unused styles ([3513dba](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3513dba53aa791154968484fe3ef7a0e28561b4c)) -- **classNameIcon:** Change deprecated prop ([e62378c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e62378c5d36c7692091e62a499d4124d28d77259)) -- **collapse:** fix button colors ([307c1a7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/307c1a7f1f7cc37373249bb5bf9ef5bc9b01317b)) -- **dropdown:** Use variable not hex ([0da3e04](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0da3e042974c89ed08059ceb1ee1fd6864fad579)) -- **no-release:** Fix color style issues ([a0da30d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a0da30df0571c7ea23b062f64a5c73e64098bd50)) -- **select:** remove variable not defined ([0047614](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/00476142bf361631c6cd694d57abf4ee821c56db)) -- **sidenav:** sync item bg-color on hover ([4c54193](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/4c54193ce604e86b657614cfa33b0788a148e4b0)) - -## [2.21.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.21.2...v2.21.3) (2023-03-06) - -### Bug Fixes - -- **tooltip-trigger:** do not overwrite button and link cursor when wrapped in trigger - TEHVEER-92 ([5018b9a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5018b9a521d053cde1d8ad24fcd9c0c090146d6b)) - -## [2.21.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.21.1...v2.21.2) (2023-03-03) - -### Bug Fixes - -- **datepickers:** TEHVEER-90 - Fix double scroll on year picker view ([a21ca0d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a21ca0df81e20dbe879b06848caefd23b23532d8)) - -## [2.21.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.21.0...v2.21.1) (2023-03-02) - -### Bug Fixes - -- **ScreenLayout:** TEHVEER-89 - rename Layout to ScreenLayout ([f33f204](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f33f204356be206c3ad058d8ba6b7877e745f6b5)) - -# [2.21.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.20.1...v2.21.0) (2023-03-02) - -### Features - -- **card:** TEHVEER-88 - add paddings to card header ([98132c1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/98132c14aff844dd48dad43d16b60ef5c190711c)) - -## [2.20.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.20.0...v2.20.1) (2023-03-01) - -### Bug Fixes - -- **scroll-fade:** TEHVEER-87 - add height 100% to scroll-fade\_\_inner ([8cb55a1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8cb55a1b304966d2c411d019918db981fc4732ec)) - -# [2.20.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.19.2...v2.20.0) (2023-02-28) - -### Features - -- **modal:** TEHVEER-82 - add interaction props to modal ([47a8ad1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/47a8ad174eb5ad6a4c00ea92e26bbb5b5bbcca6c)) - -## [2.19.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.19.1...v2.19.2) (2023-02-28) - -### Bug Fixes - -- TEHVEER-80 - Trigger publish-storybook when pushing changelog update ([599c5fe](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/599c5fe02f118fdadc944eb9a97efbe1c91a3694)) - -## [2.19.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.19.0...v2.19.1) (2023-02-28) - -### Bug Fixes - -- **accordion:** TEHVEER-86 - fix accordion padding to match figma ([eac3eb7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/eac3eb786b52d2ce8b2b99da6a748d6970db424e)) - -# [2.19.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.18.0...v2.19.0) (2023-02-28) - -### Features - -- **stepper:** TEHVEER-85 - improve stepper navigation mobile and tablet view ([bdec984](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/bdec9847c04634a6e0868f749805476961eb4f4a)) - -# [2.18.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.17.0...v2.18.0) (2023-02-28) - -### Features - -- **modal:** TEHVEER-82 - Add persistent modal prop ([7fe3bb4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7fe3bb4e0ee48d3498efbf1cdf0fea960f105850)) - -# [2.17.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.16.0...v2.17.0) (2023-02-27) - -### Features - -- **breadcrumbs:** TEHVEER-83 - Added useLayout hook and switch to minimal breadcrumbs on mobile ([5c4ecb7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5c4ecb75237ac2219bab29da51a3ddc3b3599ed0)) - -# [2.16.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.15.0...v2.16.0) (2023-02-23) - -### Features - -- **colors:** TEHVEER-81 - Update colors ([b132d2e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b132d2e9ada865e9d433de0cbff2565bca026832)) -- **print:** TEHVEER-79 - Improve print styles ([bdc9832](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/bdc983262c5ed017026f594badd157554fcab168)) - -# [2.15.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.14.0...v2.15.0) (2023-02-22) - -### Features - -- **label-provider:** Implement ru label provider and general translations - TEHVEER-58 ([8ed0b5e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8ed0b5e1df0f8b99bf796abac92547a668cc0a33)) - -# [2.14.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.13.0...v2.14.0) (2023-02-22) - -### Bug Fixes - -- Remove undefined classNames from DOM - TEHVEER-73 ([90005a2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/90005a299fe2a244e94f4c3d44abafa7d8d723de)) -- **scroll-fade:** Add correct aria-\* to skeleton, a11y issue - TEHVEER-70 ([37ce009](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/37ce009b329bd2a769388956efeae8f4e6fd8fdb)) -- **scroll-fade:** add tabindex=0 to scrollable content, a11y issue - TEHVEER-70 ([ececb27](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ececb2793d1ac6b21f6cda863ee33de03a170c15)) -- **select:** Fix Select label id, a11y issue - TEHVEER-70 ([e6814ce](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e6814ceac68277fd57e4e6ebc60ecefb6b6c8f96)) -- **sidenav:** Fix menuitem role, a11y issue - TEHVEER-70 ([b5e0946](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b5e09461d06b27acbe64a383a8f04a90bbaeeaf4)) -- **skip-links:** add li element under ul, a11y issue - TEHVEER-70 ([e799710](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e7997103d29c4c295af7ad3fc16d20babcd2cda7)) - -### Features - -- **card-header:** replace style prop with variant - TEHVEER-66 ([777bbff](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/777bbff5c6517a20308cc96ff5b7d815f81d3a9b)) -- **form-label:** Add form-label to styleguide ([0652c59](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0652c59a14b106396268017c0e7f956343482d2c)) -- **grid:** TEHVEER-78 - Add element prop to Col ([7de1901](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7de190155a87ec77fbb82a28f90d296cfd572b86)) -- **tooltip:** TEHVEER-74 - Tooltips max width ([0d56cdb](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0d56cdb99a7a705553465f8a7fa1041254e27f5c)) - -# [2.13.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.12.0...v2.13.0) (2023-02-14) - -### Features - -- **Table:** add support for metadata filterOptions ([503c230](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/503c230b55bdde4359734ce573f2888f4d198608)) - -# [2.12.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.11.1...v2.12.0) (2023-02-13) - -### Features - -- **icon:** Update Icon font files to reduce size. Remove weight prop - STARV23IG-120 ([dec5f9b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/dec5f9b15d0edd1355654300dd94211f8c52f75c)) -- TEHVEER-68 - add support for aligning modal to bottom ([b4ea80e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b4ea80e4d140daac7e3ee048c3e7bb8315b2b1eb)) - -## [2.11.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.11.0...v2.11.1) (2023-02-08) - -### Bug Fixes - -- **file-upload:** Check if fileType is in upperCase - STARLA-524 ([f55a788](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f55a788acc0e4c557dd84ec8024c499b2fe1567b)) -- TEHVEER-29 - Show Button and Anchor argTable in storybook ([1a4a03e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1a4a03ec0de6c2f624e77b8ce81b7f69fbd03588)) - -# [2.11.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.10.0...v2.11.0) (2023-02-07) - -### Features - -- **dayjs:** Add dayjs to external packages, remove dayjsInstance from labelProvider - TEHVEER-60 ([d12f4a7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d12f4a733fcd4e7d6ea69857b73a87669706fc06)) - -# [2.10.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.9.0...v2.10.0) (2023-02-07) - -### Features - -- TEHVEER-65 - Change notification title prop type ([02f54c6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/02f54c6f1761e4ec17c1b4fffb97aea25fe1cbeb)) - -# [2.9.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.8.0...v2.9.0) (2023-02-07) - -### Bug Fixes - -- **accordion-example:** Fix accordion example icons ([57f7a2c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/57f7a2cf001d78adb362de70a33eea215b65b962)) - -### Features - -- **print:** TEHVEER-45 - Add print styles for components ([85cec41](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/85cec41e3d22fb0738cbf0d69ebf38c74fa84c42)) -- **scrollbar:** added option for smaller fade size ([6322edc](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6322edc3ed79fdf462f37ad3a1afa76e170192ee)) - -# [2.8.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.7.0...v2.8.0) (2023-02-06) - -### Features - -- **card:** Allow turning border-radius off for specific corners & create story of use-case ([2622b42](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2622b42bb34442e87f46e97bb888f3ecda132655)) -- **layout:** TEHVEER-62 - Added prop to handle main content grow ([e9d2ce6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e9d2ce6ff128ab1fe1823b92988a2d6ddfc881b9)) - -# [2.7.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.6.0...v2.7.0) (2023-02-01) - -### Features - -- Add missing size option to vertical-spacing-item ([e515402](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e515402c29332eb8a511c4a31a085179b9c656b0)) -- Make breadcrumbs margin even ([8d29e64](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8d29e646231ae5ee4f6b3a25fb70fe299b0dbd99)) -- TEHVEER-57 add some utility classes and make display ones !important ([67399ff](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/67399ff708d378ff227f80c6a2043db5ed7c7b7a)) - -# [2.6.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.5.0...v2.6.0) (2023-01-26) - -### Features - -- **select:** TEHVEER-51 - add isClearIndicatorVisible prop to select ([384ce01](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/384ce013d20f577d3281687e4437993d5e2a8f1d)) - -# [2.5.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.4.0...v2.5.0) (2023-01-25) - -### Bug Fixes - -- **header:** TEHVEER-53 - Add header box-shadow ([609b753](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/609b7534c5f185c9dd48bc3c519359b8b8f25da3)) -- **header:** TEHVEER-53 - Improve Header story to support longer username ([828f346](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/828f346632787ea08cbaa7091e67e1f58b8b73b5)) - -### Features - -- **table:** TEHVEER-11 - Add onRowClick prop to table ([fd76548](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/fd7654854f26b468369c11e629c285cc1cb1efe5)) - -# [2.4.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.3.0...v2.4.0) (2023-01-25) - -### Bug Fixes - -- **footer:** TEHVEER-53 - Pass linkAs to footer links ([dbc94fe](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/dbc94feb802aa19dac3bfe21602829311497e6b8)) - -### Features - -- **css:** TEHVEER-53 - Move background color to body tag ([b9dafa4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b9dafa4217f72357d84b6afa1ca3097fd6ee7d72)) -- **header:** TEHVEER-53 - Adjust header design ([49547f9](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/49547f9ca64889e800120d37efd7ae6970383bb3)) -- **header:** TEHVEER-53 - Improve header accessibility ([8dbbe84](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8dbbe84afa1b0f3e4657b82090edddd31f15d18d)) -- **textarea:** TEHVEER-56 - allow passing row to textarea through input prop ([62d900b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/62d900ba7e4bb854056f004d150f82879cdd4fc4)) - -# [2.3.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.2.1...v2.3.0) (2023-01-23) - -### Bug Fixes - -- **button:** TEHVEER-55 - Reduce global focus specificity ([e2c5b5b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e2c5b5bb95735664dc6d3bf46e35d2ed1ceef343)) -- **button:** TEHVEER-55 - Remove border-radius from global focus style ([1711b25](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1711b2596338ce5eddd0ea4362395bf4ca31ee1f)) - -### Features - -- **style:** Adjust breadcrumbs margin and add text helper class ([b23de4c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b23de4c88a55f5c89f368875deff4fab5bb021eb)) - -## [2.2.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.2.0...v2.2.1) (2023-01-23) - -### Bug Fixes - -- **feedback:** TEHVEER-54 - Use correct icon for feedback trigger ([a0b8c3b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a0b8c3b26eadcbd0ac513859d7897745a5ef2a74)) - -# [2.2.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.1.0...v2.2.0) (2023-01-23) - -### Bug Fixes - -- **storybook:** Fix warning about staticDirs being deprecated in Storybook CLI ([4bdbdc9](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/4bdbdc93125fc03b393370fad7c277d184adcd8b)) - -### Features - -- **calendar:** add status to highlighted days - TEHVEER-47 ([66750f7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/66750f7102f065c7b007bd0b8a400cdac4481acf)) -- **feedback:** TEHVEER-44 - Added feedback component ([57f0bf4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/57f0bf495c5b1f9fab322f05ddd9939c9771e765)) -- **icon:** TEHVEER-50 - Allow passing IconProps object to other components ([136ac00](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/136ac00ee7a0f98f07e2def8aff68b0cc65b22a0)) -- **modal:** TEHVEER-44 - Added modal position prop ([79e4ba1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/79e4ba1958e42c489166c85dd27f1b16bcb41473)) -- **StretchContent:** TEHVEER-48 - Added StretchContent component ([7b6deab](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7b6deab9d941573d71cf4f29e698f29c9a6ad29b)) - -# [2.1.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.0.6...v2.1.0) (2023-01-17) - -### Features - -- **validate-children:** Add component name to error, remove console.logs - TEHVEER-7 ([a168126](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a168126113c1e839d0dcff6ce7930845e4035c59)) - -## [2.0.6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.0.5...v2.0.6) (2023-01-17) - -### Bug Fixes - -- **general:** Remove only non-essentials from excluded list ([59d74c1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/59d74c13171f025e3e6b2cb1f365d68d844c9330)) - -## [2.0.5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.0.4...v2.0.5) (2023-01-17) - -### Bug Fixes - -- **general:** Remove packages from excluded list that might not be usable unless they're bundled ([5dea927](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5dea9276fa730a0537fcc94953473fcf0ca5a1ee)) - -## [2.0.4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.0.3...v2.0.4) (2023-01-16) - -### Bug Fixes - -- **general:** Build both versions of the package and include some required internal packages ([d3d05d6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d3d05d69ebbb2523760ec29bc397ae612c45861c)) -- **general:** Build ESM version of the package and include some required internal packages ([fe86487](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/fe86487bd3c04a3a5aa0bd7647fa952eb1ca0c63)) -- **general:** Make nx package versions static ([92ace0c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/92ace0cf4f445494663ccd0f911a3b59a6c3bb44)) - -## [2.0.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.0.2...v2.0.3) (2023-01-16) - -### Bug Fixes - -- **general:** Build only CJS version of the package ([f838f3e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f838f3e1e6cdf8d703e71d6d02fe53f50d5176cf)) - -## [2.0.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.0.1...v2.0.2) (2023-01-16) - -### Bug Fixes - -- **general:** Build both ESM and CJS formats for the library ([74da3e5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/74da3e568d214b150e0ad7b99cdf8265626703ec)) - -## [2.0.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v2.0.0...v2.0.1) (2023-01-16) - -### Bug Fixes - -- **general:** Add configDir to storybook build ([c824380](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c824380529f80f4f67acd266cf46ada73c014483)) -- **general:** Add correct peer-dependency to library package.json ([726807f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/726807f537950c990fd2703877bbd4eaed1a0998)) - -# [2.0.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.8.7...v2.0.0) (2023-01-16) - -### Features - -- **build:** Rename style file from style.css to index.css ([342ae72](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/342ae7281807f3dfbed9e0df27ff46cc9b1471e7)) -- **build:** TEHVEER-41 reduce bundle size and refactor to use nx build ([8d1dbe2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8d1dbe2995a2f969d4912560cef89ce25ff2f2b6)) - -### BREAKING CHANGES - -- **build:** The component library style import has to be changed to index.css - -## [1.8.7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.8.6...v1.8.7) (2023-01-16) - -### Bug Fixes - -- **datepicker:** Fix custom disabled days storie ([32a0039](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/32a0039d14dd61209ad4405e34a5f0ade7a2c2b2)) -- **radio:** TEHVEER-43 - Export Check and Radio component ([765d186](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/765d1863e5f4aca10821b47a9021b6008fa61746)) -- **validateChildren:** TEHVEER-43 - Unmount testrenderer tree to prevent memory leak from html tags ([fe2d0d2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/fe2d0d2272f1fecb6d28ce920c114f646bbada65)) - -## [1.8.6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.8.5...v1.8.6) (2023-01-06) - -### Bug Fixes - -- **table:** Get filter initial state from outside if available ([fe2524b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/fe2524be097efc5e27578946f97a05bcdcbde6a5)) - -## [1.8.5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.8.4...v1.8.5) (2023-01-04) - -### Bug Fixes - -- **radio, check:** Fix radio and check indicator width when long label ([ac721b5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ac721b5d6f83308f9e2b3fa226406c731e1553f4)) - -## [1.8.4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.8.3...v1.8.4) (2023-01-03) - -### Bug Fixes - -- **table:** Remove unused property showExpandAll ([5ed2ee5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5ed2ee552b04cb9dc51c6c8a2b68e4b0d2cab8f4)) - -## [1.8.3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.8.2...v1.8.3) (2023-01-03) - -### Bug Fixes - -- **general:** Fix empty placeholder breaking tables ([1d77676](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1d776765777c888347ce0bdfd0d436844e3b5314)) - -## [1.8.2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.8.1...v1.8.2) (2023-01-03) - -### Bug Fixes - -- **general:** Fix empty placeholder breaking tables ([7278ff0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7278ff073d08a3eebbbec6fc36ed597deceed2b0)) - -## [1.8.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.8.0...v1.8.1) (2023-01-03) - -### Bug Fixes - -- **general:** Use some defaults for spread ([8af2ec5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8af2ec5710915110a522042c4893c9422571cab2)) - -# [1.8.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.7.0...v1.8.0) (2023-01-02) - -### Bug Fixes - -- **card:** TEHVEER-40 - Allow ModalCloser as direct child of Card ([43c83ad](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/43c83ad6bf616a9d6c3daba4e9020e2767205aaa)) -- **select:** Placeholder display fixed ([980b7d4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/980b7d43ca91f3c906a390e263e7a873f75f92cc)) -- **table:** TEHVEER-5 - Improve table loader accessibility ([304dd5b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/304dd5b23589af54297720e1b168881a04512ce8)) - -### Features - -- **card:** TEHVEER-25 - Allow passing background prop from Card to CardContent ([6498ae0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6498ae0f172750b4912667a845cd3b3c2dc34a75)) -- **modal:** TEHVEER-40 - Allow hiding modal close ([6525ac4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6525ac41744a6ff829e7cd1ce5502d107b07a341)) -- **pagination:** TEHVEER-31 - Improve pagination accessibility ([33b5d41](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/33b5d41f6a0bacea4ff4921fbd15486c56a4998a)) -- **placeholder:** TEHVEER-25 - Add placeholder component ([52e6e73](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/52e6e73dc6155c3847e22180e062cb67f3ba96b2)) -- **table:** TEHVEER-25 - Add empty state to table ([00246cf](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/00246cfb1322801a306ed2e381b24b597ad307e6)) -- **table:** TEHVEER-25 - Empty table default translations ([ade1ff9](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ade1ff91da1b45a00e099962adb949a845cee932)) - -# [1.7.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.6.0...v1.7.0) (2022-12-19) - -### Bug Fixes - -- **label-provider:** TEHVEER-39 - Remove duplicate labels for pickers ([ad1b6c8](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ad1b6c8f08429296770442492f2e6befd9f3277a)) - -### Features - -- **label-provider:** TEHVEER-39 - Improve default labels ([0795715](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0795715d1239af3da2ecea356132c404ba923b25)) -- **pickers:** TEHVEER-39 - Allow setting aria label for icon ([9dc0381](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/9dc038181d61c49441427eb0ba24cc20f95785ed)) - -# [1.6.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.5.0...v1.6.0) (2022-12-19) - -### Bug Fixes - -- **pickers:** TEHVEER-34 - Fix pickers locale ([cda9b55](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/cda9b55f7768afec2313078c075ced7e0e5e9b48)) -- **tag:** Fix Tag size when isLoading is true - TEHVEER-36 ([64a6573](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/64a6573442f7a9f9f24c051c7ad5d1b775a8a531)) - -### Features - -- **chore:** add netlify deploy ([22f1bc8](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/22f1bc8434f63727fff229a6cb0bcbe3c5813811)) -- **label-provider:** TEHVEER-35 - Add function support to labels ([7918ff5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7918ff51b56e444f03dd2dc0746c4a2872616883)) -- **pickers:** TEHVEER-34 - Add picker translations to LabelProvider ([b9976d2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b9976d2dd61cfa27e9225e3c12bd952116a76d3d)) -- **table-filter:** Add select and multiselect options to filter - TEHVEER-3 ([59de00f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/59de00f378c548d577c0f4051c30b88333db6b59)) -- **table:** TEHVEER-35 - Add default sorting and pagination props to table ([ef4205e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ef4205ef8827ff47b094b0e9d15865bb10de2962)) - -# [1.5.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.4.0...v1.5.0) (2022-12-14) - -### Bug Fixes - -- **colors:** Add all colors from storybook ([9c44adf](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/9c44adfa282e98dca95ee8ae8ebe7eefbcf240ff)) - -### Features - -- **select:** Multiselect design updated - TEHVEER-22 ([cd06a4b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/cd06a4b953bed6632b85eb12df402caa3f4dc66c)) - -# [1.4.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.3.0...v1.4.0) (2022-12-13) - -### Bug Fixes - -- **build:** Don't add sourcemaps to bundle, update fonts ([341ec29](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/341ec2997cece0f7439641dd845a8071a10660b1)) -- **sidenav:** Fix long text in sidenav ([3e6ef49](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3e6ef49b9424f63314096d229a8fcd5754e5cc85)) - -### Features - -- **icon:** Inherit icon weight from text by default ([16ced75](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/16ced75a971d2ce3f3c4fa14455953e62a531006)) - -# [1.3.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.2.1...v1.3.0) (2022-12-13) - -### Bug Fixes - -- **card:** TEHVEER-5 - Pass tabIndex to card when used as tooltip trigger ([65b1791](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/65b17917f2a03212b0b4aa8ea067bc8bedc9b8c3)) -- **pagination:** TEHVEER-5 - Make plain button type as button by default ([7813585](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/78135851d4203052af9c8ee26bfb7301bba2c5b0)) - -### Features - -- **accordion:** TEHVEER-5 - Improve accordion accessibility ([48f9fef](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/48f9fef794a1ebc3b8ddcba952aee91d29fd48f8)) -- **collapse:** TEHVEER-5 - Improve collapse accessibility ([e3c2e02](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e3c2e0284fdd233337d6b2e2d1addc41532b6dca)) -- **dropdown:** TEHVEER-5 - Improve dropdown accessibility ([362c2e2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/362c2e2962444da8d11198fe2152f703879593fb)) -- **icon:** TEHVEER-26 - Set default icon weight to 400 ([e0df342](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e0df3426b0dca13578bf72eda5af7cc664d1d418)) -- **select:** TEHVEER-5 - Improve select accessibility ([e84919f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e84919f8a7be457d66b7137cd8ee505973d78696)) -- **table:** TEHVEER-5 - Improve table accessibility ([420b9d7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/420b9d75ec5a7bb0f21ea4091d8ec0ee481594e8)) -- **tooltip:** TEHVEER-5 - Improve tooltip accessibility ([c655344](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c655344d23cb13a50c063fccef4a84134ad59bc2)) - -## [1.2.1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.2.0...v1.2.1) (2022-12-08) - -### Bug Fixes - -- **helper:** Add text capitalize helper ([dd91cfc](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/dd91cfce5705dff6337cb687720a7f2daede4fb7)) - -# [1.2.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.1.0...v1.2.0) (2022-12-08) - -### Features - -- **layout,anchor:** Change layout padding to what it is in the design, fix anchor story ([22f0f9a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/22f0f9ac0b8737bf9eaf67880c7e561da354daca)) - -# [1.1.0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/compare/v1.0.0...v1.1.0) (2022-12-07) - -### Bug Fixes - -- **icons:** TEHVEER-13 - Make sure font files are not bundled in the css ([fd3194e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/fd3194e7a3cbac2b9cced87af334bec995c24207)) -- **sidenav:** TEHVEER-13 - Fix sidenav story ([1bdb144](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1bdb144b99fa89313f83a4b71a867a07464d987c)) - -### Features - -- **icons:** TEHVEER-13 - Migrate to material symbols ([8484af3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8484af3415df35bdff5cd0bcec1272db379885e7)) - -# 1.0.0 (2022-11-30) - -### Bug Fixes - -- **build:** Make env variable available to code ([30a003c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/30a003c6a17f080c5e7637b0a57c0ba812358430)) -- **calendar:** Add localizationProvider - bump v0.51 ([983bf48](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/983bf4890c7a6ab9d60c07d982bde8cfbcef9c1f)) -- **layout:** Fix main heigth to 100% ([d72cc6e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d72cc6e5ee84bf15d830173c2797d34b932c98ca)) -- **layout:** Fix main width when there is no sidenav ([a4614f6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a4614f651e17945da07be953f99f4d49694ee402)) -- **tooltip:** TEHVEER-19 - Fix tooltip flash on mount ([521bef9](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/521bef922a93781915fcaa81b4898ea0844f366b)) - -### Features - -- **anchor, sidenav:** Add not visual anchor, take it into use in sidenav ([70d75c4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/70d75c4752a06e9ce2ad6b0e45892c1808e0f2d6)) -- **build:** Bump version ([49fe168](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/49fe168199167628867327c237013f6976568d85)) -- **button, anchor:** Add shareable content between Anchor and Button ([8577ecb](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8577ecbce26296155430a9c1717f3abc76d43aab)) -- **button, anchor:** Refactor Next/link out of Anchor component ([ab1f6f6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ab1f6f68053415b04396e3f1b565803dd877818c)) -- **calendar:** Implement calendar picker component with optional highlighted dates mode ([e955b03](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e955b0336345b80b674d115c6229df5e072ba8c0)) -- **card:** Inherit CardContent padding from Card ([8c29a36](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8c29a363a3f3e1b1ea7c96a69eedadba9307bd26)) -- **card:** Refactor sass files from import to use ([2f77441](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2f77441a7d6bb09bcf7dee7572533cdfbac8ee8d)) -- **choice-group:** Add extraContent to Check and Radio - TEHVEER-18 ([7926100](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7926100eb0d2766bceb0750044f7f671b1c7f9ac)) -- **chore:** Add choiceGroup types export, fix documenatation on usages ([140ab7c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/140ab7cd88ea716b2db785fe3dfeed465991ac8c)) -- **chore:** Add custom theme to storybook ([aab7371](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/aab7371c8efe3dea679c58c94fd4cd831e0548ee)) -- **chore:** Add lint, tests, sb build steps ([a0d51ad](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a0d51ad279a94a124f9eebf1deaae7cd34b35267)) -- **chore:** Add lint, tests, sb build steps ([d2e1a81](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d2e1a81da2acf859e4df9069577f7638ec86ae09)) -- **chore:** Add typescript plugin css modules ([48764b3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/48764b315f8f0c69b8d3725fc0c47557b0121213)) -- **chore:** Make publish job manual, add providers to storybook ([10ec8f2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/10ec8f272e47d7c6f62bb41cdc16361fea3c5da3)) -- **close-button:** Use inner button ([5b6bffd](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5b6bffd2b849fb10003e7e4b1b96196188271a51)) -- **file-upload:** Update props ([d292116](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d292116a9f3ec2df654d9d17357f750a29d0135d)) -- **fix:** Fix split example ([389ebb2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/389ebb2e62b44d41a860f5ab5bc4b7fbda5421c0)) -- **footer, header:** Allow more flexibility for layout ([1f870ae](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1f870aed1f07a5a17c219494bc9028b951bc9974)) -- **general:** Add commonJS files for Jest tests ([62f9d9f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/62f9d9f08de8d04a2e01b56403c130dc5e39a80e)) -- **general:** Add localizationprovider locally to datepicker ([4b964f8](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/4b964f8744e059d0d1fdb1ce2ef4a43571bdad49)) -- **general:** Add overrides, fix docker ([47a5925](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/47a5925f9974533191cd141bce9056885d3bad12)) -- **general:** Add sourcemaps for debugging ([1aef56d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1aef56d668861642facb9ad3fb29e4e2f20cb01c)) -- **general:** Allow builds to be cancelled by Gitlab ([c001dee](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c001dee9f9e4819d5ca26b431506897d23a9c739)) -- **general:** Attempted fix ([64f3957](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/64f39579cf5c6985f63c90bc25b34c7256867442)) -- **general:** Attempted fix ([b7d601f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b7d601fe3ebbbc83179574ea60f42c59cf34214f)) -- **general:** Build debugging ([29b4d6d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/29b4d6df130f5b8ab02924d247a49e074ed27448)) -- **general:** Build debugging ([e309e67](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e309e674f9b2a6516215fb08f4a3f167b7ff0f11)) -- **general:** Build debugging ([43797d5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/43797d5034a3f1aa792e32ca3fb0aa22e774cee7)) -- **general:** Buildable library without the CI file ([03982fc](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/03982fc46598c0f43cf501b1aeef6680daf47f70)) -- **general:** Bump version ([a068c04](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a068c04201ae6a5783fa1884a31c1bd969f0e7af)) -- **general:** Bump version ([8d72185](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8d721858dc151b97ef48d0d28b4da0a1c8e10245)) -- **general:** Bump version ([75169ff](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/75169ff41d47023b2c60476d825df2ca670d322d)) -- **general:** Bump version ([2b6ba86](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/2b6ba867cb52cc38aaa1d537f95a1c8a4c0a09dd)) -- **general:** Bump version and add public resources ([332f71f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/332f71f9df961a370d67e7480d7fb4651cb8f479)) -- **general:** Bump version and move build to Dockerfile ([36ada22](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/36ada228e9fedb736e2f404f19195d1b3f615447)) -- **general:** Change gitlab repository url ([02250b0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/02250b0ff350ee26cdc7ce2a5705f570a1048939)) -- **general:** CI Fixes ([f949114](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f949114fa347de901816d1f424f477e81be3d757)) -- **general:** CI Fixes ([db40f77](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/db40f7750787fe8eb613f02e3fe3e26f86207ca5)) -- **general:** Clean install and bump version ([9f34f0a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/9f34f0a7e0c761be70c4d9b22e779da008bef001)) -- **general:** Debugging CI build ([3c9bc5b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3c9bc5b9158d2406af2faab58f8cfd20e542426d)) -- **general:** Debugging CI build ([138118e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/138118e67a3e3cbc83ad70692e8f53a8af8db96f)) -- **general:** Debugging rollup ([d3383fc](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/d3383fc2841f535c8afaa9dacadd6716d92ec113)) -- **general:** Debugging rollup ([45b0083](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/45b0083072ae931ad770ee93fc0bfc9f91701b1a)) -- **general:** Docker fix ([137bfb6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/137bfb6f42f7122a85e358819ac2d4e3051a6bbe)) -- **general:** Don't minify the compiled version ([bdaab34](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/bdaab342ac9e277f6f0155990ffaff79b9fa19ee)) -- **general:** Export global styles, fix build ([78c92e9](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/78c92e98037b2ad34ec758553cdb7f8d430d1a1a)) -- **general:** Fix circular dependencies ([7237af8](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7237af8cdc9d035dcf373a364014bc75c315c4c9)) -- **general:** Fix registry URL ([c9fb42a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c9fb42aa284443725c45f0317ecb731d4ddb5fd5)) -- **general:** Fix registry URL ([715ff83](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/715ff83bab413bb4cde4e18e047a96054790caf3)) -- **general:** Fix validation, in can't be used on null ([ff97359](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/ff97359098eb351c27ccd3416e8dd2c76b180e73)) -- **general:** General ([9388e62](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/9388e62cdf7789645caab2917d6cd031f2a126d9)) -- **general:** Gitlab CI File ([dd65ef7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/dd65ef7b067b032aeedcd8a85b3bd85ae9f69633)) -- **general:** Gitlab CI File fixes ([9f447fd](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/9f447fdc6f584266fa837cb952bd02fc5648fa65)) -- **general:** Gitlab CI File fixes ([63e2708](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/63e27081c19fc24db5db7a62b8891a6a72abd00d)) -- **general:** Gitlab CI File fixes ([48b4be3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/48b4be377468f03370d576f69b0c2ee9d2b6a3b6)) -- **general:** Gitlab CI File fixes ([48821b9](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/48821b9aff10fc7b3e60c8310b5a9c076fcd70c8)) -- **general:** Gitlab CI File fixes ([66f9df4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/66f9df4890c30e2a8d43975142e57b37d4f6a143)) -- **general:** Gitlab CI File fixes ([227601d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/227601dfd476bb9e5274d39b9eaf72f43e863b84)) -- **general:** Gitlab CI File fixes ([e52950a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e52950ae1546a6f486921e53fd93afb69f790f83)) -- **general:** Gitlab CI File fixes ([db5dff2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/db5dff2f4563d14233b8bfdb26b885b27126363e)) -- **general:** Gitlab CI File fixes ([76c8d2b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/76c8d2b275f959b50ae3d5b73a9a9cbec3fd2faf)) -- **general:** Gitlab CI File fixes ([883464e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/883464ea38b4c36bc569d8b7d23b1e78e00c2b7a)) -- **general:** Gitlab CI File fixes ([814dbe0](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/814dbe008b2970abbe0edf8d6d2e9ca412aa8b16)) -- **general:** Gitlab CI File fixes ([7cf140a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7cf140a6140a5f8a87d1fd7409acf691919a1e68)) -- **general:** Gitlab CI File fixes ([c4bca88](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c4bca8886354db2c9baca8e1d4187f41a6c5d5f3)) -- **general:** Gitlab CI File fixes ([402d37d](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/402d37d316aba60c39b9c821d4dbf1b3330f770e)) -- **general:** Gitlab CI File fixes ([7495911](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/749591139bd902906fd7f8a756a6629fbdb90c50)) -- **general:** Gitlab CI File fixes ([e886a4f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e886a4fee247f225295a12ee15db41f8fa72ef67)) -- **general:** Gitlab CI File fixes ([71fb4b6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/71fb4b6e8feb4cfcb2bc3ff9260f816f6cfe506b)) -- **general:** Gitlab CI File fixes ([03204d2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/03204d2e62cfa0ac572381df536f91e941bb517b)) -- **general:** Gitlab CI File fixes ([0af9f19](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0af9f191c18e46134f1a1ee513cb350c48989657)) -- **general:** Gitlab CI File fixes ([276aed4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/276aed4f04709cf323b20f5eeb000bd387683bb2)) -- **general:** Gitlab CI File fixes ([e9cc3e4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/e9cc3e479bee14fcd75fc4db85bbbbf32bdc112b)) -- **general:** Gitlab CI File fixes ([8bd5202](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8bd5202be31007ab88fce88de6cd1eaf446ef86f)) -- **general:** Gitlab CI File fixes ([cff036f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/cff036f53558dcc035b40a95d931144568f2c56c)) -- **general:** Gitlab CI File fixes & update packages ([72fffd3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/72fffd3b29a7a0a48421f097d105d9e72dca53e0)) -- **general:** Modify semantic-release/{npm, git} settings ([7056705](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7056705bff2fe61683385de5a05a827a584851f4)) -- **general:** Move dependencies under peerdependencies ([66af251](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/66af251ecaa489763136bc081afa530fc068a348)) -- **general:** Move global css imports to index.scss, update packages and add token to CI pipeline ([6f28abb](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/6f28abbb4378d0ad73ca9a49927911f81dc7d5c6)) -- **general:** Move style imports back under specific components ([f332ed3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f332ed3ed7c5f24a5a51bb54f8f0b376f62088e0)) -- **general:** Pull git in publish step for semantic-release ([3323761](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3323761c451f59f9d4d32f5bea850f1b0e2830f4)) -- **general:** Revert adding Dockerfile, add external dependencies ([7087557](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7087557675d76ec249580bc1a436d4b82f0f4fd0)) -- **general:** Skip husky on CI ([dd03b07](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/dd03b07b7d3debbc49df57d6f0f4f810e895589c)) -- **general:** Skip husky on CI ([0716432](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0716432e197ddb4b2ab9e92303ce1e97204d36bc)) -- **general:** Skip husky on CI ([8755933](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8755933346c31be283352f68a6e3de055b6a28d7)) -- **general:** Skip husky on CI ([3a0c165](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3a0c165fd15c80275fd7f624e0184d037d65ecb6)) -- **general:** Skip NX Cache, debugging ([8cf4f01](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/8cf4f01c2e0139f466fd299b81815f673eee623d)) -- **general:** Update components from STAR ([88569b5](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/88569b54ebc1705bc5836797a0e7b5929da1e85a)) -- **general:** Update package-lock.json ([b3407eb](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b3407ebf670b017c7babb6e9770614d7570e981f)) -- **general:** Update packages and documentation ([f0b001a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f0b001a6e40cdb10cf6feb5d62b3a8b75800110f)) -- **general:** Update packages and fix tests ([c39bd72](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c39bd72bef2482570f9d53b28a0527f3e7b995d7)) -- **general:** Update packages and overrides ([3ec4331](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3ec43313d32a0e95d9d1fe865146c6aae7752a57)) -- **general:** Update packages, add content min-width, fix max-width ([48b91ef](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/48b91ef84265e83e1db930c02f51a25b2291dabd)) -- **general:** Update packages, bump version ([0c5d87b](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/0c5d87bab7c579ab90821697b54781d00dce0366)) -- **general:** Update packages, improve documentation ([f55e33a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f55e33a7f970203150cebd785cbbc624df95a849)) -- **general:** Update packages, make new version ([f5e6753](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/f5e675318ba6f5dd23f627f7bd0b007ff56d8f2c)) -- **general:** Update packages, remove nx, update gitlab rules to reduce build queues ([501fe3e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/501fe3e23770e29c819da94c92990cbb1caa4a7e)) -- **general:** Use dependencies instead of peerDependencies ([9951316](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/9951316c8ce4ad717806fb762f54da20e62e9f73)) -- **general:** Use non-slim version of docker image ([697abde](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/697abdef138c4160bf5aa3be84ddd517583d8069)) -- **general:** Use npm to publish the package instead of gitlab ([c4b68f4](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c4b68f49178c7408dc7ac849a2a2049822913b5e)) -- **general:** Use semantic-release for releasing ([34447c2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/34447c2a9a98954368951c355eb222c71558bd8b)) -- **general:** Use SWC as compiler ([c849cdd](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/c849cddccadfb63988df1c7dc3f464f9dd7d7576)) -- **general:** Use vite as builder, refactor structure ([977b9d1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/977b9d16c7c0ff39fa6272484f614b3a0519b9aa)) -- **helpers:** Add some useful text transform options ([1c7d5a3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/1c7d5a30902fed5833ccbbfa46225907142c65a0)) -- **layout:** Add simple variant of layout, without sidenav - TEHVEER-8 ([a5a8892](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a5a88925a33b4aac59b1f721870ee50300bbf99f)) -- **separator:** Add vertical and dotted separator variants ([a977da1](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a977da1b7a847ef0fd0d37a866235fcce9951652)) -- **storybook:** Rename storybook files to cjs ([3f6b41e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3f6b41e3a1f93c815160dc649a9164d868439011)) -- **table:** Add accordion borderType prop to make it possible to highlight accordion items ([049b8d3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/049b8d3583ae490b3f2605d7f65a0d8aad97ce04)) -- **table:** Add table row grouping, add enableSorting, add small variant - TEHVEER-10 ([5640ca6](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/5640ca6f48067d13c387a8ceb27791303f5b3cf4)) -- **table:** Change clickable row example ([421552c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/421552cc65b092cef14cb4fdc61e183a2028210e)) -- **table:** Create borderless table ([dff6eb3](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/dff6eb3890d19c5032524c19238b3bc346308193)) -- **table:** TEHVEER-16 - Add manualPagination prop ([4ad84ef](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/4ad84ef61a2bb8fcf0aacca3a3f25f874228fa93)) -- **tabs:** Fix tabs jumping when clicked ([51fd867](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/51fd867a04c955a2c47972a24c567c4dc5df867f)) -- **tag:** Rounded variant of tag ([489d84f](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/489d84f890fecd72b286be45ff48c45cf3e7892a)) -- **text-editor:** Fix sorting and filtering order ([a07817a](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/a07817af13c556bdfa348eaef05738d6720aaa19)) -- **text-editor:** Remove block-quotes as default control ([7ba8fe7](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7ba8fe7728d9e739e1556d1dc201b7124af93d76)) -- **text-editor:** Remove underline as default inline-style ([be0026c](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/be0026c5053288bc8743cb79cc29f223b9994155)) -- **toast:** Export ToastContainer - bump version v0.50 ([3a522eb](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/3a522eb6a7faa344ca1d87141865ed0d722d714e)) -- **toast:** update toast documentation ([7bd35b2](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/7bd35b2783153dfb84e6f8403ea3dab5f953ad76)) -- **tooltip:** Handle focus inside tooltip - TEHVEER-6 ([b640c3e](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/b640c3ebe19fa5ecec447f62cb07226fb757c1d3)) -- **vite:** Renaming css modules to be more legible ([02c9e84](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/02c9e84993634f44920a72e548ee612ef5af8004)) -- **vscode-settings:** Remove old values ([67dbb15](https://gitlab.sotsiaalministeerium.ee/tehik-react/tehik-react-components/commit/67dbb15d8e3f0938c3118c5c62916ab174a04582)) diff --git a/libs/react-components/README.md b/libs/react-components/README.md deleted file mode 100644 index 77866c755..000000000 --- a/libs/react-components/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# TEDI Design System for React - -`@tehik-ee/tedi-react` is a library of React components designed to implement the TEDI Design System, ensuring consistency, accessibility, and efficiency in building user interfaces. -For installation and usage instructions, visit the [documentation](https://github.com/TEHIK-EE/tedi-design-system/wiki). diff --git a/libs/react-components/chromatic.config.json b/libs/react-components/chromatic.config.json deleted file mode 100644 index 33b4c1d6d..000000000 --- a/libs/react-components/chromatic.config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://www.chromatic.com/config-file.schema.json", - "buildScriptName": "build:sb", - "autoAcceptChanges": "main", - "exitOnceUploaded": true, - "skip": "dependabot/**" -} diff --git a/libs/react-components/customTemplate.cjs b/libs/react-components/customTemplate.cjs deleted file mode 100644 index 4bc082319..000000000 --- a/libs/react-components/customTemplate.cjs +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = (dts, { classes, fileName, logger }) => { - try { - return dts.replace('};\n', '[key: string]: string;\n };\n'); - } catch (error) { - logger.error(error.message); - } -}; diff --git a/libs/react-components/declaration.d.ts b/libs/react-components/declaration.d.ts deleted file mode 100644 index bd2746b37..000000000 --- a/libs/react-components/declaration.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import 'react'; - -declare module '*.module.scss' { - const styles: { [key: string]: string }; - export default styles; -} - -declare module 'react' { - interface CSSProperties { - [key: `--${string}`]: string | number; - } -} diff --git a/libs/react-components/design-tokens/README.md b/libs/react-components/design-tokens/README.md deleted file mode 100644 index 1558e3ead..000000000 --- a/libs/react-components/design-tokens/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Design-tokens - -This libray export main scss tokens used inside Design System. -Tokens main source of truth is tokens.json file. Where every design-system token is kept. - -To generate new css variables run `npm run generate-variables` inside design-tokens folder. - -Tokens are kept inside json file to make them more convertable to other resources and remove the need to copy them. -For example usage inside Storybook stories. diff --git a/libs/react-components/design-tokens/generate-variables.js b/libs/react-components/design-tokens/generate-variables.js deleted file mode 100644 index 2c0dbae1f..000000000 --- a/libs/react-components/design-tokens/generate-variables.js +++ /dev/null @@ -1,40 +0,0 @@ -const { argv } = require('node:process'); -const { format, normalize } = require('node:path'); -const { writeFile } = require('node:fs/promises'); - -const IGNORE_KEY = []; -const SAVE_NAME = 'variables'; - -const tokensToCss = (object = {}, base = `-`) => - Object.entries(object).reduce((css, [key, value]) => { - let newBase = base; - - if (!IGNORE_KEY.includes(key)) { - newBase = base + `-${key}`; - } - - if (typeof value !== 'object') { - return css + newBase + `: ${value};\n`; - } - return css + tokensToCss(value, newBase); - }, ``); - -const saveTokens = async (name, tokens) => { - try { - await writeFile(`${name}.scss`, tokens); - } catch (e) { - console.log('There was an error while saving a file.\n', e); - } -}; - -try { - const args = argv.slice(2); - const tokensPath = format({ root: './', base: normalize(args[0]) }); - const tokens = require(tokensPath); - - const cssVariables = tokensToCss(tokens); - const cssClass = `:root {\n${cssVariables.replaceAll('--', ' --')}}\n`; - saveTokens(SAVE_NAME, cssClass); -} catch (e) { - console.log('Provide a correct argument - a relative path to design tokens.\n', e); -} diff --git a/libs/react-components/design-tokens/index.scss b/libs/react-components/design-tokens/index.scss deleted file mode 100644 index f4a07f348..000000000 --- a/libs/react-components/design-tokens/index.scss +++ /dev/null @@ -1,2 +0,0 @@ -@use './variables'; -@use './mixins'; diff --git a/libs/react-components/design-tokens/mixins.scss b/libs/react-components/design-tokens/mixins.scss deleted file mode 100644 index a1b5eb72e..000000000 --- a/libs/react-components/design-tokens/mixins.scss +++ /dev/null @@ -1,60 +0,0 @@ -@mixin visually-hidden { - /* https://developer.yahoo.com/blogs/ydn/clip-hidden-content-better-accessibility-53456.html */ - position: absolute !important; - width: 1px !important; - height: 1px !important; - padding: 0 !important; - overflow: hidden; - clip: rect(1px, 1px, 1px, 1px); - border: 0 !important; -} - -@mixin button-reset { - padding: 0; - font: inherit; - color: inherit; - text-decoration: none; - cursor: pointer; - background-color: var(--color-transparent); - border: none; - - &:disabled { - cursor: default; - } -} - -@mixin table-cell-selector($selector: 'all') { - @if $selector == 'thead' or $selector == 'all' { - & > thead > tr > th { - @content; - } - } - - @if $selector == 'tbody' or $selector == 'all' { - & > tbody > tr > td { - @content; - } - } - - @if $selector == 'tfoot' or $selector == 'all' { - & > tfoot > tr > th { - @content; - } - } -} - -@mixin print-grayscale { - @media print { - filter: grayscale(1); - } -} - -@mixin focus-element { - border-radius: 0.25rem; - outline: 2px solid var(--global-outline-color, var(--color-primary-main)); - outline-offset: var(--global-outline-offset, 1px); - - html:not([data-whatintent='keyboard']) & { - outline: none; - } -} diff --git a/libs/react-components/design-tokens/package.json b/libs/react-components/design-tokens/package.json deleted file mode 100644 index 8f965811b..000000000 --- a/libs/react-components/design-tokens/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "@tehik-ee/design-tokens", - "version": "0.0.1", - "main": "tokens.json", - "scripts": { - "generate-variables": "node generate-variables.js tokens.json" - } -} diff --git a/libs/react-components/design-tokens/project.json b/libs/react-components/design-tokens/project.json deleted file mode 100644 index f4d980ab5..000000000 --- a/libs/react-components/design-tokens/project.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "design-tokens", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/react-components/design-tokens/src", - "projectType": "library", - "targets": { - "build": { - "executor": "@nx/js:tsc", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/packages/design-tokens", - "main": "libs/react-components/src/design-tokens/index.ts", - "tsConfig": "libs/react-components/src/design-tokens/tsconfig.lib.json", - "assets": ["libs/react-components/src/design-tokens/*.md"] - } - } - }, - "tags": [] -} diff --git a/libs/react-components/design-tokens/tokens.json b/libs/react-components/design-tokens/tokens.json deleted file mode 100644 index 8a5a9e7e1..000000000 --- a/libs/react-components/design-tokens/tokens.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "font": { - "family": "roboto, arial, helvetica, sans-serif", - "size": { - "small": "0.875rem", - "base": "1rem", - "h1": "2rem", - "h2": "1.75rem", - "h3": "1.5rem", - "h4": "1.25rem", - "h5": "1.125rem", - "h6": "1rem" - }, - "line-height": { - "small": "1.25rem", - "base": "1.5", - "h1": "3rem", - "h2": "2.625rem", - "h3": "2.25rem", - "h4": "1.875rem", - "h5": "1.625rem", - "h6": "1.5rem" - }, - "weight": { - "base": "400", - "h1": "300", - "h2": "400", - "h3": "400", - "h4": "400", - "h5": "400", - "h6": "400" - } - }, - "color": { - "white": "#fff", - "white-rgb": "255, 255, 255", - "black": "#000", - "transparent": "transparent", - - "primary": { - "main": "#005aa3", - "active": "#004277", - "active-subtle": "#4587bc", - "highlight": "#d0e1ee", - "highlight-subtle": "#e7f0f6" - }, - - "accent": { - "main": "#ff8000", - "highlight": "#ffdcb8" - }, - - "text": { - "default": "#151926", - "muted": "#4B4E62", - "subtle": "#5d6071", - "disabled": "#9293A4", - "inverted": "#ffffff" - }, - - "bg": { - "default": "#ffffff", - "muted": "#f9f9f9", - "subtle": "#f0f0f2", - "disabled": "#D2D3D8", - "inverted": "#34394c", - "inverted-contrast": "#262b3b" - }, - - "border": { - "default": "#e1e2e5", - "contrast": "#9293A4" - }, - - "positive": { - "main": "#2c7a4c", - "active": "#006728", - "highlight": "#ecf4ef" - }, - - "important": { - "main": "#c43939", - "active": "#b50000", - "highlight": "#fceeee" - }, - - "info": { - "main": "#005aa3", - "active": "#004277", - "highlight": "#e7f0f6" - }, - - "warning": { - "main": "#8c630a", - "highlight": "#fff1d3" - }, - - "gradient": { - "main": "linear-gradient(140.44deg, #005295 -17.66%, #1769ab 71.2%)" - } - }, - "border-radius": { - "default": "0.25rem" - } -} diff --git a/libs/react-components/design-tokens/variables.scss b/libs/react-components/design-tokens/variables.scss deleted file mode 100644 index 1bc26c3db..000000000 --- a/libs/react-components/design-tokens/variables.scss +++ /dev/null @@ -1,85 +0,0 @@ -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -:root { - --font-family: roboto, arial, helvetica, sans-serif; - --font-size-small: 0.875rem; - --font-size-base: 1rem; - --font-size-h1: 2rem; - --font-size-h2: 1.75rem; - --font-size-h3: 1.5rem; - --font-size-h4: 1.25rem; - --font-size-h5: 1.125rem; - --font-size-h6: 1rem; - --font-line-height-small: 1.25rem; - --font-line-height-base: 1.5; - --font-line-height-h1: 2.875rem; - --font-line-height-h2: 2.25rem; - --font-line-height-h3: 2rem; - --font-line-height-h4: 1.625rem; - --font-line-height-h5: 1.5rem; - --font-line-height-h6: 1.5rem; - --font-weight-base: 400; - --font-weight-h1: 300; - --font-weight-h2: 400; - --font-weight-h3: 400; - --font-weight-h4: 400; - --font-weight-h5: 400; - --font-weight-h6: 700; - --color-white: #fff; - --color-white-rgb: 255, 255, 255; - --color-black: #000; - --color-transparent: transparent; - --color-primary-main: #005aa3; - --color-primary-active: #004277; - --color-primary-active-subtle: #4587bc; - --color-primary-highlight: #d0e1ee; - --color-primary-highlight-subtle: #e7f0f6; - --color-accent-main: #ff8000; - --color-accent-active: #994d00; - --color-accent-highlight: #ffe6cc; - --color-text-default: #151926; - --color-text-muted: #4b4e62; - --color-text-subtle: #5d6071; - --color-text-disabled: #9293a4; - --color-text-inverted: #fff; - --color-bg-default: #fff; - --color-bg-muted: #f9f9f9; - --color-bg-subtle: #f0f0f2; - --color-bg-disabled: #d2d3d8; - --color-bg-inverted: #34394c; - --color-bg-inverted-contrast: #262b3b; - --color-border-default: #e1e2e5; - --color-border-contrast: #9293a4; - --color-positive-main: #308653; - --color-positive-active: #266b42; - --color-positive-highlight: #eaf3ee; - --color-important-main: #d73e3e; - --color-important-active: #ac3232; - --color-important-highlight: #fbecec; - --color-info-main: #005aa3; - --color-info-active: #004277; - --color-info-highlight: #e7f0f6; - --color-warning-main: #94690d; - --color-warning-active: #664807; - --color-warning-highlight: #fff0cf; - --color-gradient-main: linear-gradient(140.44deg, #005295 -17.66%, #1769ab 71.2%); - --border-radius-default: 0.25rem; -} - -@include breakpoints.media-breakpoint-down(md) { - :root { - --font-size-h1: 1.5rem; - --font-size-h2: 1.375rem; - --font-size-h3: 1.25rem; - --font-size-h4: 1.125rem; - --font-size-h5: 1rem; - --font-size-h6: 1rem; - --font-line-height-h1: 2rem; - --font-line-height-h2: 1.75rem; - --font-line-height-h3: 1.625rem; - --font-line-height-h4: 1.5rem; - --font-line-height-h5: 1.5rem; - --font-line-height-h6: 1.5rem; - --font-weight-h5: 700; - } -} diff --git a/libs/react-components/jest-mocks.js b/libs/react-components/jest-mocks.js deleted file mode 100644 index 3282fc947..000000000 --- a/libs/react-components/jest-mocks.js +++ /dev/null @@ -1,14 +0,0 @@ -/* eslint-disable no-undef */ -Object.defineProperty(window, 'matchMedia', { - writable: true, - value: jest.fn().mockImplementation((query) => ({ - matches: false, - media: query, - onchange: null, - addListener: jest.fn(), // Deprecated - removeListener: jest.fn(), // Deprecated - addEventListener: jest.fn(), - removeEventListener: jest.fn(), - dispatchEvent: jest.fn(), - })), -}); diff --git a/libs/react-components/jest-setup.js b/libs/react-components/jest-setup.js deleted file mode 100644 index 3ca7c6daa..000000000 --- a/libs/react-components/jest-setup.js +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import './jest-mocks.js'; diff --git a/libs/react-components/jest.config.ts b/libs/react-components/jest.config.ts deleted file mode 100644 index 1f4af994e..000000000 --- a/libs/react-components/jest.config.ts +++ /dev/null @@ -1,32 +0,0 @@ -const jestConfig = { - displayName: 'components', - preset: 'ts-jest', - testEnvironment: 'jsdom', - transform: { - '^.+\\.[tj]sx?$': [ - 'babel-jest', - { presets: ['@babel/preset-react', '@babel/preset-env', '@babel/preset-typescript'] }, - ], - }, - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], - transformIgnorePatterns: ['/node_modules/(?!(lodash-es)/)'], - coverageDirectory: '../../coverage/libs/react-components', - setupFilesAfterEnv: ['<rootDir>/jest-setup.js'], - moduleNameMapper: { - '\\.(css|scss|sass)$': 'identity-obj-proxy', - }, - testPathIgnorePatterns: ['/node_modules/', '/dist/'], - collectCoverage: true, - collectCoverageFrom: ['src/tedi/components/**/*.{js,ts,tsx}'], - coveragePathIgnorePatterns: ['\\.stories\\.tsx$'], - coverageThreshold: { - global: { - branches: 80, - functions: 80, - lines: 80, - statements: 80, - }, - }, -}; - -export default jestConfig; diff --git a/libs/react-components/package-lock.json b/libs/react-components/package-lock.json deleted file mode 100644 index 06b60d791..000000000 --- a/libs/react-components/package-lock.json +++ /dev/null @@ -1,23336 +0,0 @@ -{ - "name": "@tehik-ee/tedi-react", - "version": "0.0.0-semantic-version", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@tehik-ee/tedi-react", - "version": "0.0.0-semantic-version", - "dependencies": { - "@emotion/react": "^11.11.4", - "@emotion/styled": "^11.11.0", - "@floating-ui/react": "^0.26.9", - "@mui/material": "^5.15.13", - "@mui/x-date-pickers": "^5.0.20", - "@tanstack/react-table": "^8.13.2", - "@tehik-ee/tedi-core": "^1.13.2", - "classnames": "^2.5.1", - "draft-js": "^0.11.7", - "draftjs-md-converter": "^1.5.2", - "formik": "^2.4.5", - "lodash-es": "^4.17.21", - "react-animate-height": "^3.2.3", - "react-dropzone": "^14.3.5", - "react-select": "^5.10.1", - "react-sticky-box": "2.0.5", - "react-toastify": "^9.1.3", - "what-input": "^5.2.12", - "yup": "^1.4.0" - }, - "devDependencies": { - "@avalane/storybook-addon-status": "^5.0.1", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.26.3", - "@babel/preset-typescript": "^7.26.0", - "@dnd-kit/core": "^6.3.1", - "@dnd-kit/sortable": "^10.0.0", - "@dnd-kit/utilities": "^3.2.2", - "@faker-js/faker": "^8.4.1", - "@storybook/addon-a11y": "8.4.2", - "@storybook/addon-designs": "^8.2.1", - "@storybook/addon-essentials": "8.4.2", - "@storybook/addon-mdx-gfm": "8.4.2", - "@storybook/blocks": "8.4.2", - "@storybook/builder-vite": "8.4.2", - "@storybook/react": "8.4.2", - "@storybook/react-vite": "8.4.2", - "@storybook/theming": "8.4.2", - "@svgr/webpack": "8.1.0", - "@swc-node/register": "~1.9.1", - "@swc/core": "~1.5.7", - "@swc/helpers": "~0.5.11", - "@testing-library/dom": "^9.3.4", - "@testing-library/jest-dom": "^6.4.2", - "@testing-library/react": "15.0.6", - "@testing-library/user-event": "^14.5.2", - "@types/css-modules": "^1.0.5", - "@types/dompurify": "^3.0.5", - "@types/draft-js": "^0.11.18", - "@types/jest": "29.5.14", - "@types/lodash-es": "^4.17.12", - "@types/node": "20.11.28", - "@types/react": "18.3.1", - "@types/react-dom": "18.3.0", - "@types/react-test-renderer": "^18.0.7", - "@types/showdown": "^2.0.6", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "@vitejs/plugin-react": "^4.3.4", - "chromatic": "^11.25.2", - "cross-env": "^7.0.3", - "dompurify": "^3.0.9", - "eslint": "8.48.0", - "eslint-config-next": "^13.4.6", - "eslint-config-prettier": "9.1.0", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-react": "^7.32.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-simple-import-sort": "^10.0.0", - "eslint-plugin-storybook": "^0.11.0", - "eslint-plugin-unused-imports": "^4.1.4", - "identity-obj-proxy": "^3.0.0", - "jest": "29.7.0", - "jest-environment-jsdom": "29.7.0", - "linkify-string": "^4.1.3", - "lint-staged": "^15.3.0", - "next": "^14.1.3", - "prettier": "^2.8.8", - "replace-in-file": "^7.1.0", - "rollup-plugin-visualizer": "^5.12.0", - "sass": "^1.83.1", - "showdown": "^2.1.0", - "storybook": "8.4.2", - "storybook-addon-pseudo-states": "^4.0.2", - "stylelint": "^16.13.2", - "stylelint-config-recess-order": "^4.2.0", - "stylelint-config-standard-scss": "^14.0.0", - "stylelint-declaration-strict-value": "^1.9.2", - "to-string-loader": "^1.2.0", - "ts-jest": "29.1.2", - "ts-node": "^10.9.2", - "tslib": "^2.3.0", - "typescript": "5.5.4", - "typescript-plugin-css-modules": "^5.1.0", - "vite": "^5.4.11", - "vite-plugin-checker": "^0.6.4", - "vite-plugin-dts": "3.7.3", - "vite-plugin-eslint": "^1.8.1", - "vite-plugin-static-copy": "^2.2.0", - "vite-tsconfig-paths": "4.3.2" - }, - "peerDependencies": { - "dayjs": "^1.11.10", - "react": "18.3.1", - "react-dom": "18.3.1" - } - }, - "node_modules/@adobe/css-tools": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.3.tgz", - "integrity": "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@avalane/storybook-addon-status": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@avalane/storybook-addon-status/-/storybook-addon-status-5.0.1.tgz", - "integrity": "sha512-FDVQerzeBugbJDHWgU1BZpLTMngzTNZEM/dTu5KZruaAGJS9o+JpA3lzvpRExICh++yUmI5zPZt8pauUqvlQnQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.3.tgz", - "integrity": "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.3.tgz", - "integrity": "sha512-hyrN8ivxfvJ4i0fIJuV4EOlV0WDMz5Ui4StRTgVaAvWeiRCilXgwVvxJKtFQ3TKtHgJscB2YiXKGNJuVwhQMtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.3", - "@babel/parser": "^7.27.3", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.3", - "@babel/types": "^7.27.3", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.3.tgz", - "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.27.3", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", - "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.27.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", - "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "regexpu-core": "^6.2.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", - "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", - "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-wrap-function": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", - "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.3.tgz", - "integrity": "sha512-h/eKy9agOya1IGuLaZ9tEUgz+uIRXcbtOhRtUyyMf8JFmn1iT13vnl/IGVWSkdOCG/pC57U4S1jnAabAavTMwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.3.tgz", - "integrity": "sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", - "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", - "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", - "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", - "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", - "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", - "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", - "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", - "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", - "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", - "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.3.tgz", - "integrity": "sha512-+F8CnfhuLhwUACIJMLWnjz6zvzYM2r0yeIHKlbgfw7ml8rOMJsXNXV/hyRcb3nb493gRs4WvYpQAndWj/qQmkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", - "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", - "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.27.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", - "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz", - "integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", - "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", - "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", - "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", - "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", - "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", - "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", - "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", - "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", - "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", - "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", - "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", - "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", - "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", - "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", - "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.3.tgz", - "integrity": "sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.3", - "@babel/plugin-transform-parameters": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", - "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", - "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", - "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", - "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", - "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", - "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", - "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.27.1.tgz", - "integrity": "sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", - "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", - "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", - "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.1.tgz", - "integrity": "sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", - "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", - "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", - "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", - "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", - "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", - "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", - "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz", - "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", - "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", - "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", - "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", - "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", - "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.27.1", - "@babel/plugin-syntax-import-attributes": "^7.27.1", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.27.1", - "@babel/plugin-transform-async-to-generator": "^7.27.1", - "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.27.1", - "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.27.1", - "@babel/plugin-transform-classes": "^7.27.1", - "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.1", - "@babel/plugin-transform-dotall-regex": "^7.27.1", - "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", - "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-exponentiation-operator": "^7.27.1", - "@babel/plugin-transform-export-namespace-from": "^7.27.1", - "@babel/plugin-transform-for-of": "^7.27.1", - "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.27.1", - "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", - "@babel/plugin-transform-member-expression-literals": "^7.27.1", - "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.27.1", - "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", - "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", - "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.27.2", - "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1", - "@babel/plugin-transform-parameters": "^7.27.1", - "@babel/plugin-transform-private-methods": "^7.27.1", - "@babel/plugin-transform-private-property-in-object": "^7.27.1", - "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.27.1", - "@babel/plugin-transform-regexp-modifiers": "^7.27.1", - "@babel/plugin-transform-reserved-words": "^7.27.1", - "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.27.1", - "@babel/plugin-transform-sticky-regex": "^7.27.1", - "@babel/plugin-transform-template-literals": "^7.27.1", - "@babel/plugin-transform-typeof-symbol": "^7.27.1", - "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.27.1", - "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", - "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-transform-react-display-name": "^7.27.1", - "@babel/plugin-transform-react-jsx": "^7.27.1", - "@babel/plugin-transform-react-jsx-development": "^7.27.1", - "@babel/plugin-transform-react-pure-annotations": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", - "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-typescript": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.3.tgz", - "integrity": "sha512-7EYtGezsdiDMyY80+65EzwiGmcJqpmcZCojSXaRgdrBaGtWTgDZKq69cPIVped6MkIM78cTQ2GOiEYjwOlG4xw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.3.tgz", - "integrity": "sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.3", - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz", - "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/media-query-list-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", - "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/@date-io/core": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.17.0.tgz", - "integrity": "sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw==", - "license": "MIT" - }, - "node_modules/@date-io/date-fns": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@date-io/date-fns/-/date-fns-2.17.0.tgz", - "integrity": "sha512-L0hWZ/mTpy3Gx/xXJ5tq5CzHo0L7ry6KEO9/w/JWiFWFLZgiNVo3ex92gOl3zmzjHqY/3Ev+5sehAr8UnGLEng==", - "license": "MIT", - "dependencies": { - "@date-io/core": "^2.17.0" - }, - "peerDependencies": { - "date-fns": "^2.0.0" - }, - "peerDependenciesMeta": { - "date-fns": { - "optional": true - } - } - }, - "node_modules/@date-io/dayjs": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@date-io/dayjs/-/dayjs-2.17.0.tgz", - "integrity": "sha512-Iq1wjY5XzBh0lheFA0it6Dsyv94e8mTiNR8vuTai+KopxDkreL3YjwTmZHxkgB7/vd0RMIACStzVgWvPATnDCA==", - "license": "MIT", - "dependencies": { - "@date-io/core": "^2.17.0" - }, - "peerDependencies": { - "dayjs": "^1.8.17" - }, - "peerDependenciesMeta": { - "dayjs": { - "optional": true - } - } - }, - "node_modules/@date-io/luxon": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@date-io/luxon/-/luxon-2.17.0.tgz", - "integrity": "sha512-l712Vdm/uTddD2XWt9TlQloZUiTiRQtY5TCOG45MQ/8u0tu8M17BD6QYHar/3OrnkGybALAMPzCy1r5D7+0HBg==", - "license": "MIT", - "dependencies": { - "@date-io/core": "^2.17.0" - }, - "peerDependencies": { - "luxon": "^1.21.3 || ^2.x || ^3.x" - }, - "peerDependenciesMeta": { - "luxon": { - "optional": true - } - } - }, - "node_modules/@date-io/moment": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@date-io/moment/-/moment-2.17.0.tgz", - "integrity": "sha512-e4nb4CDZU4k0WRVhz1Wvl7d+hFsedObSauDHKtZwU9kt7gdYEAzKgnrSCTHsEaXrDumdrkCYTeZ0Tmyk7uV4tw==", - "license": "MIT", - "dependencies": { - "@date-io/core": "^2.17.0" - }, - "peerDependencies": { - "moment": "^2.24.0" - }, - "peerDependenciesMeta": { - "moment": { - "optional": true - } - } - }, - "node_modules/@dnd-kit/accessibility": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz", - "integrity": "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/@dnd-kit/core": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", - "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@dnd-kit/accessibility": "^3.1.1", - "@dnd-kit/utilities": "^3.2.2", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@dnd-kit/sortable": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-10.0.0.tgz", - "integrity": "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@dnd-kit/utilities": "^3.2.2", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@dnd-kit/core": "^6.3.0", - "react": ">=16.8.0" - } - }, - "node_modules/@dnd-kit/utilities": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.2.tgz", - "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/@dual-bundle/import-meta-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@emnapi/core": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", - "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.0.2", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", - "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", - "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emotion/babel-plugin": { - "version": "11.13.5", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", - "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.2", - "@emotion/memoize": "^0.9.0", - "@emotion/serialize": "^1.3.3", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.2.0" - } - }, - "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "license": "MIT" - }, - "node_modules/@emotion/cache": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", - "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", - "license": "MIT", - "dependencies": { - "@emotion/memoize": "^0.9.0", - "@emotion/sheet": "^1.4.0", - "@emotion/utils": "^1.4.2", - "@emotion/weak-memoize": "^0.4.0", - "stylis": "4.2.0" - } - }, - "node_modules/@emotion/hash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", - "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", - "license": "MIT" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", - "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", - "license": "MIT", - "dependencies": { - "@emotion/memoize": "^0.9.0" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", - "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", - "license": "MIT" - }, - "node_modules/@emotion/react": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", - "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.13.5", - "@emotion/cache": "^11.14.0", - "@emotion/serialize": "^1.3.3", - "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", - "@emotion/utils": "^1.4.2", - "@emotion/weak-memoize": "^0.4.0", - "hoist-non-react-statics": "^3.3.1" - }, - "peerDependencies": { - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/serialize": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", - "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", - "license": "MIT", - "dependencies": { - "@emotion/hash": "^0.9.2", - "@emotion/memoize": "^0.9.0", - "@emotion/unitless": "^0.10.0", - "@emotion/utils": "^1.4.2", - "csstype": "^3.0.2" - } - }, - "node_modules/@emotion/sheet": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", - "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", - "license": "MIT" - }, - "node_modules/@emotion/styled": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", - "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.13.5", - "@emotion/is-prop-valid": "^1.3.0", - "@emotion/serialize": "^1.3.3", - "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", - "@emotion/utils": "^1.4.2" - }, - "peerDependencies": { - "@emotion/react": "^11.0.0-rc.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/unitless": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", - "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", - "license": "MIT" - }, - "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", - "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", - "license": "MIT", - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/@emotion/utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", - "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", - "license": "MIT" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", - "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", - "license": "MIT" - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", - "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", - "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", - "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", - "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", - "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", - "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", - "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", - "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", - "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", - "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", - "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", - "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", - "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", - "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", - "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", - "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", - "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", - "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", - "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", - "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", - "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", - "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", - "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", - "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", - "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", - "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@faker-js/faker": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.4.1.tgz", - "integrity": "sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/fakerjs" - } - ], - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0", - "npm": ">=6.14.13" - } - }, - "node_modules/@figspec/components": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@figspec/components/-/components-1.0.3.tgz", - "integrity": "sha512-fBwHzJ4ouuOUJEi+yBZIrOy+0/fAjB3AeTcIHTT1PRxLz8P63xwC7R0EsIJXhScIcc+PljGmqbbVJCjLsnaGYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "lit": "^2.1.3" - } - }, - "node_modules/@figspec/react": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@figspec/react/-/react-1.0.4.tgz", - "integrity": "sha512-jaPvkIef4d6NjsRiw91OZabrfdPH9FtoPGYcY5mpXjYEcdUqIq1aHtLq3SkMVyVysEapTEJ6yS8amy93MyXBEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@figspec/components": "^1.0.1", - "@lit-labs/react": "^1.0.2" - }, - "peerDependencies": { - "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.0.tgz", - "integrity": "sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==", - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.9" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.0.tgz", - "integrity": "sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==", - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.7.0", - "@floating-ui/utils": "^0.2.9" - } - }, - "node_modules/@floating-ui/react": { - "version": "0.26.28", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", - "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.1.2", - "@floating-ui/utils": "^0.2.8", - "tabbable": "^6.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", - "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", - "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", - "license": "MIT" - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@joshwooding/vite-plugin-react-docgen-typescript": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.3.0.tgz", - "integrity": "sha512-2D6y7fNvFmsLmRt6UCOFJPvFoPMJGT0Uh1Wg0RaigUp7kdQPs6yYn8Dmx6GZkOH/NW0yMTwRz/p0SRMMRo50vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "^7.2.0", - "glob-promise": "^4.2.0", - "magic-string": "^0.27.0", - "react-docgen-typescript": "^2.2.2" - }, - "peerDependencies": { - "typescript": ">= 4.3.x", - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@keyv/serialize": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.3.tgz", - "integrity": "sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3" - } - }, - "node_modules/@lit-labs/react": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@lit-labs/react/-/react-1.2.1.tgz", - "integrity": "sha512-DiZdJYFU0tBbdQkfwwRSwYyI/mcWkg3sWesKRsHUd4G+NekTmmeq9fzsurvcKTNVa0comNljwtg4Hvi1ds3V+A==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.3.0.tgz", - "integrity": "sha512-nQIWonJ6eFAvUUrSlwyHDm/aE8PBDu5kRpL0vHMg6K8fK3Diq1xdPjTnsJSwxABhaZ+5eBi1btQB5ShUTKo4nQ==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@lit/reactive-element": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", - "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.0.0" - } - }, - "node_modules/@mdx-js/react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", - "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/@microsoft/api-extractor": { - "version": "7.39.0", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.39.0.tgz", - "integrity": "sha512-PuXxzadgnvp+wdeZFPonssRAj/EW4Gm4s75TXzPk09h3wJ8RS3x7typf95B4vwZRrPTQBGopdUl+/vHvlPdAcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@microsoft/api-extractor-model": "7.28.3", - "@microsoft/tsdoc": "0.14.2", - "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "3.62.0", - "@rushstack/rig-package": "0.5.1", - "@rushstack/ts-command-line": "4.17.1", - "colors": "~1.2.1", - "lodash": "~4.17.15", - "resolve": "~1.22.1", - "semver": "~7.5.4", - "source-map": "~0.6.1", - "typescript": "5.3.3" - }, - "bin": { - "api-extractor": "bin/api-extractor" - } - }, - "node_modules/@microsoft/api-extractor-model": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.3.tgz", - "integrity": "sha512-wT/kB2oDbdZXITyDh2SQLzaWwTOFbV326fP0pUwNW00WeliARs0qjmXBWmGWardEzp2U3/axkO3Lboqun6vrig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "3.62.0" - } - }, - "node_modules/@microsoft/api-extractor/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@microsoft/api-extractor/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@microsoft/api-extractor/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@microsoft/api-extractor/node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@microsoft/api-extractor/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/@microsoft/tsdoc": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", - "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", - "dev": true, - "license": "MIT" - }, - "node_modules/@microsoft/tsdoc-config": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", - "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "ajv": "~6.12.6", - "jju": "~1.4.0", - "resolve": "~1.19.0" - } - }, - "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@mui/core-downloads-tracker": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.17.1.tgz", - "integrity": "sha512-OcZj+cs6EfUD39IoPBOgN61zf1XFVY+imsGoBDwXeSq2UHJZE3N59zzBOVjclck91Ne3e9gudONOeILvHCIhUA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - } - }, - "node_modules/@mui/material": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.17.1.tgz", - "integrity": "sha512-2B33kQf+GmPnrvXXweWAx+crbiUEsxCdCN979QDYnlH9ox4pd+0/IBriWLV+l6ORoBF60w39cWjFnJYGFdzXcw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.9", - "@mui/core-downloads-tracker": "^5.17.1", - "@mui/system": "^5.17.1", - "@mui/types": "~7.2.15", - "@mui/utils": "^5.17.1", - "@popperjs/core": "^2.11.8", - "@types/react-transition-group": "^4.4.10", - "clsx": "^2.1.0", - "csstype": "^3.1.3", - "prop-types": "^15.8.1", - "react-is": "^19.0.0", - "react-transition-group": "^4.4.5" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/private-theming": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.17.1.tgz", - "integrity": "sha512-XMxU0NTYcKqdsG8LRmSoxERPXwMbp16sIXPcLVgLGII/bVNagX0xaheWAwFv8+zDK7tI3ajllkuD3GZZE++ICQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.17.1", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/styled-engine": { - "version": "5.16.14", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.14.tgz", - "integrity": "sha512-UAiMPZABZ7p8mUW4akDV6O7N3+4DatStpXMZwPlt+H/dA0lt67qawN021MNND+4QTpjaiMYxbhKZeQcyWCbuKw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.9", - "@emotion/cache": "^11.13.5", - "csstype": "^3.1.3", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@emotion/react": "^11.4.1", - "@emotion/styled": "^11.3.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - } - } - }, - "node_modules/@mui/system": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.17.1.tgz", - "integrity": "sha512-aJrmGfQpyF0U4D4xYwA6ueVtQcEMebET43CUmKMP7e7iFh3sMIF3sBR0l8Urb4pqx1CBjHAaWgB0ojpND4Q3Jg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.17.1", - "@mui/styled-engine": "^5.16.14", - "@mui/types": "~7.2.15", - "@mui/utils": "^5.17.1", - "clsx": "^2.1.0", - "csstype": "^3.1.3", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/types": { - "version": "7.2.24", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.24.tgz", - "integrity": "sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/utils": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.17.1.tgz", - "integrity": "sha512-jEZ8FTqInt2WzxDV8bhImWBqeQRD99c/id/fq83H0ER9tFl+sfZlaAoCdznGvbSQQ9ividMxqSV2c7cC1vBcQg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.9", - "@mui/types": "~7.2.15", - "@types/prop-types": "^15.7.12", - "clsx": "^2.1.1", - "prop-types": "^15.8.1", - "react-is": "^19.0.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/x-date-pickers": { - "version": "5.0.20", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-5.0.20.tgz", - "integrity": "sha512-ERukSeHIoNLbI1C2XRhF9wRhqfsr+Q4B1SAw2ZlU7CWgcG8UBOxgqRKDEOVAIoSWL+DWT6GRuQjOKvj6UXZceA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@date-io/core": "^2.15.0", - "@date-io/date-fns": "^2.15.0", - "@date-io/dayjs": "^2.15.0", - "@date-io/luxon": "^2.15.0", - "@date-io/moment": "^2.15.0", - "@mui/utils": "^5.10.3", - "@types/react-transition-group": "^4.4.5", - "clsx": "^1.2.1", - "prop-types": "^15.7.2", - "react-transition-group": "^4.4.5", - "rifm": "^0.12.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@emotion/react": "^11.9.0", - "@emotion/styled": "^11.8.1", - "@mui/material": "^5.4.1", - "@mui/system": "^5.4.1", - "date-fns": "^2.25.0", - "dayjs": "^1.10.7", - "luxon": "^1.28.0 || ^2.0.0 || ^3.0.0", - "moment": "^2.29.1", - "react": "^17.0.2 || ^18.0.0", - "react-dom": "^17.0.2 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "date-fns": { - "optional": true - }, - "dayjs": { - "optional": true - }, - "luxon": { - "optional": true - }, - "moment": { - "optional": true - } - } - }, - "node_modules/@mui/x-date-pickers/node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.10.tgz", - "integrity": "sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.9.0" - } - }, - "node_modules/@next/env": { - "version": "14.2.29", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.29.tgz", - "integrity": "sha512-UzgLR2eBfhKIQt0aJ7PWH7XRPYw7SXz0Fpzdl5THjUnvxy4kfBk9OU4RNPNiETewEEtaBcExNFNn1QWH8wQTjg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.5.11", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.11.tgz", - "integrity": "sha512-0qjDhes9UTSxirt/dYzrv20hs8SUhcIOvlEioj5+XucVrBHihnAk6Om7Vzk+VZ2nRE7tcShm/6lH1xSkJ3XMpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "7.1.7" - } - }, - "node_modules/@next/eslint-plugin-next/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@next/eslint-plugin-next/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@next/eslint-plugin-next/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.29", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.29.tgz", - "integrity": "sha512-wWtrAaxCVMejxPHFb1SK/PVV1WDIrXGs9ki0C/kUM8ubKHQm+3hU9MouUywCw8Wbhj3pewfHT2wjunLEr/TaLA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.2.29", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.29.tgz", - "integrity": "sha512-7Z/jk+6EVBj4pNLw/JQrvZVrAh9Bv8q81zCFSfvTMZ51WySyEHWVpwCEaJY910LyBftv2F37kuDPQm0w9CEXyg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.29", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.29.tgz", - "integrity": "sha512-o6hrz5xRBwi+G7JFTHc+RUsXo2lVXEfwh4/qsuWBMQq6aut+0w98WEnoNwAwt7hkEqegzvazf81dNiwo7KjITw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.29", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.29.tgz", - "integrity": "sha512-9i+JEHBOVgqxQ92HHRFlSW1EQXqa/89IVjtHgOqsShCcB/ZBjTtkWGi+SGCJaYyWkr/lzu51NTMCfKuBf7ULNw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.29", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.29.tgz", - "integrity": "sha512-B7JtMbkUwHijrGBOhgSQu2ncbCYq9E7PZ7MX58kxheiEOwdkM+jGx0cBb+rN5AeqF96JypEppK6i/bEL9T13lA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.29", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.29.tgz", - "integrity": "sha512-yCcZo1OrO3aQ38B5zctqKU1Z3klOohIxug6qdiKO3Q3qNye/1n6XIs01YJ+Uf+TdpZQ0fNrOQI2HrTLF3Zprnw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.29", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.29.tgz", - "integrity": "sha512-WnrfeOEtTVidI9Z6jDLy+gxrpDcEJtZva54LYC0bSKQqmyuHzl0ego+v0F/v2aXq0am67BRqo/ybmmt45Tzo4A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.29", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.29.tgz", - "integrity": "sha512-vkcriFROT4wsTdSeIzbxaZjTNTFKjSYmLd8q/GVH3Dn8JmYjUKOuKXHK8n+lovW/kdcpIvydO5GtN+It2CvKWA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.29", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.29.tgz", - "integrity": "sha512-iPPwUEKnVs7pwR0EBLJlwxLD7TTHWS/AoVZx1l9ZQzfQciqaFEr5AlYzA2uB6Fyby1IF18t4PL0nTpB+k4Tzlw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.9", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz", - "integrity": "sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", - "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", - "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", - "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", - "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", - "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", - "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", - "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", - "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", - "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", - "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", - "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", - "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", - "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", - "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", - "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", - "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", - "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", - "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", - "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", - "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", - "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", - "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rushstack/node-core-library": { - "version": "3.62.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.62.0.tgz", - "integrity": "sha512-88aJn2h8UpSvdwuDXBv1/v1heM6GnBf3RjEy6ZPP7UnzHNCqOHA2Ut+ScYUbXcqIdfew9JlTAe3g+cnX9xQ/Aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.22.1", - "semver": "~7.5.4", - "z-schema": "~5.0.2" - }, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@rushstack/node-core-library/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/@rushstack/rig-package": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.1.tgz", - "integrity": "sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve": "~1.22.1", - "strip-json-comments": "~3.1.1" - } - }, - "node_modules/@rushstack/ts-command-line": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.17.1.tgz", - "integrity": "sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" - } - }, - "node_modules/@rushstack/ts-command-line/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@storybook/addon-a11y": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.4.2.tgz", - "integrity": "sha512-v6Tl+qr3Eslf06qmt2hq1ticYi7oRLIFosePQUOlW1+cgdIbV+r1IxsZ7creCDWX4kIMTbUFhbET9LTYGHem1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addon-highlight": "8.4.2", - "axe-core": "^4.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/addon-actions": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.4.2.tgz", - "integrity": "sha512-+hA200XN5aeA4T3jq8IifQq6Y+9FyNQ0Q+blM1L0Tl7WLzBc7B1kHQnKvhSj5pvMSBWc/Q/kY7Ev5t9gdOu13g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "@types/uuid": "^9.0.1", - "dequal": "^2.0.2", - "polished": "^4.2.2", - "uuid": "^9.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/addon-backgrounds": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.4.2.tgz", - "integrity": "sha512-s4uag5VKuk8q2MSnuNS7Sv+v1/mykzGPXe/zZRW2ammtkdHp8Uy78eQS2G0aiG02chXCX+qQgWMyy5QItDcTFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/addon-controls": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.4.2.tgz", - "integrity": "sha512-raCbHEj1xl4F3wKH6IdfEXNRaxKpY4QGhjSTE8Pte5iJSVhKG86taLqqRr+4dC7H1/LVMPU1XCGV4mkgDGtyxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "dequal": "^2.0.2", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/addon-designs": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-designs/-/addon-designs-8.2.1.tgz", - "integrity": "sha512-orwihs1D5alhh4Qu3BSJKbSgQOdSagvRX/25m5fYZQAaqVErBY0lRR4vCAU/G/STkcdv+MHwIQ5U+0kX5Tm2+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@figspec/react": "^1.0.0" - }, - "peerDependencies": { - "@storybook/blocks": "^8.0.0 || ^8.1.0-0 || ^8.2.0-0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0", - "@storybook/components": "^8.0.0 || ^8.1.0-0 || ^8.2.0-0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0", - "@storybook/theming": "^8.0.0 || ^8.1.0-0 || ^8.2.0-0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0", - "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" - }, - "peerDependenciesMeta": { - "@storybook/blocks": { - "optional": true - }, - "@storybook/components": { - "optional": true - }, - "@storybook/theming": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/addon-docs": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.4.2.tgz", - "integrity": "sha512-jIpykha7hv2Inlrq31ZoYg2QhuCuvcO+Q+uvhT45RDTB+2US/fg3rJINKlw2Djq8RPPOXvty5W0yvE6CrWKhnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.4.2", - "@storybook/csf-plugin": "8.4.2", - "@storybook/react-dom-shim": "8.4.2", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/addon-essentials": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.4.2.tgz", - "integrity": "sha512-+/vfPrXM/GWU3Kbrg92PepwAZr7lOeulTTYF4THK0CL3DfUUlkGNpBPLP5PtjCuIkVrTCjXiIEdVWk47d5m2+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addon-actions": "8.4.2", - "@storybook/addon-backgrounds": "8.4.2", - "@storybook/addon-controls": "8.4.2", - "@storybook/addon-docs": "8.4.2", - "@storybook/addon-highlight": "8.4.2", - "@storybook/addon-measure": "8.4.2", - "@storybook/addon-outline": "8.4.2", - "@storybook/addon-toolbars": "8.4.2", - "@storybook/addon-viewport": "8.4.2", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/addon-highlight": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.4.2.tgz", - "integrity": "sha512-vTtwp7nyJ09SXrsMnH+pukCjHjRMjQXgHZHxvbrv09uoH8ldQMv9B7u+X+9Wcy/jYSKFz/ng7pWo4b4a2oXHkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/addon-mdx-gfm": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-mdx-gfm/-/addon-mdx-gfm-8.4.2.tgz", - "integrity": "sha512-09uK2PFm+NZHQHBWYeH6oZedz54+OF5CcWeQe7oKTsT9NRqEjVvlxew2Bou1qyFa6MR58B2EoJZrUldptAaIgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "remark-gfm": "^4.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/addon-measure": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.4.2.tgz", - "integrity": "sha512-z+j6xQwcUBSpgzl1XDU+xU4YYgLraLMljECW7NvRNyJ/PYixvol8R3wtzWbr+CBpxmvbXjEJCPlF+EjF9/mBWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/addon-outline": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.4.2.tgz", - "integrity": "sha512-oTMlPEyT4CBqzcQbfemoJzJ6yzeRAmvrAx9ssaBcnQQRsKxo0D2Ri/Jmm6SNcR0yBHxYRkvIH+2phLw8aiflCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/addon-toolbars": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.4.2.tgz", - "integrity": "sha512-DidzW/NQS224niMJIjcJI2ls83emqygUcS9GYNGgdc5Xwro/TPgGYOXP2qnXgYUxXQTHbrxmIbHdEehxC7CcYQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/addon-viewport": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.4.2.tgz", - "integrity": "sha512-qVQ2UaxCNsUSFHnAAAizNPIJ/QwfMg7p5bBdpYROTZXJe+bxVp0rFzZmQgHZ3/sn+lzE4ItM4QEfxkfQUWi1ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/blocks": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.4.2.tgz", - "integrity": "sha512-yAAvmOWaD8gIrepOxCh/RxQqd/1xZIwd/V+gsvAhW/thawN+SpI+zK63gmcqAPLX84hJ3Dh5pegRk0SoHNuDVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/csf": "^0.1.11", - "@storybook/icons": "^1.2.12", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "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", - "storybook": "^8.4.2" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/builder-vite": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.4.2.tgz", - "integrity": "sha512-dO5FB5yH1C6tr/kBHn1frvGwp8Pt0D1apgXWkJ5ITWEUfh6WwOqX2fqsWsqaNwE7gP0qn0XgwCIEkI/4Mj55SA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/csf-plugin": "8.4.2", - "browser-assert": "^1.2.1", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2", - "vite": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/@storybook/components": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.4.2.tgz", - "integrity": "sha512-+W59oF7D73LAxLNmCfFrfs98cH9pyNHK9HlJoO5/lKbK4IdWhhOoqUR/AJ3ueksoLuetFat4DxyE8SN1H4Bvrg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@storybook/core": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.4.2.tgz", - "integrity": "sha512-hF8GWoUZTjwwuV5j4OLhMHZtZQL/NYcVUBReC2Ba06c8PkFIKqKZwATr1zKd301gQ5Qwcn9WgmZxJTMgdKQtOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/csf": "^0.1.11", - "better-opn": "^3.0.2", - "browser-assert": "^1.2.1", - "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0", - "esbuild-register": "^3.5.0", - "jsdoc-type-pratt-parser": "^4.0.0", - "process": "^0.11.10", - "recast": "^0.23.5", - "semver": "^7.6.2", - "util": "^0.12.5", - "ws": "^8.2.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "prettier": "^2 || ^3" - }, - "peerDependenciesMeta": { - "prettier": { - "optional": true - } - } - }, - "node_modules/@storybook/core/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/csf": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.13.tgz", - "integrity": "sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^2.19.0" - } - }, - "node_modules/@storybook/csf-plugin": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.4.2.tgz", - "integrity": "sha512-1f0t6W5xbC1sSAHHs3uXYPIQs2NXAEtIGqn6X9i3xbbub6hDS8PF8BIm7dOjQ8dZOPp7d9ltR64V5CoLlsOigA==", - "dev": true, - "license": "MIT", - "dependencies": { - "unplugin": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/global": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", - "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/icons": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.4.0.tgz", - "integrity": "sha512-Td73IeJxOyalzvjQL+JXx72jlIYHgs+REaHiREOqfpo3A2AYYG71AUbcv+lg7mEDIweKVCxsMQ0UKo634c8XeA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - }, - "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" - } - }, - "node_modules/@storybook/manager-api": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.4.2.tgz", - "integrity": "sha512-rhPc4cgQDKDH8NUyRh/ZaJW7QIhR/PO5MNX4xc+vz71sM2nO7ONA/FrgLtCuu4SULdwilEPvGefYvLK0dE+Caw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@storybook/preview-api": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.4.2.tgz", - "integrity": "sha512-5X/xvIvDPaWJKUBCo5zVeBbbjkhnwcI2KPkuOgrHVRRhuQ5WqD0RYxVtOOFNyQXme7g0nNl5RFNgvT7qv9qGeg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@storybook/react": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.4.2.tgz", - "integrity": "sha512-rO5/aVKBVhIKENcL7G8ud4QKC5OyWBPCkJIvY6XUHIuhErJy9/4pP+sZ85jypVwx5kq+EqCPF8AEOWjIxB/4/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/components": "8.4.2", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "8.4.2", - "@storybook/preview-api": "8.4.2", - "@storybook/react-dom-shim": "8.4.2", - "@storybook/theming": "8.4.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "@storybook/test": "8.4.2", - "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", - "storybook": "^8.4.2", - "typescript": ">= 4.2.x" - }, - "peerDependenciesMeta": { - "@storybook/test": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/react-dom-shim": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.4.2.tgz", - "integrity": "sha512-FZVTM1f34FpGnf6e3MDIKkz05gmn8H9wEccvQAgr8pEFe8VWfrpVWeUrmatSAfgrCMNXYC1avDend8UX6IM8Fg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "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", - "storybook": "^8.4.2" - } - }, - "node_modules/@storybook/react-vite": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-8.4.2.tgz", - "integrity": "sha512-OoXaW/V1AqLggMyniRcnuwmqQ1/OtSn38t31lePX4nDDeJhbGT3ZPldRrwvsLb0EaD3N27uoL+QbAOgsYJIhwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@joshwooding/vite-plugin-react-docgen-typescript": "0.3.0", - "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "8.4.2", - "@storybook/react": "8.4.2", - "find-up": "^5.0.0", - "magic-string": "^0.30.0", - "react-docgen": "^7.0.0", - "resolve": "^1.22.8", - "tsconfig-paths": "^4.2.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "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", - "storybook": "^8.4.2", - "vite": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/@storybook/theming": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.4.2.tgz", - "integrity": "sha512-9j4fnu5LcV+qSs1rdwf61Bt14lms0T1LOZkHxGNcS1c1oH+cPS+sxECh2lxtni+mvOAHUlBs9pKhVZzRPdWpvg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", - "@svgr/babel-plugin-transform-svg-component": "8.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3", - "snake-case": "^3.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", - "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@babel/plugin-transform-react-constant-elements": "^7.21.3", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.21.0", - "@svgr/core": "8.1.0", - "@svgr/plugin-jsx": "8.1.0", - "@svgr/plugin-svgo": "8.1.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@swc-node/core": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/@swc-node/core/-/core-1.13.3.tgz", - "integrity": "sha512-OGsvXIid2Go21kiNqeTIn79jcaX4l0G93X2rAnas4LFoDyA9wAwVK7xZdm+QsKoMn5Mus2yFLCc4OtX2dD/PWA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@swc/core": ">= 1.4.13", - "@swc/types": ">= 0.1" - } - }, - "node_modules/@swc-node/register": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc-node/register/-/register-1.9.2.tgz", - "integrity": "sha512-BBjg0QNuEEmJSoU/++JOXhrjWdu3PTyYeJWsvchsI0Aqtj8ICkz/DqlwtXbmZVZ5vuDPpTfFlwDBZe81zgShMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@swc-node/core": "^1.13.1", - "@swc-node/sourcemap-support": "^0.5.0", - "colorette": "^2.0.20", - "debug": "^4.3.4", - "pirates": "^4.0.6", - "tslib": "^2.6.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@swc/core": ">= 1.4.13", - "typescript": ">= 4.3" - } - }, - "node_modules/@swc-node/sourcemap-support": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc-node/sourcemap-support/-/sourcemap-support-0.5.1.tgz", - "integrity": "sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map-support": "^0.5.21", - "tslib": "^2.6.3" - } - }, - "node_modules/@swc/core": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.5.29.tgz", - "integrity": "sha512-nvTtHJI43DUSOAf3h9XsqYg8YXKc0/N4il9y4j0xAkO0ekgDNo+3+jbw6MInawjKJF9uulyr+f5bAutTsOKVlw==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.8" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.5.29", - "@swc/core-darwin-x64": "1.5.29", - "@swc/core-linux-arm-gnueabihf": "1.5.29", - "@swc/core-linux-arm64-gnu": "1.5.29", - "@swc/core-linux-arm64-musl": "1.5.29", - "@swc/core-linux-x64-gnu": "1.5.29", - "@swc/core-linux-x64-musl": "1.5.29", - "@swc/core-win32-arm64-msvc": "1.5.29", - "@swc/core-win32-ia32-msvc": "1.5.29", - "@swc/core-win32-x64-msvc": "1.5.29" - }, - "peerDependencies": { - "@swc/helpers": "*" - }, - "peerDependenciesMeta": { - "@swc/helpers": { - "optional": true - } - } - }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.29.tgz", - "integrity": "sha512-6F/sSxpHaq3nzg2ADv9FHLi4Fu2A8w8vP8Ich8gIl16D2htStlwnaPmCLjRswO+cFkzgVqy/l01gzNGWd4DFqA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.29.tgz", - "integrity": "sha512-rF/rXkvUOTdTIfoYbmszbSUGsCyvqACqy1VeP3nXONS+LxFl4bRmRcUTRrblL7IE5RTMCKUuPbqbQSE2hK7bqg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.29.tgz", - "integrity": "sha512-2OAPL8iWBsmmwkjGXqvuUhbmmoLxS1xNXiMq87EsnCNMAKohGc7wJkdAOUL6J/YFpean/vwMWg64rJD4pycBeg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.29.tgz", - "integrity": "sha512-eH/Q9+8O5qhSxMestZnhuS1xqQMr6M7SolZYxiXJqxArXYILLCF+nq2R9SxuMl0CfjHSpb6+hHPk/HXy54eIRA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.29.tgz", - "integrity": "sha512-TERh2OICAJz+SdDIK9+0GyTUwF6r4xDlFmpoiHKHrrD/Hh3u+6Zue0d7jQ/he/i80GDn4tJQkHlZys+RZL5UZg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.29.tgz", - "integrity": "sha512-WMDPqU7Ji9dJpA+Llek2p9t7pcy7Bob8ggPUvgsIlv3R/eesF9DIzSbrgl6j3EAEPB9LFdSafsgf6kT/qnvqFg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.29.tgz", - "integrity": "sha512-DO14glwpdKY4POSN0201OnGg1+ziaSVr6/RFzuSLggshwXeeyVORiHv3baj7NENhJhWhUy3NZlDsXLnRFkmhHQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.29.tgz", - "integrity": "sha512-V3Y1+a1zG1zpYXUMqPIHEMEOd+rHoVnIpO/KTyFwAmKVu8v+/xPEVx/AGoYE67x4vDAAvPQrKI3Aokilqa5yVg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.29.tgz", - "integrity": "sha512-OrM6yfXw4wXhnVFosOJzarw0Fdz5Y0okgHfn9oFbTPJhoqxV5Rdmd6kXxWu2RiVKs6kGSJFZXHDeUq2w5rTIMg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.29.tgz", - "integrity": "sha512-eD/gnxqKyZQQR0hR7TMkIlJ+nCF9dzYmVVNbYZWuA1Xy94aBPUsEk3Uw3oG7q6R3ErrEUPP0FNf2ztEnv+I+dw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@swc/helpers": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@swc/types": { - "version": "0.1.21", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.21.tgz", - "integrity": "sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3" - } - }, - "node_modules/@tanstack/react-table": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.21.3.tgz", - "integrity": "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==", - "license": "MIT", - "dependencies": { - "@tanstack/table-core": "8.21.3" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "node_modules/@tanstack/table-core": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", - "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, - "node_modules/@tehik-ee/tedi-core": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@tehik-ee/tedi-core/-/tedi-core-1.13.2.tgz", - "integrity": "sha512-QTCqLaqrZYqRuYSBv+y8GWtUhM6v/PrmRvD2Z9JHvJu+t7NoDI86H0F1wZtUzUhf5+GxS+94yiLrH/d6p/ga9Q==" - }, - "node_modules/@testing-library/dom": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", - "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@testing-library/jest-dom": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.3.tgz", - "integrity": "sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@adobe/css-tools": "^4.4.0", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.21", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@testing-library/react": { - "version": "15.0.6", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-15.0.6.tgz", - "integrity": "sha512-UlbazRtEpQClFOiYp+1BapMT+xyqWMnE+hh9tn5DQ6gmlE7AIZWcGpzZukmDZuFk3By01oiqOf8lRedLS4k6xQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^10.0.0", - "@types/react-dom": "^18.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/react": "^18.0.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@testing-library/react/node_modules/@testing-library/dom": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", - "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.3.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@testing-library/react/node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/@testing-library/user-event": { - "version": "14.6.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", - "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "peerDependencies": { - "@testing-library/dom": ">=7.21.4" - } - }, - "node_modules/@textlint/ast-node-types": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-12.6.1.tgz", - "integrity": "sha512-uzlJ+ZsCAyJm+lBi7j0UeBbj+Oy6w/VWoGJ3iHRHE5eZ8Z4iK66mq+PG/spupmbllLtz77OJbY89BYqgFyjXmA==", - "license": "MIT" - }, - "node_modules/@textlint/markdown-to-ast": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-12.0.2.tgz", - "integrity": "sha512-xAJ4U/fOL7FoX4bYeYRCsSIeTxFqzKd944AsVxAYrz2ZfKH0TtBSNDDtN22uBEXOrSCCR12Z7QuMcp+URyYWlw==", - "license": "MIT", - "dependencies": { - "@textlint/ast-node-types": "^12.0.0", - "debug": "^4.3.2", - "remark-footnotes": "^3.0.0", - "remark-frontmatter": "^3.0.0", - "remark-gfm": "^1.0.0", - "remark-parse": "^9.0.0", - "traverse": "^0.6.6", - "unified": "^9.2.1" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/mdast-util-find-and-replace": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", - "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^4.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/mdast-util-gfm": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz", - "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==", - "license": "MIT", - "dependencies": { - "mdast-util-gfm-autolink-literal": "^0.1.0", - "mdast-util-gfm-strikethrough": "^0.2.0", - "mdast-util-gfm-table": "^0.1.0", - "mdast-util-gfm-task-list-item": "^0.1.0", - "mdast-util-to-markdown": "^0.6.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/mdast-util-gfm-autolink-literal": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz", - "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==", - "license": "MIT", - "dependencies": { - "ccount": "^1.0.0", - "mdast-util-find-and-replace": "^1.1.0", - "micromark": "^2.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/mdast-util-gfm-strikethrough": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", - "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", - "license": "MIT", - "dependencies": { - "mdast-util-to-markdown": "^0.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/mdast-util-gfm-table": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", - "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", - "license": "MIT", - "dependencies": { - "markdown-table": "^2.0.0", - "mdast-util-to-markdown": "~0.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/mdast-util-gfm-task-list-item": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", - "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", - "license": "MIT", - "dependencies": { - "mdast-util-to-markdown": "~0.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/micromark-extension-gfm": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", - "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", - "license": "MIT", - "dependencies": { - "micromark": "~2.11.0", - "micromark-extension-gfm-autolink-literal": "~0.5.0", - "micromark-extension-gfm-strikethrough": "~0.6.5", - "micromark-extension-gfm-table": "~0.4.0", - "micromark-extension-gfm-tagfilter": "~0.3.0", - "micromark-extension-gfm-task-list-item": "~0.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/micromark-extension-gfm-autolink-literal": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", - "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", - "license": "MIT", - "dependencies": { - "micromark": "~2.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/micromark-extension-gfm-strikethrough": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", - "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", - "license": "MIT", - "dependencies": { - "micromark": "~2.11.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/micromark-extension-gfm-table": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", - "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", - "license": "MIT", - "dependencies": { - "micromark": "~2.11.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/micromark-extension-gfm-tagfilter": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", - "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/micromark-extension-gfm-task-list-item": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", - "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", - "license": "MIT", - "dependencies": { - "micromark": "~2.11.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/remark-gfm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", - "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", - "license": "MIT", - "dependencies": { - "mdast-util-gfm": "^0.1.0", - "micromark-extension-gfm": "^0.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@textlint/markdown-to-ast/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/argparse": { - "version": "1.0.38", - "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", - "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/aria-query": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/css-modules": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/css-modules/-/css-modules-1.0.5.tgz", - "integrity": "sha512-oeKafs/df9lwOvtfiXVliZsocFVOexK9PZtLQWuPeuVCFR7jwiqlg60lu80JTe5NFNtH3tnV6Fs/ySR8BUPHAw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/doctrine": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.9.tgz", - "integrity": "sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/trusted-types": "*" - } - }, - "node_modules/@types/draft-js": { - "version": "0.11.18", - "resolved": "https://registry.npmjs.org/@types/draft-js/-/draft-js-0.11.18.tgz", - "integrity": "sha512-lP6yJ+EKv5tcG1dflWgDKeezdwBa8wJ7KkiNrrHqXuXhl/VGes1SKjEfKHDZqOz19KQbrAhFvNhDPWwnQXYZGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*", - "immutable": "~3.7.4" - } - }, - "node_modules/@types/eslint": { - "version": "8.56.12", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", - "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", - "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==", - "license": "MIT", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.14", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", - "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/jest/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@types/jest/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.17.tgz", - "integrity": "sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash-es": { - "version": "4.17.12", - "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", - "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/lodash": "*" - } - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.11.28", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz", - "integrity": "sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "license": "MIT" - }, - "node_modules/@types/postcss-modules-local-by-default": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.2.tgz", - "integrity": "sha512-CtYCcD+L+trB3reJPny+bKWKMzPfxEyQpKIwit7kErnOexf5/faaGpkFy4I5AwbV4hp1sk7/aTg0tt0B67VkLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/@types/postcss-modules-scope": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/postcss-modules-scope/-/postcss-modules-scope-3.0.4.tgz", - "integrity": "sha512-//ygSisVq9kVI0sqx3UPLzWIMCmtSVrzdljtuaAEJtGoGnpjBikZ2sXO5MpH9SnWX9HRfXxHifDAXcQjupWnIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", - "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-test-renderer": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.3.1.tgz", - "integrity": "sha512-vAhnk0tG2eGa37lkU9+s5SoroCsRI08xnsWFiAXOuPH2jqzMbcXvKExXViPi1P5fIklDeCvXqyrdmipFaSkZrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "^18" - } - }, - "node_modules/@types/react-transition-group": { - "version": "4.4.12", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", - "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/resolve": { - "version": "1.20.6", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.6.tgz", - "integrity": "sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", - "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/showdown": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/showdown/-/showdown-2.0.6.tgz", - "integrity": "sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz", - "integrity": "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.33.0", - "@typescript-eslint/types": "^8.33.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/project-service/node_modules/@typescript-eslint/types": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz", - "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz", - "integrity": "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.7.8.tgz", - "integrity": "sha512-rsRK8T7yxraNRDmpFLZCWqpea6OlXPNRRCjWMx24O1V86KFol7u2gj9zJCv6zB1oJjtnzWceuqdnCgOipFcJPA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.7.8.tgz", - "integrity": "sha512-16yEMWa+Olqkk8Kl6Bu0ltT5OgEedkSAsxcz1B3yEctrDYp3EMBu/5PPAGhWVGnwhtf3hNe3y15gfYBAjOv5tQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.7.8.tgz", - "integrity": "sha512-ST4uqF6FmdZQgv+Q73FU1uHzppeT4mhX3IIEmHlLObrv5Ep50olWRz0iQ4PWovadjHMTAmpuJAGaAuCZYb7UAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.7.8.tgz", - "integrity": "sha512-Z/A/4Rm2VWku2g25C3tVb986fY6unx5jaaCFpx1pbAj0OKkyuJ5wcQLHvNbIcJ9qhiYwXfrkB7JNlxrAbg7YFg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.7.8.tgz", - "integrity": "sha512-HN0p7o38qKmDo3bZUiQa6gP7Qhf0sKgJZtRfSHi6JL2Gi4NaUVF0EO1sQ1RHbeQ4VvfjUGMh3QE5dxEh06BgQQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.7.8.tgz", - "integrity": "sha512-HsoVqDBt9G69AN0KWeDNJW+7i8KFlwxrbbnJffgTGpiZd6Jw+Q95sqkXp8y458KhKduKLmXfVZGnKBTNxAgPjw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.7.8.tgz", - "integrity": "sha512-VfR2yTDUbUvn+e/Aw22CC9fQg9zdShHAfwWctNBdOk7w9CHWl2OtYlcMvjzMAns8QxoHQoqn3/CEnZ4Ts7hfrA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.7.8.tgz", - "integrity": "sha512-xUauVQNz4uDgs4UJJiUAwMe3N0PA0wvtImh7V0IFu++UKZJhssXbKHBRR4ecUJpUHCX2bc4Wc8sGsB6P+7BANg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.7.8.tgz", - "integrity": "sha512-GqyIB+CuSHGhhc8ph5RrurtNetYJjb6SctSHafqmdGcRuGi6uyTMR8l18hMEhZFsXdFMc/MpInPLvmNV22xn+A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.7.8.tgz", - "integrity": "sha512-eEU3rWIFRv60xaAbtsgwHNWRZGD7cqkpCvNtio/f1TjEE3HfKLzPNB24fA9X/8ZXQrGldE65b7UKK3PmO4eWIQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.7.8.tgz", - "integrity": "sha512-GVLI0f4I4TlLqEUoOFvTWedLsJEdvsD0+sxhdvQ5s+N+m2DSynTs8h9jxR0qQbKlpHWpc2Ortz3z48NHRT4l+w==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.7.8.tgz", - "integrity": "sha512-GX1pZ/4ncUreB0Rlp1l7bhKAZ8ZmvDIgXdeb5V2iK0eRRF332+6gRfR/r5LK88xfbtOpsmRHU6mQ4N8ZnwvGEA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.7.8.tgz", - "integrity": "sha512-n1N84MnsvDupzVuYqJGj+2pb9s8BI1A5RgXHvtVFHedGZVBCFjDpQVRlmsFMt6xZiKwDPaqsM16O/1isCUGt7w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.7.8.tgz", - "integrity": "sha512-x94WnaU5g+pCPDVedfnXzoG6lCOF2xFGebNwhtbJCWfceE94Zj8aysSxdxotlrZrxnz5D3ijtyFUYtpz04n39Q==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.10" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.7.8.tgz", - "integrity": "sha512-vst2u8EJZ5L6jhJ6iLis3w9rg16aYqRxQuBAMYQRVrPMI43693hLP7DuqyOBRKgsQXy9/jgh204k0ViHkqQgdg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.7.8.tgz", - "integrity": "sha512-yb3LZOLMFqnA+/ShlE1E5bpYPGDsA590VHHJPB+efnyowT776GJXBoh82em6O9WmYBUq57YblGTcMYAFBm72HA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.7.8.tgz", - "integrity": "sha512-hHKFx+opG5BA3/owMXon8ypwSotBGTdblG6oda/iOu9+OEYnk0cxD2uIcGyGT8jCK578kV+xMrNxqbn8Zjlpgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.5.0.tgz", - "integrity": "sha512-JuLWaEqypaJmOJPLWwO335Ig6jSgC1FTONCWAxnqcQthLTK/Yc9aH6hr9z/87xciejbQcnP3GnA1FWUSWeXaeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.26.10", - "@babel/plugin-transform-react-jsx-self": "^7.25.9", - "@babel/plugin-transform-react-jsx-source": "^7.25.9", - "@rolldown/pluginutils": "1.0.0-beta.9", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.17.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/@volar/language-core": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz", - "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/source-map": "1.11.1" - } - }, - "node_modules/@volar/source-map": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz", - "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "muggle-string": "^0.3.1" - } - }, - "node_modules/@volar/typescript": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", - "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "1.11.1", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.16.tgz", - "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.27.2", - "@vue/shared": "3.5.16", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz", - "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.16", - "@vue/shared": "3.5.16" - } - }, - "node_modules/@vue/language-core": { - "version": "1.8.27", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", - "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "~1.11.1", - "@volar/source-map": "~1.11.1", - "@vue/compiler-dom": "^3.3.0", - "@vue/shared": "^3.3.0", - "computeds": "^0.0.1", - "minimatch": "^9.0.3", - "muggle-string": "^0.3.1", - "path-browserify": "^1.0.1", - "vue-template-compiler": "^2.7.14" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/shared": { - "version": "3.5.16", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", - "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==", - "dev": true, - "license": "MIT" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "license": "MIT" - }, - "node_modules/ast-types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/attr-accept": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz", - "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", - "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", - "dev": true, - "license": "MPL-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/babel-plugin-macros/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", - "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.4", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", - "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.4" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "open": "^8.0.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-assert": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", - "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", - "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001718", - "electron-to-chromium": "^1.5.160", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/cacheable": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.9.0.tgz", - "integrity": "sha512-8D5htMCxPDUULux9gFzv30f04Xo3wCnik0oOxKoRTPIBoqA7HtOcJ87uBhQTs3jCfZZTrUBGsYIZOgE0ZRgMAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "hookified": "^1.8.2", - "keyv": "^5.3.3" - } - }, - "node_modules/cacheable/node_modules/keyv": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.3.tgz", - "integrity": "sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@keyv/serialize": "^1.0.3" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001720", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz", - "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chromatic": { - "version": "11.29.0", - "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-11.29.0.tgz", - "integrity": "sha512-yisBlntp9hHVj19lIQdpTlcYIXuU9H/DbFuu6tyWHmj6hWT2EtukCCcxYXL78XdQt1vm2GfIrtgtKpj/Rzmo4A==", - "dev": true, - "license": "MIT", - "bin": { - "chroma": "dist/bin.js", - "chromatic": "dist/bin.js", - "chromatic-cli": "dist/bin.js" - }, - "peerDependencies": { - "@chromatic-com/cypress": "^0.*.* || ^1.0.0", - "@chromatic-com/playwright": "^0.*.* || ^1.0.0" - }, - "peerDependenciesMeta": { - "@chromatic-com/cypress": { - "optional": true - }, - "@chromatic-com/playwright": { - "optional": true - } - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", - "license": "MIT" - }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/computeds": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", - "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/core-js": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", - "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.42.0.tgz", - "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/cross-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", - "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.7.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-functions-list": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", - "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12 || >=16" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true, - "license": "MIT" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", - "license": "MIT", - "peer": true - }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", - "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", - "dev": true, - "license": "MIT" - }, - "node_modules/decode-named-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", - "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decode-named-character-reference/node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dedent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true, - "license": "MIT" - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", - "dev": true, - "license": "MIT", - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dompurify": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", - "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", - "dev": true, - "license": "(MPL-2.0 OR Apache-2.0)", - "optionalDependencies": { - "@types/trusted-types": "^2.0.7" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", - "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/draft-js": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/draft-js/-/draft-js-0.11.7.tgz", - "integrity": "sha512-ne7yFfN4sEL82QPQEn80xnADR8/Q6ALVworbC5UOSzOvjffmYfFsr3xSZtxbIirti14R7Y33EZC5rivpLgIbsg==", - "license": "MIT", - "dependencies": { - "fbjs": "^2.0.0", - "immutable": "~3.7.4", - "object-assign": "^4.1.1" - }, - "peerDependencies": { - "react": ">=0.14.0", - "react-dom": ">=0.14.0" - } - }, - "node_modules/draftjs-md-converter": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/draftjs-md-converter/-/draftjs-md-converter-1.5.2.tgz", - "integrity": "sha512-Au4ZMdrqc2YxRWknBuvuvjcA/LjGuZ6KvL6K9nWsH5LKyCxwisxWV/s7idiFHN0EwRyGQ50+rbu3bMfr118BFw==", - "license": "MIT", - "dependencies": { - "@textlint/markdown-to-ast": "12.0.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.161", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz", - "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==", - "dev": true, - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", - "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.2", - "@esbuild/android-arm": "0.24.2", - "@esbuild/android-arm64": "0.24.2", - "@esbuild/android-x64": "0.24.2", - "@esbuild/darwin-arm64": "0.24.2", - "@esbuild/darwin-x64": "0.24.2", - "@esbuild/freebsd-arm64": "0.24.2", - "@esbuild/freebsd-x64": "0.24.2", - "@esbuild/linux-arm": "0.24.2", - "@esbuild/linux-arm64": "0.24.2", - "@esbuild/linux-ia32": "0.24.2", - "@esbuild/linux-loong64": "0.24.2", - "@esbuild/linux-mips64el": "0.24.2", - "@esbuild/linux-ppc64": "0.24.2", - "@esbuild/linux-riscv64": "0.24.2", - "@esbuild/linux-s390x": "0.24.2", - "@esbuild/linux-x64": "0.24.2", - "@esbuild/netbsd-arm64": "0.24.2", - "@esbuild/netbsd-x64": "0.24.2", - "@esbuild/openbsd-arm64": "0.24.2", - "@esbuild/openbsd-x64": "0.24.2", - "@esbuild/sunos-x64": "0.24.2", - "@esbuild/win32-arm64": "0.24.2", - "@esbuild/win32-ia32": "0.24.2", - "@esbuild/win32-x64": "0.24.2" - } - }, - "node_modules/esbuild-register": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", - "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "peerDependencies": { - "esbuild": ">=0.12 <1" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", - "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.48.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "13.5.11", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.11.tgz", - "integrity": "sha512-jImZvfc4htMMsiW3nCY/UOxXrI4DbEI4JrdWOEfSNkMipi4j3ZukUhvv4TGQnP6d6lvPTh6uHisQbMl3Ozga1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@next/eslint-plugin-next": "13.5.11", - "@rushstack/eslint-patch": "^1.3.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-config-next/node_modules/eslint-import-resolver-typescript": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", - "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.4.0", - "get-tsconfig": "^4.10.0", - "is-bun-module": "^2.0.0", - "stable-hash": "^0.0.5", - "tinyglobby": "^0.2.13", - "unrs-resolver": "^1.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-import-resolver-typescript" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-import/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "aria-query": "^5.3.2", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.1" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", - "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.9", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-simple-import-sort": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", - "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-plugin-storybook": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.11.6.tgz", - "integrity": "sha512-3WodYD6Bs9ACqnB+TP2TuLh774c/nacAjxSKOP9bHJ2c8rf+nrhocxjjeAWNmO9IPkFIzTKlcl0vNXI2yYpVOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/csf": "^0.1.11", - "@typescript-eslint/utils": "^8.8.1", - "ts-dedent": "^2.2.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "eslint": ">=8" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/scope-manager": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.0.tgz", - "integrity": "sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.33.0", - "@typescript-eslint/visitor-keys": "8.33.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/types": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz", - "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz", - "integrity": "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.33.0", - "@typescript-eslint/tsconfig-utils": "8.33.0", - "@typescript-eslint/types": "8.33.0", - "@typescript-eslint/visitor-keys": "8.33.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/utils": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.0.tgz", - "integrity": "sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.33.0", - "@typescript-eslint/types": "8.33.0", - "@typescript-eslint/typescript-estree": "8.33.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz", - "integrity": "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.33.0", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/eslint-plugin-unused-imports": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz", - "integrity": "sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", - "eslint": "^9.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "license": "MIT", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fbjs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-2.0.0.tgz", - "integrity": "sha512-8XA8ny9ifxrAWlyhAbexXcs3rRMtxWcs3M0lctLfB49jRDHiaxj+Mo0XxbwE7nKZYzgCFoq64FS+WFd4IycPPQ==", - "license": "MIT", - "dependencies": { - "core-js": "^3.6.4", - "cross-fetch": "^3.0.4", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "license": "MIT" - }, - "node_modules/fdir": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", - "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-selector": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz", - "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==", - "license": "MIT", - "dependencies": { - "tslib": "^2.7.0" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "license": "MIT" - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/formik": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.6.tgz", - "integrity": "sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==", - "funding": [ - { - "type": "individual", - "url": "https://opencollective.com/formik" - } - ], - "license": "Apache-2.0", - "dependencies": { - "@types/hoist-non-react-statics": "^3.3.1", - "deepmerge": "^2.1.1", - "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "react-fast-compare": "^2.0.1", - "tiny-warning": "^1.0.2", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/formik/node_modules/deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-extra/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", - "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-promise": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", - "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/glob": "^7.1.3" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/ahmadnassri" - }, - "peerDependencies": { - "glob": "^7.1.6" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true, - "license": "MIT" - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true, - "license": "MIT" - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "dev": true, - "license": "(Apache-2.0 OR MPL-1.1)" - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/hookified": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.9.0.tgz", - "integrity": "sha512-2yEEGqphImtKIe1NXWEhu6yD3hlFR4Mxk4Mtp3XEyScpSt4pQ4ymmXA1zzxZpj99QkFK+nN0nzjeb2+RUi/6CQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "dev": true, - "license": "MIT", - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "3.7.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", - "integrity": "sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-bun-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", - "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.7.1" - } - }, - "node_modules/is-bun-module/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-config/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-environment-jsdom": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", - "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0", - "jsdom": "^20.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-leak-detector/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-leak-detector/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", - "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/known-css-properties": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz", - "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/kolorist": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "license": "MIT", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/less": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/less/-/less-4.3.0.tgz", - "integrity": "sha512-X9RyH9fvemArzfdP8Pi3irr7lor2Ok4rOttDXBhlwDg+wKQsXOXgHWduAJE1EsF7JJx0w0bcO6BC6tCKKYnXKA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=14" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/linkify-string": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/linkify-string/-/linkify-string-4.3.1.tgz", - "integrity": "sha512-1AnH52wZwuJi+skG/9dUphhQEUblVGSf0ntkM8z21RS9bF7xR0qPpqnNTyCo2Obqs5MR5wi8y5wOLPoBbzxm2w==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "linkifyjs": "^4.0.0" - } - }, - "node_modules/linkifyjs": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.1.tgz", - "integrity": "sha512-DRSlB9DKVW04c4SUdGvKK5FR6be45lTU9M76JnngqPeeGDqPwYc0zdUErtsNVMtxPXgUWV4HbXbnC4sNyBxkYg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/lint-staged": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.2.tgz", - "integrity": "sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.4.1", - "commander": "^13.1.0", - "debug": "^4.4.0", - "execa": "^8.0.1", - "lilconfig": "^3.1.3", - "listr2": "^8.2.5", - "micromatch": "^4.0.8", - "pidtree": "^0.6.0", - "string-argv": "^0.3.2", - "yaml": "^2.7.0" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", - "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^4.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/lit-html": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", - "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@types/trusted-types": "^2.0.2" - } - }, - "node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "dev": true, - "license": "MIT", - "bin": { - "lz-string": "bin/bin.js" - } - }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/map-or-similar": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", - "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", - "dev": true, - "license": "MIT" - }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-footnote": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/mdast-util-footnote/-/mdast-util-footnote-0.1.7.tgz", - "integrity": "sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==", - "license": "MIT", - "dependencies": { - "mdast-util-to-markdown": "^0.6.0", - "micromark": "~2.11.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/mdast-util-from-markdown/node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/mdast-util-frontmatter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", - "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", - "license": "MIT", - "dependencies": { - "micromark-extension-frontmatter": "^0.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/mdast-util-gfm-footnote/node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote/node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/mdast-util-gfm-strikethrough/node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough/node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/mdast-util-gfm-table/node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table/node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/mdast-util-gfm-task-list-item/node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item/node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-gfm/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/mdast-util-gfm/node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-gfm/node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm/node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm/node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", - "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", - "license": "MIT" - }, - "node_modules/memoizerific": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", - "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", - "dev": true, - "license": "MIT", - "dependencies": { - "map-or-similar": "^1.5.0" - } - }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-footnote": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/micromark-extension-footnote/-/micromark-extension-footnote-0.3.2.tgz", - "integrity": "sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==", - "license": "MIT", - "dependencies": { - "micromark": "~2.11.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-frontmatter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", - "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", - "license": "MIT", - "dependencies": { - "fault": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "dev": true, - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/muggle-string": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", - "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-postinstall": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz", - "integrity": "sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==", - "dev": true, - "license": "MIT", - "bin": { - "napi-postinstall": "lib/cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/napi-postinstall" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/needle": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", - "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/next": { - "version": "14.2.29", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.29.tgz", - "integrity": "sha512-s98mCOMOWLGGpGOfgKSnleXLuegvvH415qtRZXpSp00HeEgdmrxmwL9cgKU+h4XrhB16zEI5d/7BnkS3ATInsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@next/env": "14.2.29", - "@swc/helpers": "0.5.5", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001579", - "graceful-fs": "^4.2.11", - "postcss": "8.4.31", - "styled-jsx": "5.1.1" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=18.17.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.29", - "@next/swc-darwin-x64": "14.2.29", - "@next/swc-linux-arm64-gnu": "14.2.29", - "@next/swc-linux-arm64-musl": "14.2.29", - "@next/swc-linux-x64-gnu": "14.2.29", - "@next/swc-linux-x64-musl": "14.2.29", - "@next/swc-win32-arm64-msvc": "14.2.29", - "@next/swc-win32-ia32-msvc": "14.2.29", - "@next/swc-win32-x64-msvc": "14.2.29" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next/node_modules/@swc/helpers": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", - "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3", - "tslib": "^2.4.0" - } - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", - "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", - "dev": true, - "license": "MIT" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", - "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/polished": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", - "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.17.8" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-load-config/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", - "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", - "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", - "dev": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", - "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-safe-parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", - "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-scss": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", - "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-scss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.4.29" - } - }, - "node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sorting": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz", - "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "postcss": "^8.4.20" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "license": "MIT" - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/property-expr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", - "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", - "license": "MIT" - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-animate-height": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/react-animate-height/-/react-animate-height-3.2.3.tgz", - "integrity": "sha512-R6DSvr7ud07oeCixScyvXWEMJY/Mt2+GyOWC1KMaRc69gOBw+SsCg4TJmrp4rKUM1hyd6p+YKw90brjPH93Y2A==", - "license": "MIT", - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/react-docgen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-7.1.1.tgz", - "integrity": "sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.18.9", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", - "@types/babel__core": "^7.18.0", - "@types/babel__traverse": "^7.18.0", - "@types/doctrine": "^0.0.9", - "@types/resolve": "^1.20.2", - "doctrine": "^3.0.0", - "resolve": "^1.22.1", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=16.14.0" - } - }, - "node_modules/react-docgen-typescript": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", - "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "typescript": ">= 4.3.x" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-dropzone": { - "version": "14.3.8", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.3.8.tgz", - "integrity": "sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug==", - "license": "MIT", - "dependencies": { - "attr-accept": "^2.2.4", - "file-selector": "^2.1.0", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">= 10.13" - }, - "peerDependencies": { - "react": ">= 16.8 || 18.0.0" - } - }, - "node_modules/react-fast-compare": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", - "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==", - "license": "MIT" - }, - "node_modules/react-is": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz", - "integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==", - "license": "MIT" - }, - "node_modules/react-refresh": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-select": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.10.1.tgz", - "integrity": "sha512-roPEZUL4aRZDx6DcsD+ZNreVl+fM8VsKn0Wtex1v4IazH60ILp5xhdlp464IsEAlJdXeD+BhDAFsBVMfvLQueA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.0", - "@emotion/cache": "^11.4.0", - "@emotion/react": "^11.8.1", - "@floating-ui/dom": "^1.0.1", - "@types/react-transition-group": "^4.4.0", - "memoize-one": "^6.0.0", - "prop-types": "^15.6.0", - "react-transition-group": "^4.3.0", - "use-isomorphic-layout-effect": "^1.2.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-sticky-box": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/react-sticky-box/-/react-sticky-box-2.0.5.tgz", - "integrity": "sha512-JEIuN7Q3razU1NNS0vddC12GXCUkj7T4aCpC9ZSTjgBddFsBdTcN1RhYXFLjCE/KDOQqX2Ix308BcdrqtSJbkQ==", - "license": "ISC", - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/react-toastify": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.3.tgz", - "integrity": "sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg==", - "license": "MIT", - "dependencies": { - "clsx": "^1.1.1" - }, - "peerDependencies": { - "react": ">=16", - "react-dom": ">=16" - } - }, - "node_modules/react-toastify/node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/recast": { - "version": "0.23.11", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", - "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ast-types": "^0.16.1", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tiny-invariant": "^1.3.3", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/recast/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/redent/node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/remark-footnotes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-3.0.0.tgz", - "integrity": "sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==", - "license": "MIT", - "dependencies": { - "mdast-util-footnote": "^0.1.0", - "micromark-extension-footnote": "^0.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-frontmatter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", - "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", - "license": "MIT", - "dependencies": { - "mdast-util-frontmatter": "^0.2.0", - "micromark-extension-frontmatter": "^0.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/remark-gfm/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-gfm/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-gfm/node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm/node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-gfm/node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm/node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^0.8.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-parse/node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/remark-stringify/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-stringify/node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/replace-in-file": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-7.2.0.tgz", - "integrity": "sha512-CiLXVop3o8/h2Kd1PwKPPimmS9wUV0Ki6Fl8+1ITD35nB3Gl/PrW5IONpTE0AXk0z4v8WYcpEpdeZqMXvSnWpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "glob": "^8.1.0", - "yargs": "^17.7.2" - }, - "bin": { - "replace-in-file": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/replace-in-file/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/replace-in-file/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/reserved-words": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", - "integrity": "sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/rifm": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/rifm/-/rifm-0.12.1.tgz", - "integrity": "sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg==", - "license": "MIT", - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", - "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.7" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.41.1", - "@rollup/rollup-android-arm64": "4.41.1", - "@rollup/rollup-darwin-arm64": "4.41.1", - "@rollup/rollup-darwin-x64": "4.41.1", - "@rollup/rollup-freebsd-arm64": "4.41.1", - "@rollup/rollup-freebsd-x64": "4.41.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", - "@rollup/rollup-linux-arm-musleabihf": "4.41.1", - "@rollup/rollup-linux-arm64-gnu": "4.41.1", - "@rollup/rollup-linux-arm64-musl": "4.41.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", - "@rollup/rollup-linux-riscv64-gnu": "4.41.1", - "@rollup/rollup-linux-riscv64-musl": "4.41.1", - "@rollup/rollup-linux-s390x-gnu": "4.41.1", - "@rollup/rollup-linux-x64-gnu": "4.41.1", - "@rollup/rollup-linux-x64-musl": "4.41.1", - "@rollup/rollup-win32-arm64-msvc": "4.41.1", - "@rollup/rollup-win32-ia32-msvc": "4.41.1", - "@rollup/rollup-win32-x64-msvc": "4.41.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-visualizer": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.14.0.tgz", - "integrity": "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==", - "dev": true, - "license": "MIT", - "dependencies": { - "open": "^8.4.0", - "picomatch": "^4.0.2", - "source-map": "^0.7.4", - "yargs": "^17.5.1" - }, - "bin": { - "rollup-plugin-visualizer": "dist/bin/cli.js" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "rolldown": "1.x", - "rollup": "2.x || 3.x || 4.x" - }, - "peerDependenciesMeta": { - "rolldown": { - "optional": true - }, - "rollup": { - "optional": true - } - } - }, - "node_modules/rollup-plugin-visualizer/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.89.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.0.tgz", - "integrity": "sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, - "node_modules/sass/node_modules/immutable": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.2.tgz", - "integrity": "sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/showdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz", - "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "^9.0.0" - }, - "bin": { - "showdown": "bin/showdown.js" - }, - "funding": { - "type": "individual", - "url": "https://www.paypal.me/tiviesantos" - } - }, - "node_modules/showdown/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0", - "optional": true, - "peer": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", - "dev": true, - "license": "CC0-1.0", - "optional": true, - "peer": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/stable-hash": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", - "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", - "dev": true, - "license": "MIT" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/storybook": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.4.2.tgz", - "integrity": "sha512-GMCgyAulmLNrkUtDkCpFO4SB77YrpiIxq6e5tzaQdXEuaDu1mdNwOuP3VG7nE2FzxmqDvagSgriM68YW9iFaZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/core": "8.4.2" - }, - "bin": { - "getstorybook": "bin/index.cjs", - "sb": "bin/index.cjs", - "storybook": "bin/index.cjs" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "prettier": "^2 || ^3" - }, - "peerDependenciesMeta": { - "prettier": { - "optional": true - } - } - }, - "node_modules/storybook-addon-pseudo-states": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/storybook-addon-pseudo-states/-/storybook-addon-pseudo-states-4.0.4.tgz", - "integrity": "sha512-hF3nLFpRPjqNxa7eqp+j1bd+DvyUCns1iesUZqMZz9ZuIijosOTQgJO5G0drbdxlHvXehu/BgcqbyxBb2eJR5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/icons": "^1.2.10" - }, - "peerDependencies": { - "storybook": "^8.2.0" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/stylelint": { - "version": "16.19.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.19.1.tgz", - "integrity": "sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - }, - { - "type": "github", - "url": "https://github.com/sponsors/stylelint" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2", - "@csstools/selector-specificity": "^5.0.0", - "@dual-bundle/import-meta-resolve": "^4.1.0", - "balanced-match": "^2.0.0", - "colord": "^2.9.3", - "cosmiconfig": "^9.0.0", - "css-functions-list": "^3.2.3", - "css-tree": "^3.1.0", - "debug": "^4.3.7", - "fast-glob": "^3.3.3", - "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^10.0.8", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.3.1", - "ignore": "^7.0.3", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.36.0", - "mathml-tag-names": "^2.1.3", - "meow": "^13.2.0", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.5.3", - "postcss-resolve-nested-selector": "^0.1.6", - "postcss-safe-parser": "^7.0.1", - "postcss-selector-parser": "^7.1.0", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "supports-hyperlinks": "^3.2.0", - "svg-tags": "^1.0.0", - "table": "^6.9.0", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "stylelint": "bin/stylelint.mjs" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/stylelint-config-recess-order": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recess-order/-/stylelint-config-recess-order-4.6.0.tgz", - "integrity": "sha512-V76fhv3YtcNXh/hyAuAdSzi5FmcrG54Mp2AThJ3D/PTMTSYzUPd7GIhP6z9mTqnRhmkk6YTfcu/JWB8h+Yrcaw==", - "dev": true, - "license": "ISC", - "dependencies": { - "stylelint-order": "6.x" - }, - "peerDependencies": { - "stylelint": ">=15" - } - }, - "node_modules/stylelint-config-recommended": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", - "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - }, - { - "type": "github", - "url": "https://github.com/sponsors/stylelint" - } - ], - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "stylelint": "^16.1.0" - } - }, - "node_modules/stylelint-config-recommended-scss": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz", - "integrity": "sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-scss": "^4.0.9", - "stylelint-config-recommended": "^14.0.1", - "stylelint-scss": "^6.4.0" - }, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^16.6.1" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } - } - }, - "node_modules/stylelint-config-standard": { - "version": "36.0.1", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz", - "integrity": "sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - }, - { - "type": "github", - "url": "https://github.com/sponsors/stylelint" - } - ], - "license": "MIT", - "dependencies": { - "stylelint-config-recommended": "^14.0.1" - }, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "stylelint": "^16.1.0" - } - }, - "node_modules/stylelint-config-standard-scss": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-14.0.0.tgz", - "integrity": "sha512-6Pa26D9mHyi4LauJ83ls3ELqCglU6VfCXchovbEqQUiEkezvKdv6VgsIoMy58i00c854wVmOw0k8W5FTpuaVqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "stylelint-config-recommended-scss": "^14.1.0", - "stylelint-config-standard": "^36.0.1" - }, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^16.11.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } - } - }, - "node_modules/stylelint-declaration-strict-value": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/stylelint-declaration-strict-value/-/stylelint-declaration-strict-value-1.10.11.tgz", - "integrity": "sha512-oVQvhZlFZAiDz9r2BPFZLtTGm1A2JVhdKObKAJoTjFfR4F/NpApC4bMBTxf4sZS76Na3njYKVOaAaKSZ4+FU+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "stylelint": ">=7 <=16" - } - }, - "node_modules/stylelint-order": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz", - "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^8.4.32", - "postcss-sorting": "^8.0.2" - }, - "peerDependencies": { - "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1" - } - }, - "node_modules/stylelint-order/node_modules/postcss": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", - "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/stylelint-scss": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.12.0.tgz", - "integrity": "sha512-U7CKhi1YNkM1pXUXl/GMUXi8xKdhl4Ayxdyceie1nZ1XNIdaUgMV6OArpooWcDzEggwgYD0HP/xIgVJo9a655w==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "^3.0.1", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.36.0", - "mdn-data": "^2.21.0", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.6", - "postcss-selector-parser": "^7.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "stylelint": "^16.0.2" - } - }, - "node_modules/stylelint-scss/node_modules/mdn-data": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.21.0.tgz", - "integrity": "sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/stylelint/node_modules/balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true, - "license": "MIT" - }, - "node_modules/stylelint/node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/stylelint/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.0.tgz", - "integrity": "sha512-Et/ex6smi3wOOB+n5mek+Grf7P2AxZR5ueqRUvAAn4qkyatXi3cUC1cuQXVkX0VlzBVsN4BkWJFmY/fYiRTdww==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^6.1.9" - } - }, - "node_modules/stylelint/node_modules/flat-cache": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.9.tgz", - "integrity": "sha512-DUqiKkTlAfhtl7g78IuwqYM+YqvT+as0mY+EVk6mfimy19U79pJCzDZQsnqk3Ou/T6hFXWLGbwbADzD/c8Tydg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cacheable": "^1.9.0", - "flatted": "^3.3.3", - "hookified": "^1.8.2" - } - }, - "node_modules/stylelint/node_modules/ignore": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", - "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/stylelint/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint/node_modules/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/postcss": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", - "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/stylelint/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/stylelint/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", - "license": "MIT" - }, - "node_modules/stylus": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.62.0.tgz", - "integrity": "sha512-v3YCf31atbwJQIMtPNX8hcQ+okD4NQaTuKGUWfII8eaqn+3otrbttGL1zSMZAAtiPsBztQnujVBugg/cXFUpyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@adobe/css-tools": "~4.3.1", - "debug": "^4.3.2", - "glob": "^7.1.6", - "sax": "~1.3.0", - "source-map": "^0.7.3" - }, - "bin": { - "stylus": "bin/stylus" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://opencollective.com/stylus" - } - }, - "node_modules/stylus/node_modules/@adobe/css-tools": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", - "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/stylus/node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", - "dev": true, - "license": "ISC" - }, - "node_modules/stylus/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", - "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=14.18" - }, - "funding": { - "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true - }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/svgo/node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/svgo/node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", - "license": "MIT" - }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/table/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tiny-case": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", - "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/to-string-loader": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/to-string-loader/-/to-string-loader-1.2.0.tgz", - "integrity": "sha512-KsWUL8FccgBW9FPFm4vYoQbOOcO5m6hKOGYoXjbseD9/4Ft+ravXN5jolQ9kTKYcK4zPt1j+khx97GPGnVoi6A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "loader-utils": "^1.0.0" - } - }, - "node_modules/toposort": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", - "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", - "license": "MIT" - }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/traverse": { - "version": "0.6.11", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.11.tgz", - "integrity": "sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==", - "license": "MIT", - "dependencies": { - "gopd": "^1.2.0", - "typedarray.prototype.slice": "^1.0.5", - "which-typed-array": "^1.1.18" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.10" - } - }, - "node_modules/ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tsconfck": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", - "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", - "dev": true, - "license": "MIT", - "bin": { - "tsconfck": "bin/tsconfck.js" - }, - "engines": { - "node": "^18 || >=20" - }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray.prototype.slice": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.5.tgz", - "integrity": "sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "math-intrinsics": "^1.1.0", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-offset": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-plugin-css-modules": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/typescript-plugin-css-modules/-/typescript-plugin-css-modules-5.1.0.tgz", - "integrity": "sha512-6h+sLBa4l+XYSTn/31vZHd/1c3SvAbLpobY6FxDiUOHJQG1eD9Gh3eCs12+Eqc+TCOAdxcO+zAPvUq0jBfdciw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/postcss-modules-local-by-default": "^4.0.2", - "@types/postcss-modules-scope": "^3.0.4", - "dotenv": "^16.4.2", - "icss-utils": "^5.1.0", - "less": "^4.2.0", - "lodash.camelcase": "^4.3.0", - "postcss": "^8.4.35", - "postcss-load-config": "^3.1.4", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", - "reserved-words": "^0.1.2", - "sass": "^1.70.0", - "source-map-js": "^1.0.2", - "stylus": "^0.62.0", - "tsconfig-paths": "^4.2.0" - }, - "peerDependencies": { - "typescript": ">=4.0.0" - } - }, - "node_modules/typescript-plugin-css-modules/node_modules/postcss": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", - "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.40", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.40.tgz", - "integrity": "sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "license": "MIT", - "bin": { - "ua-parser-js": "script/cli.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true, - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/unist-util-visit/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unplugin": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", - "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/unrs-resolver": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.7.8.tgz", - "integrity": "sha512-2zsXwyOXmCX9nGz4vhtZRYhe30V78heAv+KDc21A/KMdovGHbZcixeD5JHEF0DrFXzdytwuzYclcPbvp8A3Jlw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "napi-postinstall": "^0.2.2" - }, - "funding": { - "url": "https://opencollective.com/unrs-resolver" - }, - "optionalDependencies": { - "@unrs/resolver-binding-darwin-arm64": "1.7.8", - "@unrs/resolver-binding-darwin-x64": "1.7.8", - "@unrs/resolver-binding-freebsd-x64": "1.7.8", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.7.8", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.7.8", - "@unrs/resolver-binding-linux-arm64-gnu": "1.7.8", - "@unrs/resolver-binding-linux-arm64-musl": "1.7.8", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.7.8", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.7.8", - "@unrs/resolver-binding-linux-riscv64-musl": "1.7.8", - "@unrs/resolver-binding-linux-s390x-gnu": "1.7.8", - "@unrs/resolver-binding-linux-x64-gnu": "1.7.8", - "@unrs/resolver-binding-linux-x64-musl": "1.7.8", - "@unrs/resolver-binding-wasm32-wasi": "1.7.8", - "@unrs/resolver-binding-win32-arm64-msvc": "1.7.8", - "@unrs/resolver-binding-win32-ia32-msvc": "1.7.8", - "@unrs/resolver-binding-win32-x64-msvc": "1.7.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz", - "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validator": { - "version": "13.15.15", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz", - "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vite": { - "version": "5.4.19", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", - "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-plugin-checker": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.6.4.tgz", - "integrity": "sha512-2zKHH5oxr+ye43nReRbC2fny1nyARwhxdm0uNYp/ERy4YvU9iZpNOsueoi/luXw5gnpqRSvjcEPxXbS153O2wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "ansi-escapes": "^4.3.0", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "commander": "^8.0.0", - "fast-glob": "^3.2.7", - "fs-extra": "^11.1.0", - "npm-run-path": "^4.0.1", - "semver": "^7.5.0", - "strip-ansi": "^6.0.0", - "tiny-invariant": "^1.1.0", - "vscode-languageclient": "^7.0.0", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^3.0.2" - }, - "engines": { - "node": ">=14.16" - }, - "peerDependencies": { - "eslint": ">=7", - "meow": "^9.0.0", - "optionator": "^0.9.1", - "stylelint": ">=13", - "typescript": "*", - "vite": ">=2.0.0", - "vls": "*", - "vti": "*", - "vue-tsc": ">=1.3.9" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "meow": { - "optional": true - }, - "optionator": { - "optional": true - }, - "stylelint": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vls": { - "optional": true - }, - "vti": { - "optional": true - }, - "vue-tsc": { - "optional": true - } - } - }, - "node_modules/vite-plugin-checker/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/vite-plugin-checker/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/vite-plugin-checker/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/vite-plugin-checker/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/vite-plugin-checker/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/vite-plugin-checker/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vite-plugin-dts": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-3.7.3.tgz", - "integrity": "sha512-26eTlBYdpjRLWCsTJebM8vkCieE+p9gP3raf+ecDnzzK5E3FG6VE1wcy55OkRpfWWVlVvKkYFe6uvRHYWx7Nog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@microsoft/api-extractor": "7.39.0", - "@rollup/pluginutils": "^5.1.0", - "@vue/language-core": "^1.8.26", - "debug": "^4.3.4", - "kolorist": "^1.8.0", - "vue-tsc": "^1.8.26" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "typescript": "*", - "vite": "*" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } - } - }, - "node_modules/vite-plugin-eslint": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz", - "integrity": "sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^4.2.1", - "@types/eslint": "^8.4.5", - "rollup": "^2.77.2" - }, - "peerDependencies": { - "eslint": ">=7", - "vite": ">=2" - } - }, - "node_modules/vite-plugin-eslint/node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/vite-plugin-eslint/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/vite-plugin-eslint/node_modules/rollup": { - "version": "2.79.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", - "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/vite-plugin-static-copy": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-2.3.1.tgz", - "integrity": "sha512-EfsPcBm3ewg3UMG8RJaC0ADq6/qnUZnokXx4By4+2cAcipjT9i0Y0owIJGqmZI7d6nxk4qB1q5aXOwNuSyPdyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.3", - "fast-glob": "^3.2.11", - "fs-extra": "^11.1.0", - "p-map": "^7.0.3", - "picocolors": "^1.0.0" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0" - } - }, - "node_modules/vite-plugin-static-copy/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/vite-plugin-static-copy/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/vite-plugin-static-copy/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/vite-plugin-static-copy/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/vite-tsconfig-paths": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz", - "integrity": "sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "globrex": "^0.1.2", - "tsconfck": "^3.0.3" - }, - "peerDependencies": { - "vite": "*" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/vite/node_modules/postcss": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", - "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0 || >=10.0.0" - } - }, - "node_modules/vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" - }, - "engines": { - "vscode": "^1.52.0" - } - }, - "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/vscode-languageclient/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/vscode-languageclient/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "dev": true, - "license": "MIT", - "dependencies": { - "vscode-languageserver-protocol": "3.16.0" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "dev": true, - "license": "MIT", - "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", - "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/vue-template-compiler": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", - "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, - "node_modules/vue-tsc": { - "version": "1.8.27", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", - "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/typescript": "~1.11.1", - "@vue/language-core": "1.8.27", - "semver": "^7.5.4" - }, - "bin": { - "vue-tsc": "bin/vue-tsc.js" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "node_modules/vue-tsc/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", - "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/what-input": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/what-input/-/what-input-5.2.12.tgz", - "integrity": "sha512-3yrSa7nGSXGJS6wZeSkO6VNm95pB1mZ9i3wFzC1hhY7mn4/afue/MvXz04OXNdBC8bfo4AB4RRd3Dem9jXM58Q==", - "license": "MIT" - }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ws": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true, - "license": "MIT" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", - "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yup": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/yup/-/yup-1.6.1.tgz", - "integrity": "sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==", - "license": "MIT", - "dependencies": { - "property-expr": "^2.0.5", - "tiny-case": "^1.0.3", - "toposort": "^2.0.2", - "type-fest": "^2.19.0" - } - }, - "node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, - "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" - } - }, - "node_modules/z-schema/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/libs/react-components/package.json b/libs/react-components/package.json deleted file mode 100644 index 3cf437398..000000000 --- a/libs/react-components/package.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "name": "@tehik-ee/tedi-react", - "version": "0.0.0-semantic-version", - "type": "module", - "sideEffects": false, - "exports": { - "./tedi": { - "types": "./src/tedi/index.d.ts", - "import": "./tedi.es.js", - "require": "./tedi.cjs.js" - }, - "./community": { - "types": "./src/community/index.d.ts", - "import": "./community.es.js", - "require": "./community.cjs.js" - }, - "./index.css": "./index.css" - }, - "scripts": { - "start": "storybook dev -p 4400 -c .storybook", - "build": "rm -rf dist && vite build --config vite.config.ts && rm -rf dist/libs && replace-in-file //fonts//g \"./fonts/\" dist/index.css --isRegex", - "build:sb": "storybook build -c .storybook -o dist/storybook/react-components", - "lint": "npx stylelint \"src/**/*.scss\" --fix && eslint \"src/**/*.{ts,tsx}\" --no-ignore --fix", - "lint:ci": "npx stylelint \"src/**/*.scss\" && eslint --quiet", - "test": "jest --config ./jest.config.ts --passWithNoTests", - "test:coverage": "jest --config ./jest.config.ts --coverage", - "release": "npx semantic-release -e semantic-release-monorepo --debug", - "chromatic": "npx chromatic --project-token=$CHROMATIC_PROJECT_TOKEN --build-script-name=build:sb --baseline-branch=rc" - }, - "dependencies": { - "@emotion/react": "^11.11.4", - "@emotion/styled": "^11.11.0", - "@floating-ui/react": "^0.26.9", - "@mui/material": "^5.15.13", - "@mui/x-date-pickers": "^5.0.20", - "@tanstack/react-table": "^8.13.2", - "@tehik-ee/tedi-core": "^1.13.2", - "classnames": "^2.5.1", - "draft-js": "^0.11.7", - "draftjs-md-converter": "^1.5.2", - "formik": "^2.4.5", - "lodash-es": "^4.17.21", - "react-animate-height": "^3.2.3", - "react-dropzone": "^14.3.5", - "react-select": "^5.10.1", - "react-sticky-box": "2.0.5", - "react-toastify": "^9.1.3", - "what-input": "^5.2.12", - "yup": "^1.4.0" - }, - "peerDependencies": { - "react": "18.3.1", - "react-dom": "18.3.1", - "dayjs": "^1.11.10" - }, - "devDependencies": { - "@avalane/storybook-addon-status": "^5.0.1", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.26.3", - "@babel/preset-typescript": "^7.26.0", - "@dnd-kit/core": "^6.3.1", - "@dnd-kit/sortable": "^10.0.0", - "@dnd-kit/utilities": "^3.2.2", - "@faker-js/faker": "^8.4.1", - "@storybook/addon-a11y": "8.4.2", - "@storybook/addon-designs": "^8.2.1", - "@storybook/addon-essentials": "8.4.2", - "@storybook/addon-mdx-gfm": "8.4.2", - "@storybook/blocks": "8.4.2", - "@storybook/builder-vite": "8.4.2", - "@storybook/react": "8.4.2", - "@storybook/react-vite": "8.4.2", - "@storybook/theming": "8.4.2", - "@svgr/webpack": "8.1.0", - "@swc-node/register": "~1.9.1", - "@swc/core": "~1.5.7", - "@swc/helpers": "~0.5.11", - "@testing-library/dom": "^9.3.4", - "@testing-library/jest-dom": "^6.4.2", - "@testing-library/react": "15.0.6", - "@testing-library/user-event": "^14.5.2", - "@types/css-modules": "^1.0.5", - "@types/dompurify": "^3.0.5", - "@types/draft-js": "^0.11.18", - "@types/jest": "29.5.14", - "@types/lodash-es": "^4.17.12", - "@types/node": "20.11.28", - "@types/react": "18.3.1", - "@types/react-dom": "18.3.0", - "@types/react-test-renderer": "^18.0.7", - "@types/showdown": "^2.0.6", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "@vitejs/plugin-react": "^4.3.4", - "chromatic": "^11.25.2", - "cross-env": "^7.0.3", - "dompurify": "^3.0.9", - "eslint": "8.48.0", - "eslint-config-next": "^13.4.6", - "eslint-config-prettier": "9.1.0", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-react": "^7.32.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-simple-import-sort": "^10.0.0", - "eslint-plugin-storybook": "^0.11.0", - "eslint-plugin-unused-imports": "^4.1.4", - "identity-obj-proxy": "^3.0.0", - "jest": "29.7.0", - "jest-environment-jsdom": "29.7.0", - "linkify-string": "^4.1.3", - "lint-staged": "^15.3.0", - "next": "^14.1.3", - "prettier": "^2.8.8", - "replace-in-file": "^7.1.0", - "rollup-plugin-visualizer": "^5.12.0", - "sass": "^1.83.1", - "showdown": "^2.1.0", - "storybook": "8.4.2", - "storybook-addon-pseudo-states": "^4.0.2", - "stylelint": "^16.13.2", - "stylelint-config-recess-order": "^4.2.0", - "stylelint-config-standard-scss": "^14.0.0", - "stylelint-declaration-strict-value": "^1.9.2", - "to-string-loader": "^1.2.0", - "ts-jest": "29.1.2", - "ts-node": "^10.9.2", - "tslib": "^2.3.0", - "typescript": "5.5.4", - "typescript-plugin-css-modules": "^5.1.0", - "vite": "^5.4.11", - "vite-plugin-checker": "^0.6.4", - "vite-plugin-dts": "3.7.3", - "vite-plugin-eslint": "^1.8.1", - "vite-plugin-static-copy": "^2.2.0", - "vite-tsconfig-paths": "4.3.2" - }, - "publishConfig": { - "access": "public" - }, - "overrides": { - "dayjs": "$dayjs" - }, - "lint-staged": { - "*.{css,scss}": "stylelint \"**/*.{css,scss}\" --fix", - "*.{js,jsx,ts,tsx}": "eslint \"src/**/*.{ts,tsx}\" --fix", - "*.{js,jsx,ts,tsx,css,scss,json,md}": "prettier --write" - } -} diff --git a/libs/react-components/src/community/components/accordion/accordion-item-content/accordion-item-content.tsx b/libs/react-components/src/community/components/accordion/accordion-item-content/accordion-item-content.tsx deleted file mode 100644 index 04d4988d6..000000000 --- a/libs/react-components/src/community/components/accordion/accordion-item-content/accordion-item-content.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; -import AnimateHeight from 'react-animate-height'; - -import { usePrint } from '../../../../tedi/helpers'; -import { CardContent, CardContentProps } from '../../card'; -import { AccordionContext } from '../accordion'; -import styles from '../accordion.module.scss'; -import { AccordionItemContext } from '../accordion-item/accordion-item'; - -export type AccordionItemContentProps = CardContentProps; - -export const AccordionItemContent = (props: AccordionItemContentProps): JSX.Element => { - const { children, className, ...rest } = props; - const { isOpen } = React.useContext(AccordionContext); - const { id, disabled } = React.useContext(AccordionItemContext); - const isPrinting = usePrint(); - - const BEM = cn(styles['accordion__item-content'], className); - - const content = ( - <CardContent data-name="accordion-item-content" {...rest} className={BEM}> - {children} - </CardContent> - ); - - return isPrinting && !disabled ? ( - content - ) : ( - <AnimateHeight - duration={300} - height={isOpen(id) ? 'auto' : 0} - role="region" - aria-labelledby={id} - id={`${id}-content`} - > - {content} - </AnimateHeight> - ); -}; - -export default AccordionItemContent; diff --git a/libs/react-components/src/community/components/accordion/accordion-item-header/accordion-item-header.tsx b/libs/react-components/src/community/components/accordion/accordion-item-header/accordion-item-header.tsx deleted file mode 100644 index f6104d3ef..000000000 --- a/libs/react-components/src/community/components/accordion/accordion-item-header/accordion-item-header.tsx +++ /dev/null @@ -1,136 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Col, Row } from '../../../../tedi/components/layout/grid'; -import { CardHeader, CardHeaderBackground, CardHeaderProps } from '../../card'; -import ToggleOpen from '../../toggle-open/toggle-open'; -import Heading, { HeadingProps } from '../../typography/heading/heading'; -import Text from '../../typography/text/text'; -import { AccordionContext } from '../accordion'; -import styles from '../accordion.module.scss'; -import { AccordionItemContext } from '../accordion-item/accordion-item'; - -export interface AccordionItemHeaderProps extends Omit<CardHeaderProps, 'id' | 'role' | 'background' | 'variant'> { - /** - * Name on the button to open the item - */ - openText?: string; - /** - * Name on the button to close the item - */ - closeText?: string; - /** - * Background color of accordion header. - * In addition to the values supported by CardHeader, we also support some dynamic values that have different colors for open/close states. - * @default white - */ - background?: 'primary' | 'white/primary' | 'muted/primary' | CardHeaderBackground; -} - -export const AccordionItemHeader = (props: AccordionItemHeaderProps): JSX.Element => { - const { children, className, background = 'white', openText, closeText, ...rest } = props; - const [isHovered, setIsHovered] = React.useState(false); - - const { onToggle, isOpen } = React.useContext(AccordionContext); - const { id, disabled } = React.useContext(AccordionItemContext); - - const onClick = (): void => { - if (!disabled) onToggle(id); - }; - - const onKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => { - if ((e.code === 'Enter' || e.code === 'Space') && !e.repeat) { - e.preventDefault(); - onClick(); - } - }; - - const setHovered = (isHovered: boolean) => { - if (!disabled) setIsHovered(isHovered); - }; - - const BEM = cn(styles['accordion__item-header'], className); - - // detect if the singular child is a heading element - const contentHeading = - React.Children.toArray(children)?.length === 1 - ? (React.Children.toArray(children).find( - (child) => - React.isValidElement(child) && - (child.type === Heading || - (child.type === Text && ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(child.props.element))) - ) as React.ReactElement<HeadingProps, string> | undefined) - : undefined; - - // for some predefined background we want to use different color for open/close states - const dynamicBackground = React.useMemo(() => { - switch (background) { - case 'primary': - return isOpen(id) ? 'primary-active' : 'primary-main'; - case 'white/primary': - return isOpen(id) ? 'primary-active' : 'white'; - case 'muted/primary': - return isOpen(id) ? 'primary-active' : 'bg-muted'; - default: - return background; - } - }, [background, id, isOpen]); - - const buttonColor = dynamicBackground === 'white' || dynamicBackground === 'bg-muted' ? undefined : 'inverted'; // for blue backgrounds show the white button - - const renderItem = (content: AccordionItemHeaderProps['children']) => ( - <CardHeader - data-name="accordion-item-header" - role="button" - tabIndex={disabled ? -1 : 0} - aria-disabled={disabled} - className={BEM} - onClick={onClick} - onKeyDown={onKeyDown} - onMouseEnter={() => setHovered(true)} - onMouseLeave={() => setHovered(false)} - aria-expanded={isOpen(id)} - aria-controls={`${id}-content`} - background={dynamicBackground} - {...rest} - > - {openText && closeText && !disabled ? ( - <Row justifyContent="between" alignItems="center"> - <Col>{content}</Col> - <Col width="auto"> - <ToggleOpen - openText={openText} - closeText={closeText} - isActive={isHovered} - isOpen={isOpen(id)} - color={buttonColor} - visualType="link" - aria-hidden={true} - tabIndex={-1} - /> - </Col> - </Row> - ) : ( - content - )} - </CardHeader> - ); - - const renderHeadingItem = () => { - const { element, children, ...rest } = contentHeading?.props ?? {}; - - return ( - <Heading element={element} modifiers="normal" className={styles['accordion__item-wrapping-heading']}> - {renderItem( - <Text element="span" {...rest}> - {children} - </Text> - )} - </Heading> - ); - }; - - return contentHeading ? renderHeadingItem() : renderItem(children); -}; - -export default AccordionItemHeader; diff --git a/libs/react-components/src/community/components/accordion/accordion-item/accordion-item.tsx b/libs/react-components/src/community/components/accordion/accordion-item/accordion-item.tsx deleted file mode 100644 index 72bc26df2..000000000 --- a/libs/react-components/src/community/components/accordion/accordion-item/accordion-item.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { HashTrigger } from '../../../../tedi/components/navigation/hash-trigger/hash-trigger'; -import { CardBorderType, CardProps } from '../../card'; -import Card from '../../card/card'; -import { AccordionContext } from '../accordion'; -import styles from '../accordion.module.scss'; -import { AccordionItemContentProps } from '../accordion-item-content/accordion-item-content'; -import { AccordionItemHeaderProps } from '../accordion-item-header/accordion-item-header'; - -export interface AccordionItemProps extends CardProps { - /** - * ID of the item - */ - id: string; - /** - * AccordionItemHeader and AccordionItemContent. - */ - children?: - | React.ReactElement<AccordionItemContentProps | AccordionItemHeaderProps> - | React.ReactElement<AccordionItemContentProps | AccordionItemHeaderProps>[] - | React.ReactNode; - /** - * Is the item disabled. - * @default false - */ - disabled?: boolean; - /** - * The element border type attribute specifies the color of accordion item border. - * @deprecated use selected or border instead - */ - borderType?: 'primary' | 'secondary'; - /** - * Adds visual styles and correct arias to show the item is selected. - * @default false - */ - selected?: boolean; -} - -export interface IAccordionItemContext { - disabled: boolean; - id: string; -} - -export const AccordionItemContext = React.createContext<IAccordionItemContext>({ - id: '', - disabled: false, -}); - -export const AccordionItem = (props: AccordionItemProps): JSX.Element => { - const { - children, - className, - id, - disabled = false, - borderType, - selected = false, - border = 'border-default', - ...rest - } = props; - const { onToggle, isOpen } = React.useContext(AccordionContext); - - const BEM = cn(styles['accordion__item'], className, { - [styles['accordion__item--disabled']]: disabled, - [styles['accordion__item--open']]: isOpen(id), - }); - - const mappedBorder: CardBorderType = selected || borderType === 'primary' ? 'primary-main' : border; // map deprecated borderType prop to border. TODO remove when borderType prop is removed - - return ( - <AccordionItemContext.Provider value={{ id, disabled }}> - <HashTrigger - id={id} - onMatch={(id) => { - if (!disabled) { - onToggle(id); - } - }} - > - <Card data-name="accordion-item" border={mappedBorder} className={BEM} {...rest}> - {children} - </Card> - </HashTrigger> - </AccordionItemContext.Provider> - ); -}; - -export default AccordionItem; diff --git a/libs/react-components/src/community/components/accordion/accordion.module.scss b/libs/react-components/src/community/components/accordion/accordion.module.scss deleted file mode 100644 index 78879ebc4..000000000 --- a/libs/react-components/src/community/components/accordion/accordion.module.scss +++ /dev/null @@ -1,40 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.accordion__item-wrapping-heading { - z-index: 1; - - // hide card header bottom border when accordion is closed - &:has(+ :global(.rah-static--height-zero)) .accordion__item-header { - border-bottom: none; - } -} - -.accordion__item-header { - border-radius: var(--border-radius-default); - transition: 300ms ease; // match content height animation - transition-property: border-radius, background, color; - - // hide card header bottom border when accordion is closed - &:has(+ :global(.rah-static--height-zero)) { - border-bottom: none; - } - - .accordion__item--open &, - .accordion__item--open .accordion__item-wrapping-heading & { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - } - - .accordion__item:not(.accordion__item--disabled) &:hover { - cursor: pointer; - } - - .accordion__item--disabled & { - color: var(--color-text-disabled); - } -} - -.accordion__item.accordion__item--open .accordion__item-content { - border-start-start-radius: 0; - border-start-end-radius: 0; -} diff --git a/libs/react-components/src/community/components/accordion/accordion.stories.tsx b/libs/react-components/src/community/components/accordion/accordion.stories.tsx deleted file mode 100644 index b7b58cc42..000000000 --- a/libs/react-components/src/community/components/accordion/accordion.stories.tsx +++ /dev/null @@ -1,307 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import React from 'react'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing/vertical-spacing'; -import Separator from '../../../tedi/components/misc/separator/separator'; -import Button from '../button/button'; -import Heading from '../typography/heading/heading'; -import Accordion, { AccordionProps } from './accordion'; -import AccordionItem, { AccordionItemProps } from './accordion-item/accordion-item'; -import AccordionItemContent, { AccordionItemContentProps } from './accordion-item-content/accordion-item-content'; -import AccordionItemHeader, { AccordionItemHeaderProps } from './accordion-item-header/accordion-item-header'; - -const meta: Meta<typeof Accordion> = { - component: Accordion, - subcomponents: { AccordionItem, AccordionItemContent, AccordionItemHeader } as never, - title: 'Community/Accordion', -}; - -const ACCORDION_ITEM_CONTENT = - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'; - -interface AccordionItemDto { - id: string; - header: string; - content: string; - disabled?: boolean; - itemProps?: Omit<AccordionItemProps, 'id'>; - headerProps?: AccordionItemHeaderProps; - contentProps?: AccordionItemContentProps; -} - -const accordionItems: AccordionItemDto[] = [ - { id: 'first', header: 'First', content: ACCORDION_ITEM_CONTENT }, - { id: 'second', header: 'Second', content: ACCORDION_ITEM_CONTENT }, - { id: 'disabled', header: 'Disabled', content: ACCORDION_ITEM_CONTENT, disabled: true }, - { id: 'fourth', header: 'Fourth', content: ACCORDION_ITEM_CONTENT }, -]; - -export default meta; - -export interface AccordionStory { - items?: AccordionItemDto[]; - accordion: AccordionProps; - accordionItem: Omit<AccordionItemProps, 'id'>; - accordionItemHeader: AccordionItemHeaderProps; - accordionItemContent: AccordionItemContentProps; -} - -type Story = StoryObj<AccordionStory>; - -const Template: StoryFn<AccordionStory> = ({ items = accordionItems, ...args }) => { - return ( - <VerticalSpacing size={1}> - <Accordion {...args.accordion}> - {items.map(({ id, header, content, disabled, itemProps, headerProps, contentProps }: AccordionItemDto) => ( - <AccordionItem key={id} {...args.accordionItem} {...itemProps} id={id} disabled={disabled}> - <AccordionItemHeader {...args.accordionItemHeader} {...headerProps}> - {header} - </AccordionItemHeader> - <AccordionItemContent {...args.accordionItemContent} {...contentProps}> - {content} - </AccordionItemContent> - </AccordionItem> - ))} - </Accordion> - </VerticalSpacing> - ); -}; - -const TemplateBackgrounds: StoryFn<AccordionStory> = ({ items = accordionItems, ...args }) => { - return ( - <VerticalSpacing size={1}> - {items.map(({ id, header, content, disabled, itemProps, headerProps, contentProps }: AccordionItemDto, index) => ( - <React.Fragment key={id}> - {index !== 0 && <Separator />} - <Accordion {...args.accordion} defaultOpenItem={[`${id}-1`]}> - <AccordionItem {...args.accordionItem} {...itemProps} id={`${id}-0`} disabled={disabled}> - <AccordionItemHeader {...args.accordionItemHeader} {...headerProps}> - {header} - </AccordionItemHeader> - <AccordionItemContent {...args.accordionItemContent} {...contentProps}> - {content} - </AccordionItemContent> - </AccordionItem> - <AccordionItem {...args.accordionItem} {...itemProps} id={`${id}-1`} disabled={disabled}> - <AccordionItemHeader {...args.accordionItemHeader} {...headerProps}> - {header} - </AccordionItemHeader> - <AccordionItemContent {...args.accordionItemContent} {...contentProps}> - {content} - </AccordionItemContent> - </AccordionItem> - </Accordion> - </React.Fragment> - ))} - </VerticalSpacing> - ); -}; - -const TemplateSelected: StoryFn<AccordionStory> = (args) => { - const [activeAccordionItemId, setActiveAccordionItemId] = React.useState<string | undefined>('second'); - - const getHeaderRow = (headerLabel: string, id: string, disabled?: boolean): JSX.Element => { - const isCurrent = activeAccordionItemId === id; - - const handleChoiceButtonClick = ( - event: React.MouseEvent<HTMLButtonElement> | React.MouseEvent<HTMLAnchorElement, MouseEvent>, - selectedAccordionItemId: string - ): void => { - event.preventDefault(); - event.stopPropagation(); - - setActiveAccordionItemId(isCurrent ? undefined : selectedAccordionItemId); - }; - - return ( - <Row justifyContent="between" alignItems="center"> - <Col>{headerLabel}</Col> - <Col width="auto"> - <Button - iconLeft={isCurrent ? 'check' : undefined} - disabled={disabled} - visualType={isCurrent ? undefined : 'secondary'} - aria-pressed={isCurrent} - onClick={(event) => handleChoiceButtonClick(event, id)} - > - {isCurrent ? 'Selected' : 'Select'} - </Button> - </Col> - </Row> - ); - }; - - return ( - <Accordion {...args.accordion}> - {accordionItems.map(({ id, header, content, disabled }: AccordionItemDto) => { - return ( - <AccordionItem - key={id} - {...args.accordionItem} - selected={activeAccordionItemId === id} - id={id} - disabled={disabled} - > - <AccordionItemHeader {...args.accordionItemHeader}> - {getHeaderRow(header, id, disabled)} - </AccordionItemHeader> - <AccordionItemContent {...args.accordionItemContent}>{content}</AccordionItemContent> - </AccordionItem> - ); - })} - </Accordion> - ); -}; - -const TemplateWithButton: StoryFn<AccordionStory> = (args) => { - return ( - <VerticalSpacing size={1}> - <Accordion {...args.accordion}> - {accordionItems.map(({ id, header, content, disabled }: AccordionItemDto) => ( - <AccordionItem key={id} {...args.accordionItem} id={id} disabled={disabled}> - <AccordionItemHeader {...args.accordionItemHeader}>{header}</AccordionItemHeader> - <AccordionItemContent {...args.accordionItemContent}>{content}</AccordionItemContent> - </AccordionItem> - ))} - </Accordion> - </VerticalSpacing> - ); -}; - -const TemplateWithHeading: StoryFn<AccordionStory> = (args) => { - return ( - <VerticalSpacing size={1}> - <Accordion {...args.accordion}> - {accordionItems.map(({ id, header, content, disabled }: AccordionItemDto) => ( - <AccordionItem key={id} {...args.accordion} id={id} disabled={disabled}> - <AccordionItemHeader {...args.accordionItemHeader}> - <Heading element="h4" modifiers="h5"> - {header} - </Heading> - </AccordionItemHeader> - <AccordionItemContent {...args.accordionItemContent}>{content}</AccordionItemContent> - </AccordionItem> - ))} - </Accordion> - </VerticalSpacing> - ); -}; - -export const Default: Story = { - render: Template, -}; - -export const DefaultOpen: Story = { - render: Template, - args: { - accordion: { - defaultOpenItem: ['second'], - }, - }, -}; - -export const OutsideControlledState: Story = { - render: Template, - args: { - accordion: { - openItem: accordionItems.map(({ id }) => id), - onToggleItem: (_id: string) => { - // Handle state in your component - }, - }, - }, -}; - -/** - * Since `AccordionItem` internally uses a `Card` and `CardContent`, then it also supports different paddings. - */ -export const Padding: Story = { - render: Template, - args: { - accordion: { - defaultOpenItem: ['second'], - }, - accordionItem: { - padding: 0.5, - }, - }, -}; - -export const Gutter: Story = { - render: Template, - args: { - accordion: { - defaultOpenItem: ['second'], - gutter: 0.25, - }, - }, -}; - -/** - * Since `AccordionItem` internally uses a `Card` and `CardHeader`, then it also supports different backgrounds for the header and content. - */ -export const Background: Story = { - render: TemplateBackgrounds, - args: { - items: [ - { id: 'default', header: 'Default', content: ACCORDION_ITEM_CONTENT }, - { - id: 'primary', - header: 'Primary', - content: ACCORDION_ITEM_CONTENT, - headerProps: { background: 'primary' }, - itemProps: { background: 'bg-subtle' }, - }, - { - id: 'white/primary', - header: 'White/primary', - content: ACCORDION_ITEM_CONTENT, - headerProps: { background: 'white/primary' }, - itemProps: { background: 'bg-subtle' }, - }, - { - id: 'muted/primary', - header: 'Muted/primary', - content: ACCORDION_ITEM_CONTENT, - headerProps: { background: 'muted/primary' }, - }, - ], - accordionItemHeader: { - openText: ' ', - closeText: ' ', - }, - }, -}; - -/** - * When you want to display the card as selected. - */ -export const Selected: Story = { - render: TemplateSelected, -}; - -export const WithButtons: Story = { - render: TemplateWithButton, - args: { - accordionItemHeader: { - openText: 'Open', - closeText: 'Close', - }, - }, -}; - -/** - * Because `AccordionItemHeader` renders a button it is not a valid HTML to have a h1-h6 as its content.<br/> - * The component automatically moves an immediate `<Heading>` and `<Text element="h1-h6">` outside and wraps the `AccordionItemHeader` with it.<br/> - * When you have a more complex `AccordionItemHeader`, then you should not render a h1-h6 tag inside it. - */ -export const HeadingContent: Story = { - args: { - accordionItemHeader: { - openText: 'Open', - closeText: 'Close', - }, - }, - render: TemplateWithHeading, -}; diff --git a/libs/react-components/src/community/components/accordion/accordion.tsx b/libs/react-components/src/community/components/accordion/accordion.tsx deleted file mode 100644 index fb8447a44..000000000 --- a/libs/react-components/src/community/components/accordion/accordion.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { VerticalSpacing, VerticalSpacingSize } from '../../../tedi/components/layout/vertical-spacing'; -import styles from './accordion.module.scss'; - -export interface AccordionProps { - /** - * Accordion children - */ - children?: React.ReactNode; - /** - * Additional class. - */ - className?: string; - /** - * Open item's property. Used to control the openItems outside the components. - * Should be used with onToggle function - */ - openItem?: string[]; - /** - * onToggle handler. - */ - onToggleItem?: (id: string) => void; - /** - * The list of IDs items that should be open by default - * @default [] - */ - defaultOpenItem?: string[]; - /** - * Vertical spacing between AccordionItems - * @default 0.5 - */ - gutter?: VerticalSpacingSize; -} - -export interface IAccordionContext { - isOpen: (id: string) => boolean; - onToggle: (id: string) => void; -} - -export const AccordionContext = React.createContext<IAccordionContext>({ - isOpen: () => true, - onToggle: () => null, -}); - -export const Accordion = (props: AccordionProps): JSX.Element => { - const { children, className, openItem, gutter = 0.5, onToggleItem, defaultOpenItem = [], ...rest } = props; - const openValues = openItem ? openItem : defaultOpenItem; - const [innerOpenItem, setOpen] = React.useState<string[]>(openValues); - - const isOpenItemControlled = (openItem = props.openItem): openItem is string[] => { - return !!onToggleItem && typeof openItem !== 'undefined'; - }; - - const onToggle = (id: string): void => { - if (onToggleItem) { - return onToggleItem(id); - } - if (!isOpenItemControlled(openItem)) { - setOpen((prevOpen) => { - if (prevOpen.includes(id)) { - return prevOpen.filter((i) => i !== id); - } else { - return [...prevOpen, id]; - } - }); - } - }; - - const getOpenItems = (): string[] => { - return onToggleItem && typeof openItem !== 'undefined' ? openItem : innerOpenItem; - }; - - const isOpen = (id: string): boolean => { - return getOpenItems().includes(id); - }; - - return ( - <AccordionContext.Provider value={{ isOpen, onToggle }}> - <div data-name="accordion" {...rest} className={cn(styles['accordion'], className)}> - <VerticalSpacing size={gutter}>{children}</VerticalSpacing> - </div> - </AccordionContext.Provider> - ); -}; - -export default Accordion; diff --git a/libs/react-components/src/community/components/accordion/index.tsx b/libs/react-components/src/community/components/accordion/index.tsx deleted file mode 100644 index aecaa9d42..000000000 --- a/libs/react-components/src/community/components/accordion/index.tsx +++ /dev/null @@ -1,4 +0,0 @@ -export * from './accordion'; -export * from './accordion-item/accordion-item'; -export * from './accordion-item-content/accordion-item-content'; -export * from './accordion-item-header/accordion-item-header'; diff --git a/libs/react-components/src/community/components/anchor/anchor-helpers.tsx b/libs/react-components/src/community/components/anchor/anchor-helpers.tsx deleted file mode 100644 index f17379a43..000000000 --- a/libs/react-components/src/community/components/anchor/anchor-helpers.tsx +++ /dev/null @@ -1,26 +0,0 @@ -/** - * This file contains only Anchor helper components that are shared between different stories. These are not exported in the component library - */ -import Link from 'next/link'; -import React, { forwardRef } from 'react'; - -import { Anchor, AnchorProps } from './anchor'; - -// reuse this function when you want to pass it into other components that accept Anchor props (E.g Logo, Header etc) -const LinkBehaviour = forwardRef<HTMLAnchorElement, React.ComponentProps<typeof Link>>( - ({ children, className, href, ...rest }, ref) => { - return ( - <Link ref={ref} href={href} className={className} {...rest}> - {children} - </Link> - ); - } -); -LinkBehaviour.displayName = 'LinkBehaviour'; - -// reuse this component when you want to render <Anchor> in JSX. NB! Do not pass this to other components link(s) props. -const CustomAnchor = (props: AnchorProps<typeof Link>) => { - return <Anchor as={LinkBehaviour} {...props} />; -}; - -export { LinkBehaviour, CustomAnchor }; diff --git a/libs/react-components/src/community/components/anchor/anchor.spec.tsx b/libs/react-components/src/community/components/anchor/anchor.spec.tsx deleted file mode 100644 index 9f2bb737c..000000000 --- a/libs/react-components/src/community/components/anchor/anchor.spec.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { render } from '@testing-library/react'; - -import Anchor from './anchor'; - -describe('Anchor', () => { - it('should render successfully', () => { - const { baseElement } = render(<Anchor href="#">Link</Anchor>); - expect(baseElement).toBeTruthy(); - }); -}); diff --git a/libs/react-components/src/community/components/anchor/anchor.stories.tsx b/libs/react-components/src/community/components/anchor/anchor.stories.tsx deleted file mode 100644 index b9e973f64..000000000 --- a/libs/react-components/src/community/components/anchor/anchor.stories.tsx +++ /dev/null @@ -1,228 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import Link from 'next/link'; -import React, { ComponentProps, forwardRef } from 'react'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import Text from '../typography/text/text'; -import { Anchor, AnchorProps } from './anchor'; - -const meta: Meta<AnchorProps> = { - component: Anchor, - title: 'Community/Anchor', - parameters: { - status: { - type: ['deprecated', 'ExistsInTediReady'], - }, - }, -}; - -export default meta; -type Story = StoryObj<typeof Anchor>; - -const Template: StoryFn<ComponentProps<typeof Anchor>> = (args) => { - const getRow = (name: string, rowProps?: Partial<AnchorProps>): JSX.Element => ( - <Row gutterX={5} alignItems="center"> - <Col width={1}> - <Text color={args.color === 'inverted' ? 'inverted' : undefined}>{name}</Text> - </Col> - <Col width="auto"> - <Row> - <Col width="auto"> - <Anchor {...args} {...rowProps}> - Link - </Anchor> - </Col> - <Col width="auto"> - <Anchor {...args} {...rowProps} iconRight="north_east"> - Link - </Anchor> - </Col> - <Col width="auto"> - <Anchor {...args} {...rowProps} icon="north_east"> - Link - </Anchor> - </Col> - </Row> - </Col> - <Col width="auto"> - <Row> - <Col width="auto"> - <Anchor {...args} {...rowProps} size="small"> - Link - </Anchor> - </Col> - <Col width="auto"> - <Anchor {...args} {...rowProps} iconRight="north_east" size="small"> - Link - </Anchor> - </Col> - <Col width="auto"> - <Anchor {...args} {...rowProps} icon="north_east" size="small"> - Link - </Anchor> - </Col> - </Row> - </Col> - </Row> - ); - - return ( - <VerticalSpacing size={0.5}> - {getRow('Default')} - {getRow('Hover', { isHovered: true })} - {getRow('Active', { isActive: true })} - </VerticalSpacing> - ); -}; - -export const Default: Story = { - render: Template, - - args: { - children: 'Link', - href: '#', - }, -}; - -export const Inverted: Story = { - render: Template, - - args: { - ...Default.args, - color: 'inverted', - }, - - parameters: { - backgrounds: { default: 'inverted' }, - }, -}; - -export const TextColor: Story = { - render: Template, - - args: { - ...Default.args, - color: 'text-color', - }, -}; - -/** - * You can render any visual button type as link because they share same visual and rendering logic in the back - */ -export const AsPrimaryButton: Story = { - render: Template, - - args: { - ...Default.args, - visualType: 'primary', - }, -}; - -/** - * You can achieve the integration with third-party routing libraries with the `as` prop. In this example we pass in Next.js `<Link>` component.<br/> - * If you don't want to pass the `as` prop every time you use Anchor, you can create a custom component that handles the logic in one place.<br/> - * Just use that component every time you want to handle client side navigation.<br/> - * When using `as` prop then typescript inherits the correct types from the component you pass into `as`.<br/> - * There is one caveat to this that is explained in <a href="#anchors-as-properties">Anchors As Properties</a> - */ -export const CustomComponent: StoryObj<AnchorProps> = { - render: () => { - // reuse this function when you want to pass it into other components that accept Anchor props (E.g. Logo, Header etc) - const LinkBehaviour = forwardRef<HTMLAnchorElement, React.ComponentProps<typeof Link>>( - ({ children, className, ...rest }, ref) => { - return ( - <Link ref={ref} className={className} {...rest}> - {children} - </Link> - ); - } - ); - LinkBehaviour.displayName = 'LinkBehaviour'; - - // reuse this component when you want to render <Anchor> in JSX. NB! Do not pass this to other components link(s) props. - const CustomAnchor = (props: AnchorProps<typeof Link>) => { - return <Anchor as={LinkBehaviour} {...props} />; - }; - - return ( - <Row justifyContent="around"> - <Col width="auto"> - <Anchor href="#">Plain link</Anchor> - </Col> - <Col width="auto"> - <Anchor as={LinkBehaviour} href={{ pathname: '/path', query: { personalCode: '1234567' } }}> - Next.js link with custom logic - </Anchor> - </Col> - <Col width="auto"> - <CustomAnchor href={{ pathname: '/path', query: { personalCode: '1234567' } }}> - Wrapped Next.js link - </CustomAnchor> - </Col> - </Row> - ); - }, -}; - -/** - * Use when u need to wrap link to some component for example logo img, that should not use same visual as other links. - */ -export const NoStyleAnchor: Story = { - args: { - noStyle: true, - href: 'https://www.neti.ee/', - children: <img width={200} src="tehik_logo.png" alt="tehik.ee" />, - target: '_blank', - }, -}; - -export const FullWidth: Story = { - args: { - fullWidth: true, - href: '#', - visualType: 'primary', - children: 'Anchor that stretches', - }, -}; - -/** - * When link text wraps to multiple lines, the icon should be inline with the text. - */ -export const LongTextIconInline: Story = { - args: { - children: 'This is a very long link text that should wrap into multiple lines', - }, - - render: (args) => ( - <Row> - <Col md={4}> - <Anchor iconLeft="notifications">{args.children}</Anchor> - </Col> - <Col md={4}> - <Anchor iconRight="north_east">{args.children}</Anchor> - </Col> - </Row> - ), -}; - -export const LinkIconFlexed: Story = { - args: { - children: 'This is a very long link text that should wrap into multiple lines', - }, - - render: (args) => ( - <Row> - <Col md={4}> - <Anchor iconLeft="notifications" iconStandalone> - {args.children} - </Anchor> - </Col> - <Col md={4}> - <Anchor iconRight="north_east" iconStandalone> - {args.children} - </Anchor> - </Col> - </Row> - ), -}; diff --git a/libs/react-components/src/community/components/anchor/anchor.tsx b/libs/react-components/src/community/components/anchor/anchor.tsx deleted file mode 100644 index bcde206ba..000000000 --- a/libs/react-components/src/community/components/anchor/anchor.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import cn from 'classnames'; -import React, { forwardRef } from 'react'; - -import { useLabels } from '../../../tedi/providers/label-provider'; -import { PolymorphicRef } from '../../helpers/polymorphic/types'; -import { IntentionalAny } from '../../types'; -import ButtonContent, { ButtonContentProps } from '../button-content/button-content'; -import styles from '../button-content/button-content.module.scss'; - -export type InternalAnchorProps = { - /** - * If true, the icon will be placed in a separate column - */ - iconStandalone?: boolean; -}; - -type AllowedTags = 'a' | React.ComponentType<IntentionalAny>; - -export type AnchorProps<C extends React.ElementType = 'a'> = ButtonContentProps<C, InternalAnchorProps, AllowedTags>; - -export type AnchorComponent = <C extends React.ElementType = 'a'>(props: AnchorProps<C>) => React.ReactElement | null; -const InternalAnchor = forwardRef( - <C extends React.ElementType = 'a'>(props: AnchorProps<C>, ref?: PolymorphicRef<C>) => { - const { getLabel } = useLabels(); - const { visualType = 'link', as, iconStandalone = false, children, ...rest } = props; - - const ComponentAs = as || 'a'; - - return ( - <ButtonContent - data-name="anchor" - {...(rest as IntentionalAny)} - ref={ref} - as={ComponentAs} - visualType={visualType} - className={cn(rest.className, { [styles['btn__icon-standalone--link']]: iconStandalone })} - > - {children} - {rest.target === '_blank' && <span className="sr-only">({getLabel('anchor.new-tab')})</span>} - </ButtonContent> - ); - } -); - -InternalAnchor.displayName = 'Anchor'; - -/** - * Anchor component that should be always used when href is passed and a element should be rendered. If u need to use visually button, but still redirect as link use `visualType` prop. <br/> - * __NB! U can not use disabled button visuals with anchor.__ - * - * By default, the navigation is performed with a native `<a>` element. You can customize it to use your own router. For instance, using Next.js's Link or react-router.<br /> - * Inherits all props from the component passed into `as`. If `as` is omitted, then the default is native `<a>` tag - * - * To allow Customized Anchor usage as direct children of Header you need to add displayName to it. <a href="/docs/components-layout-header-header-overview--header-overview#settings">See more.</a> - */ - -// TODO: Remove ts-ignore -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -export const Anchor: AnchorComponent = InternalAnchor; - -export default Anchor; diff --git a/libs/react-components/src/community/components/button-content/README.md b/libs/react-components/src/community/components/button-content/README.md deleted file mode 100644 index 621f60a47..000000000 --- a/libs/react-components/src/community/components/button-content/README.md +++ /dev/null @@ -1,3 +0,0 @@ -ButtonContent component is only used internally by @tedi-design-system and is not exported. -It contains rendering visuals of links and buttons, so Anchor can be rendered visually as Button and vice versa. -But it forces component users to always use semantically correct component. diff --git a/libs/react-components/src/community/components/button-content/button-content.module.scss b/libs/react-components/src/community/components/button-content/button-content.module.scss deleted file mode 100644 index 308cb19c2..000000000 --- a/libs/react-components/src/community/components/button-content/button-content.module.scss +++ /dev/null @@ -1,412 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -$btn-height: 2.5rem; -$btn-height-small: 2.25rem; - -@mixin button-variant( - $background, - $border, - $color, - $background-h, - $border-h, - $color-h, - $background-d: var(--color-bg-disabled), - $border-d: var(--color-bg-disabled), - $color-d: var(--color-text-disabled) -) { - color: $color; - background-color: $background; - border-color: $border; - - &.btn--is-active:not(:disabled, [aria-disabled='true']), - &:active:not(:disabled, [aria-disabled='true']), - &.btn--is-hovered:not(:disabled, [aria-disabled='true']), - &:hover:not(:disabled, [aria-disabled='true']) { - background-color: $background-h; - border-color: $border-h; - } - - &:disabled { - color: $color-d; - background-color: $background-d; - border-color: $border-d; - } -} - -@mixin button-secondary-variant( - $border, - $color, - $border-h, - $color-h, - $background-h, - $background-d: var(--color-bg-disabled), - $border-d: var(--color-bg-disabled), - $color-d: var(--color-text-disabled) -) { - @include button-variant( - var(--color-white), - $border, - $color, - $background-h, - $border-h, - $color-h, - $background-d, - $border-d, - $color-d - ); -} - -@mixin link-variant($color, $color-h, $color-d) { - color: $color; - - &.btn--is-hovered:not(:disabled, [aria-disabled='true']), - &.btn--is-active:not(:disabled, [aria-disabled='true']), - &:hover:not(:disabled, [aria-disabled='true']), - &:active:not(:disabled, [aria-disabled='true']) { - color: $color-h; - } - - &:disabled { - color: $color-d; - } -} - -.btn { - position: relative; - display: inline-flex; - align-items: center; - justify-content: center; - max-width: 100%; - min-height: $btn-height; - padding: 0 1.625rem; // 0 26px - margin: 0; - font-family: Roboto, Arial, Helvetica, sans-serif; - font-size: 1rem; - text-align: center; - text-decoration: none; - cursor: pointer; - background-image: none; - border-style: solid; - border-width: 1px; - border-radius: 3rem; - transition: 150ms ease; - transition-property: background-color, border-color; - - @include mixins.print-grayscale; -} - -.btn:disabled, -.btn[aria-disabled='true'] { - cursor: auto; -} - -.btn--small { - min-height: $btn-height-small; - padding: 0 1.125rem; // 0 18px - font-size: 0.875rem; // 14px - line-height: 1.5rem; // 20px - - &.btn--icon-only { - width: $btn-height-small; - } -} - -.btn--tertiary { - padding: 0 0.75rem; // 0 12px - background-clip: padding-box; // Allows to use borders with opacity value -} - -.btn--icon-only { - width: $btn-height; - padding: 0; -} - -.btn--default { - $btn-default-opacity-bg: rgb(0 90 163 / 8%); - - &.btn--primary { - @include button-variant( - var(--color-primary-main), - var(--color-primary-main), - var(--color-text-inverted), - var(--color-primary-active), - var(--color-primary-active), - var(--color-text-inverted) - ); - } - - &.btn--secondary { - @include button-secondary-variant( - var(--color-border-contrast), - var(--color-primary-main), - var(--color-primary-main), - var(--color-primary-active), - $btn-default-opacity-bg - ); - } - - &.btn--tertiary { - @include button-variant( - var(--color-transparent), - var(--color-transparent), - var(--color-primary-main), - $btn-default-opacity-bg, - $btn-default-opacity-bg, - var(--color-primary-active) - ); - } -} - -.btn--important { - $btn-important-opacity-bg: rgb(196 57 57 / 8%); - - &.btn--primary { - @include button-variant( - var(--color-important-main), - var(--color-important-main), - var(--color-text-inverted), - var(--color-important-active), - var(--color-important-active), - var(--color-text-inverted) - ); - } - - &.btn--secondary { - @include button-secondary-variant( - var(--color-border-contrast), - var(--color-important-main), - var(--color-important-main), - var(--color-important-active), - $btn-important-opacity-bg - ); - } - - &.btn--tertiary { - @include button-variant( - var(--color-transparent), - var(--color-transparent), - var(--color-important-main), - $btn-important-opacity-bg, - $btn-important-opacity-bg, - var(--color-important-active) - ); - } -} - -.btn--positive { - $btn-positive-opacity-bg: rgb(44 122 76 / 8%); - - &.btn--primary { - @include button-variant( - var(--color-positive-main), - var(--color-positive-main), - var(--color-text-inverted), - var(--color-positive-active), - var(--color-positive-active), - var(--color-text-inverted) - ); - } - - &.btn--secondary { - @include button-secondary-variant( - var(--color-border-contrast), - var(--color-positive-main), - var(--color-positive-main), - var(--color-positive-active), - $btn-positive-opacity-bg - ); - } - - &.btn--tertiary { - @include button-variant( - var(--color-transparent), - var(--color-transparent), - var(--color-positive-main), - $btn-positive-opacity-bg, - $btn-positive-opacity-bg, - var(--color-positive-active) - ); - } -} - -.btn--inverted { - $btn-inverted-border: rgb(255 255 255 / 50%); - $btn-inverted-opacity-bg: rgb(255 255 255 / 10%); - - --global-outline-color: var(--color-primary-highlight); - - &.btn--primary { - @include button-variant( - var(--color-primary-highlight), - var(--color-primary-highlight), - var(--color-primary-active), - var(--color-white), - var(--color-white), - var(--color-primary-main) - ); - } - - &.btn--secondary { - /* used text color as border, because we don't want to add new border variable */ - @include button-variant( - var(--color-transparent), - $btn-inverted-border, - var(--color-text-inverted), - $btn-inverted-opacity-bg, - var(--color-text-inverted), - var(--color-text-inverted), - var(--color-transparent), - var(--color-text-disabled) - ); - } - - &.btn--tertiary { - @include button-variant( - var(--color-transparent), - var(--color-transparent), - var(--color-text-inverted), - $btn-inverted-opacity-bg, - $btn-inverted-opacity-bg, - var(--color-important-active), - var(--color-transparent), - var(--color-text-disabled) - ); - } - - &.btn--link { - @include link-variant(var(--color-text-inverted), var(--color-text-inverted), var(--color-text-disabled)); - } -} - -.btn--text-color { - &.btn--link { - @include link-variant(inherit, var(--color-text-subtle), var(--color-text-disabled)); - } -} - -.btn--link { - display: inline-block; - width: auto; - height: auto; - min-height: auto; - padding: 0; - color: var(--color-primary-main); - text-align: left; - text-decoration: none; - background: none; - border: none; - border-radius: 3px; - - @include link-variant(var(--color-primary-main), var(--color-primary-active), var(--color-text-disabled)); -} - -.btn__text { - text-align: center; - - .btn--link.btn--is-hovered:not(:disabled) &, - .btn--link.btn--is-active:not(:disabled) &, - .btn--link:hover:not(:disabled) &, - .btn--link:active:not(:disabled) & { - text-decoration: underline; - } - - .btn--is-loading:not(.btn--icon) & { - color: var(--color-transparent); - } - - &:not(.btn--link .btn__text) { - text-wrap: nowrap; - - @include breakpoints.media-breakpoint-up(md) { - display: -webkit-box; - overflow: hidden; - text-overflow: ellipsis; - text-wrap: wrap; - word-break: break-word; - -webkit-line-clamp: 2; - line-clamp: 2; - -webkit-box-orient: vertical; - } - } -} - -.btn__inner { - display: flex; - align-items: center; - justify-content: center; - min-width: 1.5rem; - min-height: 1.5rem; - - .btn--link:not(.btn--is-loading) & { - display: inline; - } - - .btn--link.btn__icon-standalone--link:not(.btn--is-loading) & { - display: inline-flex; - align-items: flex-start; - - .btn__icon { - @include mixins.responsive-styles(line-height, body-regular-line-height); - } - - .btn__text { - text-align: left; - } - } -} - -.btn__icon { - $button-icon-margin: 0.375rem; - $button-small-icon-margin: 0.25rem; - $button-link-icon-margin: 0.25rem; - - &--left { - margin-right: $button-icon-margin; - - .btn--small & { - margin-right: $button-small-icon-margin; - } - - .btn--link & { - margin-right: $button-link-icon-margin; - } - } - - &--right { - margin-left: $button-icon-margin; - - .btn--small & { - margin-left: $button-small-icon-margin; - } - - .btn--link & { - margin-left: $button-link-icon-margin; - } - } - - .btn--link & { - display: inline-block; - vertical-align: middle; - } -} - -.btn__spinner { - stroke: currentcolor; -} - -.btn--underline { - text-decoration: underline; -} - -.btn--icon-only .btn__text { - @include mixins.visually-hidden; -} - -.btn--no-style { - @include mixins.button-reset; -} - -.btn--full-width { - width: 100%; -} diff --git a/libs/react-components/src/community/components/button-content/button-content.tsx b/libs/react-components/src/community/components/button-content/button-content.tsx deleted file mode 100644 index feaf52ba2..000000000 --- a/libs/react-components/src/community/components/button-content/button-content.tsx +++ /dev/null @@ -1,191 +0,0 @@ -import cn from 'classnames'; -import React, { forwardRef } from 'react'; - -import { Spinner } from '../../../tedi/components/loaders/spinner/spinner'; -import Print from '../../../tedi/components/misc/print/print'; -import { AllowedHTMLTags, PolymorphicComponentPropWithRef, PolymorphicRef } from '../../helpers/polymorphic/types'; -import { IntentionalAny } from '../../types'; -import { ButtonColor, ButtonType } from '../button/button'; -import Icon, { IconProps } from '../icon/icon'; -import styles from './button-content.module.scss'; - -export type ButtonContentProps< - C extends React.ElementType, - P extends Record<string, IntentionalAny>, - A -> = PolymorphicComponentPropWithRef< - AllowedHTMLTags<C, A>, - { - /** - * Button children - */ - children: React.ReactNode; - /** - * Additional custom class name. - */ - className?: string; - /** - * Button visual type - * @default primary - */ - visualType?: ButtonType; - /** - * If button should take all the space it has - */ - fullWidth?: boolean; - /** - * Color schema for button. PS text-color works only with link type links. - * @default default - */ - color?: ButtonColor; - /** - * Button size - */ - size?: 'small'; - /** - * Name of the icon when button only has an icon in it. - */ - icon?: string | IconProps; - /** - * Name of the icon we want to show on the left. - */ - iconLeft?: string | IconProps; - /** - * Name of the icon we want to show on the right. - */ - iconRight?: string | IconProps; - /** - * Underline the button text - */ - underline?: boolean; - /** - * If button is active and should keep its hover state. - */ - isHovered?: boolean; - /** - * If button is active and should keep it's active state. - */ - isActive?: boolean; - /** - * If button is in loading state and should show spinner. - * When isLoading is true, button does not trigger onClick event. - * @default false - */ - isLoading?: boolean; - /** - * Skip applying button/link styles - * Useful when you just want to use Button or Anchor logic without the styles - * In this case icon, iconLeft and iconRight are ignored - */ - noStyle?: boolean; - /** - * - */ - renderWrapperElement?: unknown; - } & P ->; - -export type ButtonContentComponent = <C extends React.ElementType, P extends Record<string, IntentionalAny>, A>( - props: ButtonContentProps<C, P, A> -) => React.ReactElement | null; - -const InternalButtonContent = forwardRef( - <C extends React.ElementType, P extends Record<string, IntentionalAny>, A>( - { - children, - as, - text, - className, - visualType = 'primary', - color = 'default', - size, - icon, - iconLeft, - iconRight, - underline = false, - isHovered, - isActive, - isLoading = false, - noStyle, - renderWrapperElement, - fullWidth, - onClick, - ...rest - }: ButtonContentProps<C, P, A>, - ref?: PolymorphicRef<C> - ) => { - const Component = as || 'button'; - const hasIcon = icon || iconLeft || iconRight; - - const BEM = !noStyle - ? cn( - styles['btn'], - styles[`btn--${visualType}`], - styles[`btn--${color}`], - className, - { [styles[`btn--${size}`]]: size }, - { [styles['btn--underline']]: underline }, - { [styles['btn--is-hovered']]: isHovered }, - { [styles['btn--is-active']]: isActive }, - { [styles['btn--is-loading']]: isLoading }, - { [styles['btn--icon-only']]: icon }, - { [styles['btn--icon']]: hasIcon }, - { [styles['btn--full-width']]: fullWidth } - ) - : cn(styles['btn--no-style'], className, { [styles['btn--full-width']]: fullWidth }); - - const getIcon = (location: string, icon: string | IconProps): JSX.Element => { - const iconBEM = cn(styles['btn__icon'], styles[`btn__icon--${location}`], { - [styles['btn__spinner']]: isLoading, - }); - const defaultIconProps: Partial<IconProps> = { size: 16, className: iconBEM }; - const iconProps: IconProps = - typeof icon === 'string' - ? { ...defaultIconProps, name: icon } - : { ...defaultIconProps, ...icon, className: cn(defaultIconProps.className, icon?.className) }; - - return isLoading ? <Spinner className={iconProps.className} /> : <Icon {...iconProps} />; - }; - - const renderContent = (): JSX.Element => ( - <span className={styles['btn__inner']}> - {icon && getIcon('centre', icon)} - {iconLeft && getIcon('left', iconLeft)} - <span className={styles['btn__text']}>{children}</span> - {isLoading && !hasIcon && <Spinner position="absolute" className={styles['btn__spinner']} />} - {iconRight && getIcon('right', iconRight)} - </span> - ); - - const onClickHandler = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>): void => { - if (onClick && !isLoading) onClick(event); - }; - - return ( - <Print visibility="hide"> - <Component - data-name="button-content" - {...rest} - aria-disabled={isLoading || rest['aria-disabled']} - onClick={onClickHandler} - ref={ref} - className={BEM} - > - {!noStyle ? renderContent() : children} - </Component> - </Print> - ); - } -); - -InternalButtonContent.displayName = 'ButtonContent'; - -/** - * Shares the rendering logic between `Anchor` and `Button`. We don't export it from the component library. - */ -// TODO: Remove ts-ignore -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -const ButtonContent: ButtonContentComponent = InternalButtonContent; - -export default ButtonContent; diff --git a/libs/react-components/src/community/components/button/button.spec.tsx b/libs/react-components/src/community/components/button/button.spec.tsx deleted file mode 100644 index 6a6bfb150..000000000 --- a/libs/react-components/src/community/components/button/button.spec.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { act, render, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; - -import Button, { ButtonProps } from './button'; - -const getComponent = (props?: Partial<ButtonProps>) => { - return <Button {...props}>Click me</Button>; -}; - -describe('Button', () => { - it('should render successfully', () => { - const { baseElement } = render(getComponent()); - expect(baseElement).toBeTruthy(); - }); - - it('should call onClick', async () => { - const onClick = jest.fn(); - render(getComponent({ onClick })); - - await act(async () => { - await userEvent.click(screen.getByText('Click me')); - }); - expect(onClick).toBeCalledTimes(1); - }); -}); diff --git a/libs/react-components/src/community/components/button/button.stories.tsx b/libs/react-components/src/community/components/button/button.stories.tsx deleted file mode 100644 index fd6f7d97e..000000000 --- a/libs/react-components/src/community/components/button/button.stories.tsx +++ /dev/null @@ -1,245 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import Text from '../typography/text/text'; -import { Button, ButtonProps } from './button'; - -const meta: Meta<ButtonProps> = { - title: 'Community/Button', - component: Button, - parameters: { - status: { - type: ['deprecated', 'ExistsInTediReady'], - }, - }, -}; - -export default meta; -type Story = StoryObj<typeof Button>; - -const Template: StoryFn<ButtonProps> = (args) => { - const getRow = (name: string, rowProps?: Partial<ButtonProps>): JSX.Element => ( - <Row gutterX={5} alignItems="center"> - <Col width={1}> - <Text color={args.color === 'inverted' ? 'inverted' : undefined}>{name}</Text> - </Col> - <Col width="auto"> - <Row> - <Col width="auto"> - <Button {...args} {...rowProps}> - Button - </Button> - </Col> - <Col width="auto"> - <Button {...args} {...rowProps} iconRight="north_east"> - Button - </Button> - </Col> - <Col width="auto"> - <Button {...args} {...rowProps} icon="north_east"> - Button - </Button> - </Col> - </Row> - </Col> - <Col width="auto"> - <Row> - <Col width="auto"> - <Button {...args} {...rowProps} size="small"> - Button - </Button> - </Col> - <Col width="auto"> - <Button {...args} {...rowProps} iconRight="north_east" size="small"> - Button - </Button> - </Col> - <Col width="auto"> - <Button {...args} {...rowProps} icon="north_east" size="small"> - Button - </Button> - </Col> - </Row> - </Col> - </Row> - ); - - return ( - <VerticalSpacing size={0.5}> - {getRow('Default')} - {getRow('Active', { isActive: true })} - {getRow('Disabled', { disabled: true })} - {getRow('Loading', { isLoading: true })} - </VerticalSpacing> - ); -}; - -export const Default: Story = { - render: Template, -}; - -export const Secondary: Story = { - render: Template, - - args: { - visualType: 'secondary', - }, -}; - -export const Tertiary: Story = { - render: Template, - - args: { - visualType: 'tertiary', - }, -}; - -export const Important: Story = { - render: Template, - - args: { - color: 'important', - }, -}; - -export const ImportantSecondary: Story = { - render: Template, - - args: { - ...Important.args, - visualType: 'secondary', - }, -}; - -export const ImportantTertiary: Story = { - render: Template, - - args: { - ...Important.args, - visualType: 'tertiary', - }, -}; - -export const Positive: Story = { - render: Template, - - args: { - color: 'positive', - }, -}; - -export const PositiveSecondary: Story = { - render: Template, - - args: { - ...Positive.args, - visualType: 'secondary', - }, -}; -export const PositiveTertiary: Story = { - render: Template, - - args: { - ...Positive.args, - visualType: 'tertiary', - }, -}; - -export const Inverted: Story = { - render: Template, - - args: { - color: 'inverted', - }, - - parameters: { - backgrounds: { default: 'inverted' }, - }, -}; - -export const InvertedSecondary: Story = { - render: Template, - - args: { - ...Inverted.args, - visualType: 'secondary', - }, - - parameters: { - backgrounds: { default: 'inverted' }, - }, -}; - -export const InvertedTertiary: Story = { - render: Template, - - args: { - ...Inverted.args, - visualType: 'tertiary', - }, - - parameters: { - backgrounds: { default: 'inverted' }, - }, -}; - -export const Link: Story = { - render: Template, - - args: { - visualType: 'link', - }, -}; - -export const InvertedLink: Story = { - render: Template, - - args: { - ...Link.args, - color: 'inverted', - }, - - parameters: { - backgrounds: { default: 'inverted' }, - }, -}; - -const NoStyleTemplate: StoryFn<ButtonProps> = (args) => { - return ( - <Button {...args} noStyle={true}> - Button without styles - </Button> - ); -}; - -export const NoStyle: Story = { - render: NoStyleTemplate, -}; - -export const FullWidth: Story = { - args: { - fullWidth: true, - children: 'Button that stretches', - }, -}; - -export const LongTextButtonThatWrapsIntoMultipleLines: Story = { - args: { - children: 'This is a very long link text that should wrap into multiple lines', - }, - - render: (args) => ( - <Row> - <Col md={4}> - <Button>{args.children}</Button> - </Col> - <Col md={4}> - <Button iconLeft="edit">{args.children}</Button> - </Col> - <Col md={3}> - <Button>{args.children}</Button> - </Col> - </Row> - ), -}; diff --git a/libs/react-components/src/community/components/button/button.tsx b/libs/react-components/src/community/components/button/button.tsx deleted file mode 100644 index ce8572f8a..000000000 --- a/libs/react-components/src/community/components/button/button.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import React, { forwardRef } from 'react'; - -import { PolymorphicRef } from '../../helpers/polymorphic/types'; -import { IntentionalAny } from '../../types'; -import ButtonContent, { ButtonContentProps } from '../button-content/button-content'; - -export type ButtonType = 'primary' | 'secondary' | 'tertiary' | 'link'; -export type ButtonColor = 'default' | 'important' | 'positive' | 'inverted' | 'text-color'; - -export interface IInternalButtonProps { - /** - * Button type - * @default button - */ - type?: 'submit' | 'button' | 'reset'; - /** - * Skips forms browser validation - * @default true when type="submit" - */ - formNoValidate?: boolean; -} - -type AllowedTags = 'button'; - -export type ButtonProps<C extends React.ElementType = 'button'> = ButtonContentProps< - C, - IInternalButtonProps, - AllowedTags ->; - -export type ButtonComponent = <C extends React.ElementType = 'button'>( - props: ButtonProps<C> -) => React.ReactElement | null; - -const InternalButton = forwardRef( - <C extends React.ElementType = 'button'>(props: ButtonProps<C>, ref?: PolymorphicRef<C>) => { - const { - children, - as, - type, - formNoValidate, - visualType, - color, - size, - icon, - iconLeft, - iconRight, - underline, - isHovered, - isActive, - noStyle, - ...rest - } = props; - const ComponentAs = as || 'button'; - - return ( - <ButtonContent - data-name="button" - {...(rest as IntentionalAny)} - type={type || 'button'} - formNoValidate={formNoValidate ?? type === 'submit' ? true : undefined} - ref={ref} - as={ComponentAs} - visualType={visualType} - color={color} - size={size} - icon={icon} - iconLeft={iconLeft} - iconRight={iconRight} - underline={underline} - isHovered={isHovered} - isActive={isActive} - noStyle={noStyle} - > - {children} - </ButtonContent> - ); - } -); - -InternalButton.displayName = 'Button'; - -/** - * Renders a `<button>` tag and has all of its props plus our own defined props. For more info about usage of buttons see [Button](/docs/documentation-buttons-buttons--buttons) & [ButtonGroups](/docs/documentation-buttons-buttongroups--buttongroups) documentation. - */ -// TODO: Remove ts-ignore -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -export const Button: ButtonComponent = InternalButton; - -export default Button; diff --git a/libs/react-components/src/community/components/card/card-content/card-content.tsx b/libs/react-components/src/community/components/card/card-content/card-content.tsx deleted file mode 100644 index acfc56532..000000000 --- a/libs/react-components/src/community/components/card/card-content/card-content.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { BreakpointSupport, getBackgroundColorClass, useBreakpointProps } from '../../../helpers'; -import { TColorsBackground } from '../../commonTypes'; -import styles from '../card.module.scss'; -import { CardContext } from '../card-context'; -import { getPaddingCssVariables } from '../utility'; - -export type CardContentPaddingNumber = 0 | 0.5 | 0.75 | 1 | 1.5 | 2 | 2.5 | 3; -export type CardContentPadding = - | CardContentPaddingNumber - | { vertical: CardContentPaddingNumber; horizontal: CardContentPaddingNumber } - | { - top: CardContentPaddingNumber; - right: CardContentPaddingNumber; - bottom: CardContentPaddingNumber; - left: CardContentPaddingNumber; - }; - -interface CardContentBreakpointProps { - /** - * Additional class. - */ - className?: string; - /** - * Card content padding - * Values can be:<br /> - * - predefined number value in rems<br /> - * - object of separated horizontal and vertical number values in rems - * - object of separated top, right, bottom, left number values in rems - * @default Padding of Card - */ - padding?: CardContentPadding; - /** - * Background color of card content - * @default Background of Card - */ - background?: TColorsBackground; -} - -export interface CardContentProps extends BreakpointSupport<CardContentBreakpointProps> { - /** - * Card Content - */ - children?: React.ReactNode; -} - -export const CardContent = (props: CardContentProps): JSX.Element => { - const { padding: rootPadding, background: rootBackground } = React.useContext(CardContext); - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - - const { children, className, padding, background, ...rest } = getCurrentBreakpointProps<CardContentProps>(props, { - padding: rootPadding, - background: rootBackground, - }); - - const CardContentBEM = cn(styles['card__content'], { [getBackgroundColorClass(background)]: background }, className); - - return ( - <div - data-name="card-content" - data-padding={typeof padding === 'number' ? `${padding}rem` : undefined} - style={getPaddingCssVariables(padding)} - {...rest} - className={CardContentBEM} - > - {children} - </div> - ); -}; - -CardContent.displayName = 'CardContent'; - -export default CardContent; diff --git a/libs/react-components/src/community/components/card/card-context.ts b/libs/react-components/src/community/components/card/card-context.ts deleted file mode 100644 index 5760d16e9..000000000 --- a/libs/react-components/src/community/components/card/card-context.ts +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -import type { CardContentProps } from './card-content/card-content'; - -type CardContext = Pick<CardContentProps, 'padding' | 'background'>; - -export const CardContext = React.createContext<CardContext>({}); diff --git a/libs/react-components/src/community/components/card/card-header/card-header.tsx b/libs/react-components/src/community/components/card/card-header/card-header.tsx deleted file mode 100644 index 9471facad..000000000 --- a/libs/react-components/src/community/components/card/card-header/card-header.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { BreakpointSupport, useBreakpointProps } from '../../../helpers'; -import { TColorsBackground } from '../../commonTypes'; -import styles from '../card.module.scss'; -import { CardContentProps } from '../card-content/card-content'; -import { CardContext } from '../card-context'; -import { getPaddingCssVariables } from '../utility'; - -/** - * @deprecated use CardHeaderBackground - */ -export type CardHeaderVariant = - | 'default' - | Extract<TColorsBackground, 'primary-main' | 'primary-active' | 'white' | 'bg-muted'>; // bg-muted, primary-main and primary-active are mainly used inside AccordionItemHeader -export type CardHeaderBackground = CardHeaderVariant; - -type CardHeaderBreakpointProps = { - /** - * Additional class. - */ - className?: string; - /** - * Variant of CardHeader. - * @deprecated use background - */ - variant?: CardHeaderVariant; - /** - * Background color of card header. - * Primary-main and primary-active are mainly used inside AccordionItemHeader. - * @default default - */ - background?: CardHeaderBackground; -} & Pick<CardContentProps, 'padding'>; - -export type CardHeaderProps = BreakpointSupport<CardHeaderBreakpointProps> & { - /** - * Card header content - */ - children?: React.ReactNode; -} & ({ role?: never } | CardHeaderAsButton); - -/** - * Allows the CardHeader to be used as a button. For example in the AccordionItemHeader. - */ -export interface CardHeaderAsButton extends Partial<React.ButtonHTMLAttributes<HTMLButtonElement>> { - role: 'button'; -} - -export const CardHeader = (props: CardHeaderProps): JSX.Element => { - const { variant, ...restOfProps } = props; - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - const { padding: rootPadding } = React.useContext(CardContext); - const { children, className, background, padding, ...rest } = getCurrentBreakpointProps<CardHeaderProps>( - restOfProps, - { - background: variant ?? 'default', // map deprecated variant prop to background. TODO remove when variant prop is removed - padding: rootPadding, - } - ); - const BEM = cn(styles['card__header'], styles[`card__header--${background}`], className); - - return ( - <div data-name="card-header" style={getPaddingCssVariables(padding)} {...rest} className={BEM}> - {children} - </div> - ); -}; - -CardHeader.displayName = 'CardHeader'; - -export default CardHeader; diff --git a/libs/react-components/src/community/components/card/card-notification/card-notification.module.scss b/libs/react-components/src/community/components/card/card-notification/card-notification.module.scss deleted file mode 100644 index c9da4059e..000000000 --- a/libs/react-components/src/community/components/card/card-notification/card-notification.module.scss +++ /dev/null @@ -1,21 +0,0 @@ -.card__notification-content { - z-index: 1; - padding: 0; // force the content padding to be 0 because we use the padding of the notification component - - [data-name='card-header'] + & { - margin-top: -1px; - } - - &:last-child { - margin-bottom: -1px; - } -} - -.card__notification { - padding: var(--card-content-padding-top, 1rem) var(--card-content-padding-right, 1rem) - var(--card-content-padding-bottom, 1rem) var(--card-content-padding-left, 1rem); // inherit the padding from the card component - - border-right: none; - border-left: none; - border-radius: 0; -} diff --git a/libs/react-components/src/community/components/card/card-notification/card-notification.tsx b/libs/react-components/src/community/components/card/card-notification/card-notification.tsx deleted file mode 100644 index d704060ac..000000000 --- a/libs/react-components/src/community/components/card/card-notification/card-notification.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import cn from 'classnames'; - -import Alert, { AlertProps } from '../../../../tedi/components/notifications/alert/alert'; -import CardContent, { CardContentProps } from '../card-content/card-content'; -import style from './card-notification.module.scss'; - -export type CardNotificationProps = AlertProps & Pick<CardContentProps, 'padding'>; - -export const CardNotification = (props: CardNotificationProps): JSX.Element => { - const { children, padding, className, ...rest } = props; - - const BEM = cn(style['card__notification'], className); - - return ( - <CardContent data-name="card-notification" padding={padding} className={style['card__notification-content']}> - <Alert className={BEM} {...rest}> - {children} - </Alert> - </CardContent> - ); -}; - -export default CardNotification; diff --git a/libs/react-components/src/community/components/card/card.module.scss b/libs/react-components/src/community/components/card/card.module.scss deleted file mode 100644 index bb6c7b726..000000000 --- a/libs/react-components/src/community/components/card/card.module.scss +++ /dev/null @@ -1,146 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.card { - position: relative; - display: flex; - flex-direction: column; - border: 1px solid var(--card-border-color); - border-radius: var(--border-radius-default); -} - -.card--borderless { - border: none; -} - -.card--no-border-radius-top { - border-top-left-radius: 0; - - > .card__content:first-of-type, - > .card__content:last-child { - border-top-left-radius: 0; - } -} - -.card--no-border-radius-right { - border-top-right-radius: 0; - - > .card__content:first-of-type, - > .card__content:last-child { - border-top-right-radius: 0; - } -} - -.card--no-border-radius-bottom { - border-bottom-right-radius: 0; - - > .card__content:first-of-type, - > .card__content:last-child { - border-bottom-right-radius: 0; - } -} - -.card--no-border-radius-left { - border-bottom-left-radius: 0; - - > .card__content:first-of-type, - > .card__content:last-child { - border-bottom-left-radius: 0; - } -} - -.card--border-left { - border-top: none; - border-right: none; - border-bottom: none; - border-left: 4px solid; - border-start-start-radius: 0; - border-end-start-radius: 0; -} - -.card--border-top { - border-top: 4px solid; - border-right: none; - border-bottom: none; - border-left: none; - border-start-start-radius: 0; - border-start-end-radius: 0; -} - -.card--border-left, -.card--border-top { - border-color: var(--card-border-color, var(--color-border-default)); - - @media print { - border-color: var(--color-border-contrast); - } -} - -.card__content { - flex: 1 1 1px; - padding: var(--card-content-padding-top, 1rem) var(--card-content-padding-right, 1rem) - var(--card-content-padding-bottom, 1rem) var(--card-content-padding-left, 1rem); -} - -.card__header--default { - color: var(--color-text-inverted); - background: var(--color-gradient-main); -} - -.card__header--primary-main { - color: var(--color-text-inverted); - background: var(--color-primary-main); -} - -.card__header--primary-active { - color: var(--color-text-inverted); - background: var(--color-primary-active); -} - -.card__header--white { - color: var(--color-text-muted); - background: var(--color-bg-default); - border-bottom: 1px solid var(--color-border-default); -} - -.card__header--bg-muted { - color: var(--color-text-muted); - background: var(--color-bg-muted); - border-bottom: 1px solid var(--color-border-default); -} - -.card__header { - z-index: 1; - padding: var(--card-content-padding-top, 1rem) var(--card-content-padding-right, 1rem) - var(--card-content-padding-bottom, 1rem) var(--card-content-padding-left, 1rem); - - @media print { - color: var(--color-text-default); - background: var(--color-bg-default); - border-bottom: 1px solid var(--color-border-default); - } -} - -.card__header:first-of-type, -.card__content:first-of-type { - border-start-start-radius: var(--border-radius-default); - border-start-end-radius: var(--border-radius-default); - - .card--border-top & { - border-start-start-radius: 0; - border-start-end-radius: 0; - } -} - -.card__header:last-child, -.card__content:last-child { - border-end-start-radius: var(--border-radius-default); - border-end-end-radius: var(--border-radius-default); -} - -.card__header, -.card__content { - .card--border-left & { - border-start-start-radius: 0; - border-end-start-radius: 0; - } -} diff --git a/libs/react-components/src/community/components/card/card.stories.tsx b/libs/react-components/src/community/components/card/card.stories.tsx deleted file mode 100644 index 79779b9ca..000000000 --- a/libs/react-components/src/community/components/card/card.stories.tsx +++ /dev/null @@ -1,383 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import Separator from '../../../tedi/components/misc/separator/separator'; -import { StretchContent } from '../../../tedi/components/misc/stretch-content/stretch-content'; -import { CardsExample } from '../../../tedi/components/misc/stretch-content/stretch-content.stories'; -import Collapse from '../collapse/collapse'; -import Icon from '../icon/icon'; -import Heading from '../typography/heading/heading'; -import { Card, CardProps } from './card'; -import CardContent, { CardContentPadding, CardContentProps } from './card-content/card-content'; -import CardHeader, { CardHeaderProps } from './card-header/card-header'; -import CardNotification, { CardNotificationProps } from './card-notification/card-notification'; - -export default { - title: 'Community/Card', - component: Card, - subcomponents: { CardContent, CardHeader, CardNotification }, - parameters: { - status: { - type: ['deprecated', 'ExistsInTediReady'], - }, - }, -} as Meta; - -export interface CardStory { - card: CardProps; - cardContent: CardContentProps | boolean; - cardHeader: CardHeaderProps | boolean; - cardNotification: CardNotificationProps | boolean; - cardContent2?: CardContentProps | boolean; - splitContent?: boolean; -} - -type Story = StoryObj<CardStory>; - -const Template: StoryFn<CardStory> = (args) => { - const getSplitContent = () => ( - <CardContent padding={0}> - <Row gutter={0}> - <Col> - <Card borderless={true}> - <CardContent> - <p>Left</p> - <p> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. In convallis mollis augue, vitae aliquet elit - congue a. Donec vitae sagittis odio, et maximus nulla. Quisque metus augue, euismod non auctor sed, - consequat in ligula. Pellentesque consectetur, justo in luctus sagittis, metus justo ultricies leo, et - mollis enim ipsum id erat. Pellentesque congue ante metus, ut tempor tortor lobortis non. Proin in - ligula sed ante accumsan viverra. Ut et tempor neque. - </p> - </CardContent> - </Card> - </Col> - <Col> - <StretchContent> - <Card borderless={true}> - <CardContent background="bg-muted">right</CardContent> - </Card> - </StretchContent> - </Col> - </Row> - </CardContent> - ); - - const getDefaultContent = (cardContent: CardContentProps) => ( - <CardContent {...cardContent}> - <p>Card content</p> - </CardContent> - ); - - const getNotification = (notification: CardNotificationProps) => ( - <CardNotification {...notification}> - <p>Card notification</p> - </CardNotification> - ); - - const getContent2 = (content: CardContentProps) => <CardContent {...content} />; - - const getCardHeader = (header: CardHeaderProps) => ( - <CardHeader {...header}> - <Row justifyContent="between" alignItems="center"> - <Col width="auto"> - <Heading modifiers="h3">Teated ja suunatud menetlused</Heading> - </Col> - <Col width="auto"> - <p>Otsing</p> - </Col> - </Row> - </CardHeader> - ); - - return ( - <Card {...args.card}> - {args.cardHeader && getCardHeader(typeof args.cardHeader === 'boolean' ? {} : args.cardHeader)} - {args.cardNotification && - getNotification(typeof args.cardNotification === 'boolean' ? {} : args.cardNotification)} - {args.splitContent - ? getSplitContent() - : args.cardContent === false - ? null - : getDefaultContent(typeof args.cardContent === 'boolean' ? {} : args.cardContent)} - {args.cardContent2 && getContent2(typeof args.cardContent2 === 'boolean' ? {} : args.cardContent2)} - </Card> - ); -}; - -export const Default: Story = { - render: Template, - args: {}, -}; - -/** - * Default header background is a primary gradient - */ -export const DefaultHeader: Story = { - render: Template, - args: { - cardHeader: { - background: 'default', - }, - }, -}; - -export const WhiteHeader: Story = { - render: Template, - - args: { - ...Default.args, - cardHeader: { - background: 'white', - }, - }, -}; - -export const MultipleContent: Story = { - render: Template, - - args: { - ...Default.args, - cardContent: { - background: 'bg-muted', - }, - cardContent2: { - children: <p>Card content 2</p>, - }, - cardHeader: false, - }, -}; - -export const SplitCardBody: Story = { - render: Template, - - args: { - ...Default.args, - splitContent: true, - }, -}; - -export const Borderless: Story = { - render: Template, - - args: { - ...Default.args, - card: { - borderless: true, - }, - cardHeader: false, - }, -}; - -/** - * With borderRadius prop u can turn off every corner separately or all together. By default, all corners are rounded. - */ -export const WithoutBorderRadius: Story = { - render: Template, - - args: { - ...Default.args, - card: { - borderRadius: false, - }, - }, -}; - -/** - * Card support different borders and can be colored with: Brand, Border & Functional colors. - */ -export const BorderColor: Story = { - render: Template, - - args: { - ...Default.args, - card: { - border: 'primary-main', - }, - cardHeader: false, - }, -}; - -/** - * Card also support top and left borders, which are 4px wide and can be colored with: Brand, Border & Functional colors. - */ -export const BorderLeftImportantActive: Story = { - render: Template, - - args: { - ...Default.args, - card: { - border: 'left-important-active', - }, - cardHeader: false, - }, -}; - -export const BorderTopPrimaryHighlight: Story = { - render: Template, - - args: { - ...Default.args, - card: { - border: 'top-primary-highlight', - }, - cardHeader: false, - }, -}; - -const TemplatePadding: StoryFn<CardStory> = (args) => { - const paddingArray: CardContentPadding[] = [ - 0, - 0.5, - 0.75, - 1, - 1.5, - { vertical: 1, horizontal: 1.5 }, - { top: 1, right: 1.5, bottom: 1.5, left: 0 }, - ]; - - const getCardHeader = (header: CardHeaderProps) => ( - <CardHeader {...header}> - <Heading modifiers="h3">{header.children || 'Teated ja suunatud menetlused'}</Heading> - </CardHeader> - ); - - return ( - <VerticalSpacing size={0.5}> - {paddingArray.map((padding, index) => ( - <Card {...args.card} padding={padding} key={index}> - {args.cardHeader && getCardHeader(typeof args.cardHeader === 'boolean' ? {} : args.cardHeader)} - - <CardContent {...(typeof args.cardContent === 'boolean' ? {} : args.cardContent)}> - <p>Card padding: {typeof padding === 'number' ? `${padding}rem` : JSON.stringify(padding)}</p> - </CardContent> - </Card> - ))} - <Card {...args.card} padding={1.5}> - {getCardHeader({ children: 'CardHeader padding: 1.5rem' })} - - <CardContent {...(typeof args.cardContent === 'boolean' ? {} : args.cardContent)} padding={0.75}> - <VerticalSpacing> - <p>CardContent padding: 0.75rem</p> - <p>Card padding is overridden by cardContent padding</p> - </VerticalSpacing> - </CardContent> - </Card> - </VerticalSpacing> - ); -}; - -/** - * Card padding can be set with the `padding` prop. The value can be: <br /> - * - predefined number value in rems <br /> - * - object of separated `horizontal, vertical` number values in rems <br /> - * - object of separated `top, right, bottom, left` number values in rems <br /> - * The padding can be set for the whole card or for the card header and card content separately. If the padding is set for the whole card, it is overridden by the padding set for the card header and card content separately. <br/> - */ -export const Padding: Story = { - render: TemplatePadding, - - args: { - ...Default.args, - cardHeader: true, - }, -}; - -export const BreakpointProps: Story = { - render: Template, - args: { - card: { - background: 'positive-main', - }, - cardContent: { - className: 'test123', - background: undefined, // parameter falls back to card background - padding: 0, - md: { - background: 'primary-highlight', - padding: 1, - }, - lg: { - background: undefined, // parameter falls back to lower breakpoint - padding: 1.5, - }, - xxl: { - background: 'primary-highlight-subtle', - padding: 1.5, - }, - }, - }, -}; - -export const EqualHeight = { - ...CardsExample, -}; - -/** - * When a card does not have a proper content it is possible to use `CardNotification` instead of rendering a `Notification` inside the `CardContent` - */ -export const WithNotification: Story = { - render: Template, - args: { - card: { - padding: 0.75, - }, - cardHeader: { - background: 'white', - }, - cardNotification: true, - }, -}; - -const Timeline: StoryFn<CardProps> = (args) => ( - <Card {...args}> - <CardContent> - <Row> - <Col width={3}> - <p>Card content</p> - </Col> - <Col width="auto"> - <Separator axis="vertical" color="accent" variant="dotted-small" isStretched /> - </Col> - <Col> - <p>Card content</p> - </Col> - </Row> - </CardContent> - </Card> -); - -export const TimelineCard: StoryObj<CardProps> = { - render: Timeline, - args: {}, -}; - -const TwoToned: StoryFn<CardProps> = () => ( - <Row gutter={0}> - <Col width="auto"> - <StretchContent> - <Card borderRadius={{ right: false, bottom: false }}> - <CardContent background="bg-muted"> - <Icon name="straighten" className="text-disabled"></Icon> - </CardContent> - </Card> - </StretchContent> - </Col> - <Col width="auto"> - <Card borderRadius={{ left: false, top: false }}> - <CardContent> - <p className="text-bold">Some statistic: x kg</p> - <Collapse id="collapse-1234567" openText="Näita rohkem" closeText="Näita vähem"> - <p>Some description</p> - </Collapse> - </CardContent> - </Card> - </Col> - </Row> -); - -export const TwoTonedCard: StoryObj<CardProps> = { - render: TwoToned, - args: {}, -}; diff --git a/libs/react-components/src/community/components/card/card.tsx b/libs/react-components/src/community/components/card/card.tsx deleted file mode 100644 index 2e731097c..000000000 --- a/libs/react-components/src/community/components/card/card.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import cn from 'classnames'; -import React, { forwardRef } from 'react'; - -import { BreakpointSupport, useBreakpointProps } from '../../helpers'; -import { TColorsBorder } from '../commonTypes'; -import styles from './card.module.scss'; -import { CardContentProps } from './card-content/card-content'; -import { CardContext } from './card-context'; -import { CardHeaderProps } from './card-header/card-header'; -import { getCardBorderPlacementColor } from './utility'; - -export type CardBorderPlacement = 'top' | 'left'; -export type CardBorderType = 'default' | `${CardBorderPlacement}-${TColorsBorder}` | TColorsBorder; - -type CardBreakpointProps = { - /** - * Additional class. - */ - className?: string; - /** - * Follows the order in border-radius CSS property - * Top-left / Top-right / Bottom-right / Bottom-left - */ - borderRadius?: false | { top?: boolean; right?: boolean; bottom?: boolean; left?: boolean }; - /** - * Remove border from card - */ - borderless?: boolean; - /** - * Type of border - * @default border-default - */ - border?: CardBorderType; -} & Pick<CardContentProps, 'padding' | 'background'>; - -export interface CardProps extends BreakpointSupport<CardBreakpointProps> { - /** - * CardHeader and/or CardContent. - */ - children?: - | React.ReactElement<CardContentProps | CardHeaderProps> - | React.ReactElement<CardContentProps | CardHeaderProps>[] - | React.ReactNode; -} - -export const Card = forwardRef<HTMLDivElement, CardProps>((props, ref): JSX.Element => { - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - const { - children, - className, - padding, - background = 'bg-default', - borderRadius, - borderless, - border = 'border-default', - ...rest - } = getCurrentBreakpointProps<CardProps>(props, { - padding: 1, - }); - - const [borderPlacement, borderColor] = getCardBorderPlacementColor(border); - - const BEM = cn(styles['card'], className, { - [styles[`card--border-${borderPlacement}`]]: borderPlacement, - [styles['card--borderless']]: borderless, - [styles['card--no-border-radius-top']]: borderRadius === false || borderRadius?.top === false, - [styles['card--no-border-radius-right']]: borderRadius === false || borderRadius?.right === false, - [styles['card--no-border-radius-bottom']]: borderRadius === false || borderRadius?.bottom === false, - [styles['card--no-border-radius-left']]: borderRadius === false || borderRadius?.left === false, - }); - - return ( - <CardContext.Provider value={{ padding, background }}> - <div - data-name="card" - {...rest} - className={BEM} - ref={ref} - style={borderColor ? { '--card-border-color': `var(--color-${borderColor})` } : undefined} - > - {children} - </div> - </CardContext.Provider> - ); -}); - -Card.displayName = 'Card'; - -export default Card; diff --git a/libs/react-components/src/community/components/card/index.ts b/libs/react-components/src/community/components/card/index.ts deleted file mode 100644 index a4faeeecf..000000000 --- a/libs/react-components/src/community/components/card/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './card'; -export * from './card-header/card-header'; -export * from './card-notification/card-notification'; -export * from './card-content/card-content'; diff --git a/libs/react-components/src/community/components/card/utility.ts b/libs/react-components/src/community/components/card/utility.ts deleted file mode 100644 index d4917da37..000000000 --- a/libs/react-components/src/community/components/card/utility.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { TColorsBorder } from '../commonTypes'; -import { CardBorderPlacement, CardProps } from './card'; -import { CardContentPaddingNumber, CardContentProps } from './card-content/card-content'; - -export type CardBorderTypeArray = [CardBorderPlacement, TColorsBorder]; - -// Returns Array of [borderPlacement, borderColor]; -export const getCardBorderPlacementColor = (border?: CardProps['border']): CardBorderTypeArray | [] => { - const borderColor = border?.replace(/(top-)|(left-)/s, '') as TColorsBorder; - const borderPlacement = border?.replace(new RegExp(`(${borderColor})|-`, 'g'), '') as CardBorderPlacement; - - return [borderPlacement, borderColor]; -}; - -export const getPaddingCssVariables = (padding: CardContentProps['padding']) => { - const isDirectionObject = ( - padding: CardContentProps['padding'] - ): padding is { vertical: CardContentPaddingNumber; horizontal: CardContentPaddingNumber } => { - return typeof padding === 'object' && 'vertical' in padding && 'horizontal' in padding; - }; - - const topPadding = - typeof padding === 'number' ? padding : isDirectionObject(padding) ? padding.vertical : padding?.top; - const rightPadding = - typeof padding === 'number' ? padding : isDirectionObject(padding) ? padding.horizontal : padding?.right; - const bottomPadding = - typeof padding === 'number' ? padding : isDirectionObject(padding) ? padding.vertical : padding?.bottom; - const leftPadding = - typeof padding === 'number' ? padding : isDirectionObject(padding) ? padding.horizontal : padding?.left; - - return { - '--card-content-padding-top': `${topPadding}rem`, - '--card-content-padding-right': `${rightPadding}rem`, - '--card-content-padding-bottom': `${bottomPadding}rem`, - '--card-content-padding-left': `${leftPadding}rem`, - }; -}; diff --git a/libs/react-components/src/community/components/collapse/collapse.module.scss b/libs/react-components/src/community/components/collapse/collapse.module.scss deleted file mode 100644 index ffc109258..000000000 --- a/libs/react-components/src/community/components/collapse/collapse.module.scss +++ /dev/null @@ -1,22 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.collapse__title { - width: 100%; - text-align: left; - cursor: pointer; - - @include mixins.button-reset; -} - -.collapse__icon { - color: var(--color-primary-main); - transition: transform 0.3s ease-in-out; - - .collapse--is-open > .collapse__title & { - transform: rotate(180deg); - } -} - -.collapse__content { - margin-top: 0.5rem; -} diff --git a/libs/react-components/src/community/components/collapse/collapse.spec.tsx b/libs/react-components/src/community/components/collapse/collapse.spec.tsx deleted file mode 100644 index e11903663..000000000 --- a/libs/react-components/src/community/components/collapse/collapse.spec.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { fireEvent, render, screen } from '@testing-library/react'; - -import Heading from '../typography/heading/heading'; -import Collapse, { CollapseProps } from './collapse'; - -const getComponent = (props?: Partial<CollapseProps>) => - render( - <Collapse - id="collapse-1" - title={<Heading>heading</Heading>} - openText="Näita rohkem" - closeText="Näita vähem" - {...props} - > - Collapse content - </Collapse> - ); - -describe('Collapse', () => { - it('should render successfully', () => { - const { baseElement } = getComponent(); - expect(baseElement).toBeTruthy(); - }); - - it('adds className to collapse', () => { - const { baseElement } = getComponent({ className: 'test-class' }); - const collapse = baseElement.getElementsByClassName('test-class'); - expect(baseElement.getElementsByClassName('test-class')).toHaveLength(1); - expect(collapse[0].classList.contains('collapse')).toBe(true); - }); - - it('should be collapsed by default', () => { - const { getByTestId } = getComponent(); - const content = getByTestId('collapse-inner'); - expect(content).toHaveAttribute('aria-hidden', 'true'); - }); - - it('should open when button clicked', () => { - const { getByTestId } = getComponent(); - const content = getByTestId('collapse-inner'); - fireEvent.click(screen.getByRole('button', { name: /Heading/i })); - expect(content).toHaveAttribute('aria-hidden', 'false'); - }); -}); diff --git a/libs/react-components/src/community/components/collapse/collapse.stories.tsx b/libs/react-components/src/community/components/collapse/collapse.stories.tsx deleted file mode 100644 index cd5d81313..000000000 --- a/libs/react-components/src/community/components/collapse/collapse.stories.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import { Meta, StoryFn } from '@storybook/react'; -import React from 'react'; - -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import Heading from '../typography/heading/heading'; -import Text from '../typography/text/text'; -import Collapse, { CollapseProps } from './collapse'; - -export default { - title: 'Community/Collapse', - component: Collapse, - argTypes: { - children: { - control: { - type: 'text', - defaultValue: '-', - }, - table: { - type: { summary: '-' }, - }, - }, - title: { - control: { - type: 'text', - defaultValue: '-', - }, - table: { - type: { summary: '-' }, - }, - }, - }, - parameters: { - status: { - type: ['deprecated', 'ExistsInTediReady'], - }, - }, -} as Meta; - -const Template: StoryFn<CollapseProps> = (args) => <Collapse {...args} />; - -export const Default = { - render: Template, - args: { - id: 'collapse-1', - openText: 'Näita rohkem', - closeText: 'Näita vähem', - title: ( - <Heading element="h5" color="muted"> - Juhtumi üldandmed - </Heading> - ), - children: ( - <VerticalSpacing> - <div> - <Text color="muted">Laste osalus</Text> - <p>peretüli lapse osaluseta</p> - </div> - <div> - <Text color="muted">Juhtumi liigid</Text> - <p>peretüli (lapsega)</p> - </div> - <div> - <Text color="muted">Kannatanu seos vägivaldsega</Text> - <p>tütar</p> - </div> - </VerticalSpacing> - ), - }, -}; - -export const WithHiddenCollapseText = { - render: Template, - args: { - ...Default.args, - hideCollapseText: true, - }, -}; - -export const NoTitleStart = { - args: { - ...Default.args, - title: undefined, - titleRowProps: { - justifyContent: 'start', - }, - }, -}; - -export const TitleRowReversed = { - args: { - ...Default.args, - titleRowProps: { - direction: 'row-reverse', - }, - }, -}; diff --git a/libs/react-components/src/community/components/collapse/collapse.tsx b/libs/react-components/src/community/components/collapse/collapse.tsx deleted file mode 100644 index 360135285..000000000 --- a/libs/react-components/src/community/components/collapse/collapse.tsx +++ /dev/null @@ -1,146 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; -import AnimateHeight from 'react-animate-height'; - -import { Col, Row, RowProps } from '../../../tedi/components/layout/grid'; -import Print from '../../../tedi/components/misc/print/print'; -import { usePrint } from '../../../tedi/helpers'; -import { useLabels } from '../../../tedi/providers/label-provider'; -import Icon from '../icon/icon'; -import { Text } from '../typography/text/text'; -import styles from './collapse.module.scss'; - -export interface CollapseProps { - /** - * ID of the collapse - */ - id: string; - /** - * Any content. - */ - children: React.ReactNode; - /** - * Should Collapse be initially shown. Won't work with open and onToggle. - * @default false - */ - defaultOpen?: boolean; - /** - * Should the Collapsed be open or closed. - * Use to handle state outside of component, should use with onToggle prop. - */ - open?: boolean; - /** - * Callback when Collapsed is toggled. - * Use to handle state outside of component, should use with open prop. - */ - onToggle?: (open: boolean) => void; - /** - * Any content to be rendered as the title of the Collapse. - */ - title?: JSX.Element; - /** - * Name on the button to open the item. - * @default getLabel('open') - */ - openText?: string; - /** - * Name on the button to close the item. - * @default getLabel('close') - */ - closeText?: string; - /** - * Should collapse open/close toggle button render text - * @default false - */ - hideCollapseText?: boolean; - /** - * Custom class name. - */ - className?: string; - /** - * Props for title row. - */ - titleRowProps?: RowProps; -} - -export const Collapse = (props: CollapseProps): JSX.Element => { - const { getLabel } = useLabels(); - const { - id, - children, - className, - openText = getLabel('open'), - closeText = getLabel('close'), - hideCollapseText = false, - title, - titleRowProps, - defaultOpen, - open, - onToggle, - ...rest - } = props; - const [isOpenState, setIsOpen] = React.useState(defaultOpen); - const isPrint = usePrint(); - const isOpen = isPrint || (open !== undefined ? open : isOpenState); - const BEM = cn(styles['collapse'], className, { [styles['collapse--is-open']]: isOpen }); - - const onClick = () => { - setIsOpen((prev) => !prev); - onToggle?.(!isOpen); - }; - - const onKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => { - if ((e.code === 'Enter' || e.code === 'Space') && !e.repeat) { - e.preventDefault(); - onClick(); - } - }; - - const renderContent = <div className={styles['collapse__content']}>{children}</div>; - - return ( - <div data-name="collapse" {...rest} className={BEM}> - <button - type="button" - data-name="collapse-trigger" - className={styles['collapse__title']} - aria-expanded={isOpen} - aria-controls={id} - onKeyDown={onKeyDown} - onClick={onClick} - > - <Row justifyContent="between" alignItems="center" wrap="nowrap" {...titleRowProps} element="span"> - {title && <Col>{title}</Col>} - <Col width="auto"> - <Row element="span" alignItems="center" gutter={1}> - <Print visibility="hide"> - <Col - width="auto" - className={cn({ - 'visually-hidden': hideCollapseText, - })} - > - <Text element="span" color="primary"> - {isOpen ? closeText : openText} - </Text> - </Col> - </Print> - <Col width="auto"> - <Icon className={styles['collapse__icon']} name="expand_more" /> - </Col> - </Row> - </Col> - </Row> - </button> - {isPrint ? ( - renderContent - ) : ( - <AnimateHeight duration={300} id={id} height={isOpen ? 'auto' : 0} data-testid="collapse-inner"> - {renderContent} - </AnimateHeight> - )} - </div> - ); -}; - -export default Collapse; diff --git a/libs/react-components/src/community/components/commonTypes.tsx b/libs/react-components/src/community/components/commonTypes.tsx deleted file mode 100644 index 30dd520f2..000000000 --- a/libs/react-components/src/community/components/commonTypes.tsx +++ /dev/null @@ -1,39 +0,0 @@ -export type ColorsPrimary = - | 'primary-main' - | 'primary-active' - | 'primary-active-subtle' - | 'primary-highlight' - | 'primary-highlight-subtle'; -export type ColorsAccent = 'accent-main' | 'accent-highlight'; -export type ColorsForeground = 'text-default' | 'text-muted' | 'text-subtle' | 'text-disabled' | 'text-inverted'; -export type ColorsBackground = - | 'bg-default' - | 'bg-muted' - | 'bg-subtle' - | 'bg-disabled' - | 'bg-inverted' - | 'bg-inverted-contrast'; -export type ColorsShades = 'black' | 'white'; -export type ColorsBorder = 'border-default' | 'border-contrast'; -export type ColorsFunctional = - | 'positive-main' - | 'positive-active' - | 'positive-highlight' - | 'important-main' - | 'important-active' - | 'important-highlight' - | 'info-main' - | 'info-active' - | 'info-highlight' - | 'warning-main' - | 'warning-highlight'; - -// Types with prefix T are meant to be all colors that can be used as background or border. -export type TColorsBackground = - | ColorsPrimary - | ColorsAccent - | ColorsBackground - | ColorsShades - | ColorsFunctional - | 'transparent'; -export type TColorsBorder = ColorsPrimary | ColorsAccent | ColorsBorder | ColorsFunctional; diff --git a/libs/react-components/src/community/components/dropdown/dropdown.module.scss b/libs/react-components/src/community/components/dropdown/dropdown.module.scss deleted file mode 100644 index 5789b4ff4..000000000 --- a/libs/react-components/src/community/components/dropdown/dropdown.module.scss +++ /dev/null @@ -1,39 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.dropdown { - z-index: var(--z-index-dropdown); - display: flex; - flex-direction: column; - background: var(--color-white); - border: 1px solid var(--color-border-default); - border-radius: 4px; -} - -.dropdown__item { - @include mixins.button-reset; - - padding: 0.5rem 0.75rem; - color: var(--color-text-default); - text-align: left; - border-radius: 0; - - &--active { - color: var(--color-primary-active); - background-color: var(--color-primary-highlight); - } - - &--disabled { - color: var(--color-text-disabled); - background-color: var(--color-bg-disabled); - } - - &:hover, - &:focus-visible { - &:not(.dropdown__item--disabled) { - color: var(--color-primary-active); - cursor: pointer; - background-color: var(--color-primary-highlight-subtle); - outline: 0; - } - } -} diff --git a/libs/react-components/src/community/components/dropdown/dropdown.stories.tsx b/libs/react-components/src/community/components/dropdown/dropdown.stories.tsx deleted file mode 100644 index aeaa016c5..000000000 --- a/libs/react-components/src/community/components/dropdown/dropdown.stories.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import { Dropdown, DropdownItem, DropdownProps } from './dropdown'; - -export default { - component: Dropdown, - title: 'Community/Dropdown', -} as Meta; - -const items: DropdownItem[] = [ - { children: 'Lisa pöördumine', onClick: () => console.log('Lisa pöördumine') }, - { children: 'Lisa toetus', onClick: () => console.log('Lisa toetus') }, - { children: 'Lisa teenus', onClick: () => console.log('Lisa teenus'), isDisabled: true }, -]; - -const itemsActive: DropdownItem[] = [ - { children: 'EST', onClick: () => console.log('EST') }, - { children: 'ENG', onClick: () => console.log('ENG'), isActive: true }, - { children: 'RUS', onClick: () => console.log('RUS') }, -]; - -type Story = StoryObj<DropdownProps>; - -export const Default: Story = { - args: { - button: { - visualType: 'secondary', - size: 'small', - icon: 'add', - children: 'Add more', - }, - items, - }, -}; - -export const WithActiveItem: Story = { - args: { - button: { - visualType: 'link', - iconRight: 'expand_more', - children: 'Choose language', - }, - items: itemsActive, - }, -}; diff --git a/libs/react-components/src/community/components/dropdown/dropdown.tsx b/libs/react-components/src/community/components/dropdown/dropdown.tsx deleted file mode 100644 index ccf4837d1..000000000 --- a/libs/react-components/src/community/components/dropdown/dropdown.tsx +++ /dev/null @@ -1,185 +0,0 @@ -import { - autoUpdate, - flip, - FloatingFocusManager, - FloatingPortal, - shift, - useClick, - useDismiss, - useFloating, - useFloatingNodeId, - useInteractions, - useListNavigation, - useRole, -} from '@floating-ui/react'; -import cn from 'classnames'; -import React from 'react'; - -import { useLabels } from '../../../tedi/providers/label-provider'; -import { Button, ButtonProps } from '../button/button'; -import styles from './dropdown.module.scss'; - -export type DropdownItem = { - /** - * Content of the item - */ - children: React.ReactNode; - /** - * Callback when item is clicked - */ - onClick?: (e: React.MouseEvent | React.KeyboardEvent) => void; - /** - * Is item active - */ - isActive?: boolean; - /** - * Is item disabled - */ - isDisabled?: boolean; -}; - -export type DropdownProps = { - /** - * Dropdown items - */ - items: DropdownItem[]; - /** - * Dropdown trigger props - */ - button: ButtonProps; - /** - * Callback when one of the items is clicked - */ - onItemClick?: (item: DropdownItem, index: number, e: React.MouseEvent | React.KeyboardEvent) => void; - /** - * Close menu when item is clicked. - * @default true - */ - closeMenuOnClick?: boolean; - /** - * Props passed to FloatingFocusManager - */ - focusManager?: Omit<React.ComponentProps<typeof FloatingFocusManager>, 'context' | 'children'>; -}; - -export const Dropdown = (props: DropdownProps) => { - const { getLabel } = useLabels(); - const { button, items, onItemClick, closeMenuOnClick = true, ...rest } = props; - const { initialFocus = -1, modal = false, ...restFocusManager } = props.focusManager ?? {}; - const { visuallyHiddenDismiss = modal ? getLabel('close') : false } = restFocusManager ?? {}; - const nodeId = useFloatingNodeId(); - const listItemsRef = React.useRef<Array<HTMLAnchorElement | null>>([]); - const [isOpen, setIsOpen] = React.useState(false); - const [activeIndex, setActiveIndex] = React.useState<number | null>(null); - - const { x, y, strategy, refs, placement, context } = useFloating({ - placement: 'bottom-start', - nodeId, - open: isOpen, - onOpenChange: setIsOpen, - middleware: [flip(), shift()], - whileElementsMounted: autoUpdate, - }); - - const firstSelectedItemIndex = (items as DropdownItem[]).findIndex((i) => i.isActive); - - const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions([ - useClick(context), - useListNavigation(context, { - listRef: listItemsRef, - activeIndex, - selectedIndex: firstSelectedItemIndex, - onNavigate: setActiveIndex, - loop: true, - }), - useRole(context, { role: 'listbox' }), - useDismiss(context), - ]); - - const renderDropdown = (): JSX.Element | null => { - const content = ( - <FloatingFocusManager - context={context} - initialFocus={initialFocus} - visuallyHiddenDismiss={visuallyHiddenDismiss} - modal={modal} - {...restFocusManager} - > - <div - {...getFloatingProps({ - ref: refs.setFloating, - style: { - position: strategy, - left: x ?? 0, - top: y ?? 0, - }, - className: styles['dropdown'], - onKeyDown(event) { - if (event.key === 'Tab') { - setIsOpen(false); - } - }, - })} - data-placement={placement} - > - {items.map((item, key) => renderDropdownItem(item, key))} - </div> - </FloatingFocusManager> - ); - - return isOpen ? content : null; - }; - - const DropdownItemBEM = (item: DropdownItem) => - cn(styles['dropdown__item'], { - [styles['dropdown__item--active']]: item.isActive, - [styles['dropdown__item--disabled']]: item.isDisabled, - }); - - const onClick = (item: DropdownItem, index: number, e: React.MouseEvent | React.KeyboardEvent) => { - onItemClick?.(item, index, e); - item?.onClick?.(e); - - closeMenuOnClick && setIsOpen(false); - }; - - const renderDropdownItem = (item: DropdownItem, key: number): JSX.Element => ( - <button - key={key} - {...getItemProps({ - disabled: item.isDisabled, - tabIndex: activeIndex === key ? 0 : -1, - role: 'option', - className: DropdownItemBEM(item), - onClick: (e) => onClick(item, key, e), - onKeyDown(event) { - if (event.key === 'Enter') { - onClick(item, key, event); - } - }, - ref(node: HTMLAnchorElement) { - listItemsRef.current[key] = node; - }, - })} - > - {item.children} - </button> - ); - - return ( - <> - <Button - data-name="dropdown" - {...rest} - {...button} - {...getReferenceProps({ - ref: refs.setReference, - tabIndex: 0, - })} - /> - <FloatingPortal>{renderDropdown()}</FloatingPortal> - </> - ); -}; - -export default Dropdown; diff --git a/libs/react-components/src/community/components/ellipsis/ellipsis.module.scss b/libs/react-components/src/community/components/ellipsis/ellipsis.module.scss deleted file mode 100644 index 46669667c..000000000 --- a/libs/react-components/src/community/components/ellipsis/ellipsis.module.scss +++ /dev/null @@ -1,13 +0,0 @@ -.ellipsis { - // -webkit-box is required for ellipsis currently, even though autoprefixer suggests flex in its place - display: -webkit-box; /* stylelint-disable-line */ - overflow: hidden; - text-overflow: ellipsis; - -webkit-line-clamp: 2; - line-clamp: 2; - -webkit-box-orient: vertical; -} - -.ellipsis__tooltip { - max-width: 200px; -} diff --git a/libs/react-components/src/community/components/ellipsis/ellipsis.stories.tsx b/libs/react-components/src/community/components/ellipsis/ellipsis.stories.tsx deleted file mode 100644 index b813d0d1b..000000000 --- a/libs/react-components/src/community/components/ellipsis/ellipsis.stories.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Tooltip, TooltipProvider, TooltipTrigger } from '../tooltip'; -import Ellipsis, { EllipsisProps } from './ellipsis'; - -export default { - title: 'Community/Ellipsis', - component: Ellipsis, - parameters: { - status: { - type: ['deprecated', 'ExistsInTediReady'], - }, - }, -} as Meta; - -type Story = StoryObj<typeof Ellipsis>; - -const Template: StoryFn<EllipsisProps> = (args) => ( - <div style={{ maxWidth: 200 }}> - <Ellipsis {...args} /> - </div> -); - -export const Default: Story = { - render: Template, - - args: { - children: ( - <span> - Any inline <b>content (even bold)</b>, that is too long for the wrapper - <span className="text-small"> and dont fit in x number of rows</span> - </span> - ), - }, -}; - -/** - * Resize the window to see that the ellipsis and tooltip appear only when content doesn't fit - */ -export const ResponsiveExample: Story = { - args: { - lineClamp: 1, - children: ( - <span> - Any inline <b>content (even bold)</b>, that is too long for the wrapper - <span className="text-small"> and dont fit in x number of rows</span> - </span> - ), - }, -}; - -/** - * Example when tooltip is shown even when text doesn't Ellipse. - * Use this when you want to show tooltip always or with custom content - */ -export const ResponsiveWithCustomTooltip: Story = { - args: { - lineClamp: 1, - showTooltip: false, - children: ( - <TooltipProvider> - <TooltipTrigger> - <span> - Any inline <b>content (even bold)</b>, that is too long for the wrapper - <span className="text-small"> and dont fit in x number of rows</span> - </span> - </TooltipTrigger> - <Tooltip>Custom tooltip content, shown also when text doesn't Ellipse</Tooltip> - </TooltipProvider> - ), - }, -}; diff --git a/libs/react-components/src/community/components/ellipsis/ellipsis.tsx b/libs/react-components/src/community/components/ellipsis/ellipsis.tsx deleted file mode 100644 index 958083bb0..000000000 --- a/libs/react-components/src/community/components/ellipsis/ellipsis.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React from 'react'; - -import { useElementSize } from '../../../tedi/helpers/hooks/use-element-size'; -import { Card, CardContent } from '../card'; -import { Tooltip, TooltipProvider, TooltipTrigger } from '../tooltip'; -import styles from './ellipsis.module.scss'; - -export interface EllipsisProps { - /** - * Any content - */ - children: React.ReactNode; - /** - * What is max lines before Ellipsis - * @default 2 - */ - lineClamp?: number; - /** - * Render Ellipsis with Tooltip - * @default true - */ - showTooltip?: boolean; -} - -export const Ellipsis = (props: EllipsisProps): JSX.Element => { - const { children, lineClamp = 2, showTooltip = true, ...rest } = props; - const elementRef = React.useRef<HTMLDivElement>(null); - const [renderTooltip, setRenderTooltip] = React.useState(false); - const elementSize = useElementSize(elementRef); - - React.useEffect(() => { - if (elementRef.current) { - setRenderTooltip(elementRef.current.scrollHeight > elementRef.current.clientHeight); - } - }, [elementRef, elementSize]); - - const ellipsis = ( - <div - data-name="ellipsis" - {...rest} - ref={elementRef} - className={styles['ellipsis']} - style={{ lineClamp, WebkitLineClamp: lineClamp }} - > - {children} - </div> - ); - - return renderTooltip && showTooltip ? ( - <TooltipProvider> - <TooltipTrigger>{ellipsis}</TooltipTrigger> - <Tooltip> - <Card borderless={true} className={styles['ellipsis__tooltip']}> - <CardContent padding={0.75}>{children}</CardContent> - </Card> - </Tooltip> - </TooltipProvider> - ) : ( - ellipsis - ); -}; - -export default Ellipsis; diff --git a/libs/react-components/src/community/components/feedback/feedback.module.scss b/libs/react-components/src/community/components/feedback/feedback.module.scss deleted file mode 100644 index 17c630959..000000000 --- a/libs/react-components/src/community/components/feedback/feedback.module.scss +++ /dev/null @@ -1,34 +0,0 @@ -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -@mixin feedback() { - position: fixed; - top: 0; - right: 0; - bottom: 0; - z-index: var(--z-index-feedback); - display: flex; - align-items: center; - pointer-events: none; - - .feedback__trigger { - pointer-events: auto; - border-bottom: none; - border-radius: var(--border-radius-default) var(--border-radius-default) 0 0; - transform: translateX(50%) rotate(-90deg); - transform-origin: center bottom; - } -} - -.feedback--both, -.feedback--desktop { - @include breakpoints.media-breakpoint-up(lg) { - @include feedback; - } -} - -.feedback--both, -.feedback--mobile { - @include breakpoints.media-breakpoint-down(lg) { - @include feedback; - } -} diff --git a/libs/react-components/src/community/components/feedback/feedback.stories.tsx b/libs/react-components/src/community/components/feedback/feedback.stories.tsx deleted file mode 100644 index 25efcd5b1..000000000 --- a/libs/react-components/src/community/components/feedback/feedback.stories.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import { Meta, StoryFn } from '@storybook/react'; - -import { Section } from '../../../tedi/components/content/section/section'; -import { TextArea } from '../../../tedi/components/form/textarea/textarea'; -import TextField from '../../../tedi/components/form/textfield/textfield'; -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import Button from '../button/button'; -import { CardContent, CardHeader } from '../card'; -import { Default as LayoutDefault } from '../layout/layout/layout.stories'; -import Heading from '../typography/heading/heading'; -import Feedback, { FeedbackProps } from './feedback'; - -/** - * Feedback component contains everything to render a modal, including the trigger button.<br/> - * It adds some default props to the trigger and modal and renders the button on the right side for desktop and inline for mobile.<br/> - * Feedback component should be rendered after the main content to have the correct focus order. - */ -export default { - title: 'Community/Feedback', - component: Feedback, - parameters: { - docs: { - story: { - inline: false, - iframeHeight: 700, - }, - }, - }, -} as Meta; - -const Template: StoryFn<FeedbackProps> = (args) => { - const lorem = - 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium alias asperiores aspernatur blanditiis cupiditate ea eum explicabo fugiat, id ipsam laudantium molestiae nemo, quae sed similique ut velit veniam, voluptas? Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium alias asperiores aspernatur blanditiis cupiditate ea eum explicabo fugiat, id ipsam laudantium molestiae nemo, quae sed similique ut velit veniam, voluptas?'; - - return ( - <VerticalSpacing> - {Array.from({ length: 10 }, (a, index) => ( - <p key={index}>{lorem}</p> - ))} - <Feedback {...args}> - <CardHeader background="white"> - <Heading modifiers="h4">Feedback</Heading> - </CardHeader> - <CardContent> - <VerticalSpacing> - <p> - Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto consequatur culpa, deleniti fugit id - labore perspiciatis quaerat quas quibusdam recusandae? Aperiam cupiditate doloremque facilis molestiae - molestias nihil tempore temporibus voluptatibus! Lorem ipsum dolor sit amet, consectetur adipisicing elit. - Architecto consequatur culpa, deleniti fugit id labore perspiciatis quaerat quas quibusdam recusandae? - </p> - <TextField - id="subject" - label="Subject" - helper={{ - text: '0/200', - }} - /> - <TextArea - id="content" - label="Content" - helper={{ - text: '0/4000', - }} - /> - <Row justifyContent="end"> - <Col width="auto"> - <Button>Send feedback</Button> - </Col> - </Row> - </VerticalSpacing> - </CardContent> - </Feedback> - </VerticalSpacing> - ); -}; - -export const Default = { - render: Template, - args: { - triggerProps: { - children: 'Feedback', - }, - }, -}; - -export const InLayout = { - parameters: { - layout: 'fullscreen', - }, - render: LayoutDefault.render, - args: { - ...LayoutDefault.args, - children: ( - <Section> - <Template triggerProps={{ children: 'Feedback' }}>content</Template> - </Section> - ), - }, -}; diff --git a/libs/react-components/src/community/components/feedback/feedback.tsx b/libs/react-components/src/community/components/feedback/feedback.tsx deleted file mode 100644 index a41588482..000000000 --- a/libs/react-components/src/community/components/feedback/feedback.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import Button, { ButtonProps } from '../button/button'; -import { Modal, ModalProps, ModalProviderProps } from '../modal'; -import ModalProvider from '../modal/modal-provider'; -import ModalTrigger from '../modal/modal-trigger'; -import styles from './feedback.module.scss'; - -export interface FeedbackProps extends Pick<ModalProps, 'children'> { - /** - * Props that get passed to the trigger button - */ - triggerProps?: ButtonProps; - /** - * ModalProvider props - */ - providerProps?: Omit<ModalProviderProps, 'children'>; - /** - * Modal props - */ - modalProps?: Omit<ModalProps, 'children'>; - /** - * Fix trigger on the right side of the screen. - * @default desktop - */ - fixedTrigger?: 'both' | 'desktop' | 'mobile'; - /** - * Additional class - */ - className?: string; -} - -export const Feedback = ({ - children, - triggerProps, - providerProps, - modalProps, - fixedTrigger = 'desktop', - className, - ...rest -}: FeedbackProps): JSX.Element => { - const { - iconLeft = { name: 'star', filled: true }, - size, - id: feedbackId = 'feedback-trigger', - className: triggerClassName, - children: triggerChildren, - ...restTrigger - } = triggerProps ?? {}; - const { ...restProvider } = providerProps ?? {}; - const { position = 'right', 'aria-labelledby': labelledBy = feedbackId, ...restModal } = modalProps ?? {}; - - return ( - <div className={cn(className, styles[`feedback--${fixedTrigger}`])} {...rest}> - <ModalProvider {...restProvider}> - <ModalTrigger> - <Button - data-name="feedback-trigger" - {...restTrigger} - id={feedbackId} - className={cn(styles['feedback__trigger'], triggerClassName)} - size={size} - iconLeft={iconLeft} - > - {triggerChildren} - </Button> - </ModalTrigger> - <Modal data-name="feedback-modal" {...restModal} aria-labelledby={labelledBy} position={position}> - {children} - </Modal> - </ModalProvider> - </div> - ); -}; - -export default Feedback; diff --git a/libs/react-components/src/community/components/form/check/check.module.scss b/libs/react-components/src/community/components/form/check/check.module.scss deleted file mode 100644 index d46ff92e6..000000000 --- a/libs/react-components/src/community/components/form/check/check.module.scss +++ /dev/null @@ -1,76 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.check { - position: relative; - display: inline; - - @include mixins.print-grayscale; - - &:hover:not(.check--disabled) { - cursor: pointer; - } -} - -.check__input { - @include mixins.visually-hidden; -} - -.check__indicator { - position: relative; - display: block; - min-width: 1.125rem; - height: 1.125rem; - margin-top: 0.125rem; - margin-right: 0.625rem; - background-color: var(--color-bg-default); - border: 1px solid var(--color-border-contrast); - border-radius: 2px; - transition: 150ms ease; - transition-property: background-color, border-color; - - .check__input:not(:disabled) + &--hover, - .check__input:hover:not(:disabled) + &, - .check__input:not(:disabled) + &:hover, - .check__input:focus:not(:disabled) + & { - cursor: pointer; - border-color: var(--color-primary-main); - outline: var(--color-primary-main) solid 1px; - } - - .check__input:focus-visible:not(:disabled) + & { - border-color: var(--color-primary-main); - outline: var(--color-primary-main) solid 2px; - outline-offset: 2px; - } - - [type='checkbox']:checked + &, - &--indeterminate { - background: var(--color-primary-main); - border-color: var(--color-primary-main); - } - - .check__input:disabled + & { - background-color: var(--color-bg-disabled); - } -} - -.check__icon { - position: absolute; - color: var(--color-text-inverted); - opacity: 0; - transition: opacity 150ms ease; - - [type='checkbox']:checked + .check__indicator &--check, - .check__indicator--indeterminate &--indeterminate { - opacity: 1; - } -} - -.check__tooltip-icon { - margin-left: 0.25rem; -} - -.check__extra-content { - padding-top: 0.125rem; - padding-left: 1.75rem; -} diff --git a/libs/react-components/src/community/components/form/check/check.stories.tsx b/libs/react-components/src/community/components/form/check/check.stories.tsx deleted file mode 100644 index a402d4e3e..000000000 --- a/libs/react-components/src/community/components/form/check/check.stories.tsx +++ /dev/null @@ -1,171 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import React from 'react'; - -import { Col, Row } from '../../../../tedi/components/layout/grid'; -import Text from '../../typography/text/text'; -import Check, { CheckProps } from './check'; - -/** - * Most of the time you should use `ChoiceGroup` component. But we also export a single `Check` component for custom use cases. - */ -const meta: Meta<typeof Check> = { - component: Check, - title: 'Community/Form/Check', - parameters: { - status: { - type: ['deprecated', 'ExistsInTediReady'], - }, - }, -}; - -export default meta; -type Story = StoryObj<typeof Check>; - -const Template: StoryFn<CheckProps> = (args) => <Check {...args} label="Select me" value="default" />; - -export const Default: Story = { - render: Template, - - args: { - id: 'default-check', - name: 'default-check', - defaultChecked: true, - label: <b>Select me</b>, - }, -}; - -export const HiddenLabel: Story = { - render: Template, - - args: { - id: 'hidden-label-check', - name: 'hidden-label-check', - hideLabel: true, - }, -}; - -export const DisabledState: Story = { - render: Template, - - args: { - id: 'disabled-check', - name: 'disabled-check', - disabled: true, - }, -}; - -export const Indeterminate = () => { - const [checked, setChecked] = React.useState<boolean>(false); - const [indeterminate, setIndeterminate] = React.useState<boolean>(true); - - return ( - <Check - id="controlled-check" - label="Select me" - name="controlled-check" - value="controlled" - checked={checked} - indeterminate={indeterminate} - onChange={(value, checked) => { - setIndeterminate(false); - setChecked(checked); - }} - /> - ); -}; - -export const WithExtraContent: Story = { - render: Template, - - args: { - id: 'extra-content-check', - name: 'extra-content-check', - extraContent: ( - <Text color="muted" element="span"> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis scelerisque quis augue sit amet semper. Donec - porttitor mauris neque, quis feugiat erat malesuada ac. Cras vel mauris a est pretium egestas. - </Text> - ), - }, -}; - -export const HoverState: Story = { - render: Template, - - args: { - id: 'hover-check', - name: 'hover-check', - hover: true, - }, -}; - -export const WithTooltip: Story = { - render: Template, - - args: { - id: 'tooltip-check', - name: 'tooltip-check', - tooltip: 'This is a tooltip', - }, -}; - -export const WithTooltipAndExtraContent: Story = { - render: Template, - - args: { - id: 'tooltip-extra-content-check', - name: 'tooltip-extra-content-check', - extraContent: ( - <Text color="muted" element="span"> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis scelerisque quis augue sit amet semper. Donec - porttitor mauris neque, quis feugiat erat malesuada ac. Cras vel mauris a est pretium egestas. - </Text> - ), - tooltip: 'This is a tooltip', - }, -}; - -export const WithTooltipAndLongTitleAndExtraContent: Story = { - args: { - id: 'tooltip-long-title-extra-content-check', - name: 'tooltip-long-title-extra-content-check', - label: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. word word word word word', - extraContent: ( - <Text color="muted" element="span"> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis scelerisque quis augue sit amet semper. Donec - porttitor mauris neque, quis feugiat erat malesuada ac. Cras vel mauris a est pretium egestas. - </Text> - ), - tooltip: 'This is a tooltip', - }, -}; - -export const Controlled = () => { - const [checked, setChecked] = React.useState<boolean>(true); - - return ( - <Check - id="controlled-check" - label="Select me" - name="controlled-check" - value="controlled" - checked={checked} - onChange={(value, checked) => setChecked(checked)} - /> - ); -}; - -export const CheckWithLongTitle = () => { - return ( - <Row> - <Col width={6}> - <Check - id="check-long-title" - label="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin varius, sem blandit sodales tincidunt, orci elit ornare ex, eu ultrices diam turpis id nisl. Sed sollicitudin auctor nunc. Aliquam a arcu in sem bibendum laoreet non eu nunc." - name="check-long-title" - value="check" - /> - </Col> - </Row> - ); -}; diff --git a/libs/react-components/src/community/components/form/check/check.tsx b/libs/react-components/src/community/components/form/check/check.tsx deleted file mode 100644 index 441d95f17..000000000 --- a/libs/react-components/src/community/components/form/check/check.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Icon } from '../../../../tedi/components/base/icon/icon'; -import { Col, Row } from '../../../../tedi/components/layout/grid'; -import { Tooltip, TooltipProvider, TooltipTrigger } from '../../tooltip'; -import { ChoiceInputProps } from '../choice-input.types'; -import styles from './check.module.scss'; - -export interface CheckProps extends ChoiceInputProps { - /** - * If the check is in indeterminate state. (Not checked or unchecked) - * When this is true then the checked prop is ignored - */ - indeterminate?: boolean; -} - -export const Check = (props: CheckProps): JSX.Element => { - const { - id, - label, - value, - className, - disabled = false, - onChange, - hideLabel = false, - extraContent, - checked, - defaultChecked, - indeterminate, - hover, - name, - tooltip, - ...rest - } = props; - const [innerChecked, setInnerChecked] = React.useState<boolean>(defaultChecked || false); - const labelRef = React.useRef<HTMLLabelElement>(null); - - const getChecked = React.useMemo((): boolean | 'mixed' => { - return indeterminate ? 'mixed' : onChange && typeof checked !== 'undefined' ? checked : innerChecked; - }, [indeterminate, onChange, checked, innerChecked]); - - const onChangeHandler = (event: React.ChangeEvent<HTMLInputElement>): void => { - if (typeof checked === 'undefined') { - setInnerChecked(event?.target.checked); - } - onChange?.(value, event?.target.checked); - }; - - const LabelBEM = cn(styles['check'], { [styles['check--disabled']]: disabled }); - - return ( - <div data-name="check" className={className} {...rest}> - <Row gutter={0}> - <Col width="auto"> - <input - id={id} - value={value} - name={name} - type="checkbox" - disabled={disabled} - checked={getChecked !== 'mixed' ? getChecked : false} - aria-checked={getChecked} - onChange={onChangeHandler} - className={styles['check__input']} - /> - <div - aria-hidden="true" - onClick={() => labelRef.current?.click()} // Click on the indicator itself should still toggle state - className={cn(styles['check__indicator'], { - [styles['check__indicator--hover']]: hover, - [styles['check__indicator--indeterminate']]: indeterminate, - })} - > - <Icon size={16} name="remove" className={cn(styles['check__icon'], styles['check__icon--indeterminate'])} /> - <Icon size={16} name="check" className={cn(styles['check__icon'], styles['check__icon--check'])} /> - </div> - </Col> - <Col> - <label ref={labelRef} className={LabelBEM} htmlFor={id}> - <span className={cn({ 'visually-hidden': hideLabel })}>{label}</span> - {tooltip && ( - <TooltipProvider> - <TooltipTrigger> - <Icon - name="info" - color="brand" - size={16} - display="inline" - className={styles['check__tooltip-icon']} - /> - </TooltipTrigger> - <Tooltip>{tooltip}</Tooltip> - </TooltipProvider> - )} - </label> - </Col> - </Row> - {extraContent && <div className={styles['check__extra-content']}>{extraContent}</div>} - </div> - ); -}; - -export default Check; diff --git a/libs/react-components/src/community/components/form/choice-group/choice-group-context.ts b/libs/react-components/src/community/components/form/choice-group/choice-group-context.ts deleted file mode 100644 index 7cba177ff..000000000 --- a/libs/react-components/src/community/components/form/choice-group/choice-group-context.ts +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; - -import { TChoiceGroupType, TChoiceGroupValue } from './choice-group'; - -export interface IChoiceGroupContext { - name: string; - inputType: TChoiceGroupType; - currentValue: TChoiceGroupValue; - onChange: (value: string, checked: boolean) => void; -} - -export const ChoiceGroupContext = React.createContext<IChoiceGroupContext>({ - name: '', - inputType: 'radio', - onChange: () => null, - currentValue: [], -}); diff --git a/libs/react-components/src/community/components/form/choice-group/choice-group.module.scss b/libs/react-components/src/community/components/form/choice-group/choice-group.module.scss deleted file mode 100644 index 57295428d..000000000 --- a/libs/react-components/src/community/components/form/choice-group/choice-group.module.scss +++ /dev/null @@ -1,14 +0,0 @@ -.choice-group { - position: relative; - padding: 0; - margin: 0; - border: none; -} - -.choice-group__inner--indented { - padding-left: 1rem; -} - -.choice-group__item--extra-padding { - padding-bottom: 0.5rem; -} diff --git a/libs/react-components/src/community/components/form/choice-group/choice-group.stories.tsx b/libs/react-components/src/community/components/form/choice-group/choice-group.stories.tsx deleted file mode 100644 index ace5d384e..000000000 --- a/libs/react-components/src/community/components/form/choice-group/choice-group.stories.tsx +++ /dev/null @@ -1,304 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import { ColProps } from '../../../../tedi/components/layout/grid/col'; -import Text from '../../typography/text/text'; -import ChoiceGroup from './choice-group'; -import { ChoiceGroupItemProps } from './choice-group.types'; - -/** - * ChoiceGroup is created to handle state of input with role radio or checkbox.<br/> - * It also has a possibility to show/hide FormLabel of `fieldset` and show FormHelper to whole `fieldset`.<br/> - * Possible visual variations are: Check/Radio/Filter/Selector. - */ -const meta: Meta<typeof ChoiceGroup> = { - component: ChoiceGroup, - title: 'Community/Form/ChoiceGroup', -}; - -export default meta; -type Story = StoryObj<typeof ChoiceGroup>; - -interface GenerateItemsArgs { - extraContent?: boolean; - colProps?: ColProps; - extraLongTitle?: boolean; - colored?: true; - tooltip?: boolean; -} - -const generateItems = ( - index: number, - { extraContent, colProps, extraLongTitle, colored, tooltip }: GenerateItemsArgs = {} -): ChoiceGroupItemProps[] => [ - { - id: `value-${index * 3}`, - label: 'Option 1', - value: `value-${index * 3}`, - colProps, - background: colored && 'positive-main', - tooltip: tooltip ? 'Tooltip' : undefined, - }, - { - id: `value-${index * 3 + 1}`, - label: `Option 2, that is longer than the others${ - extraLongTitle - ? ' - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin varius, sem blandit sodales tincidunt, orci elit ornare ex, eu ultrices diam turpis id nisl. Sed sollicitudin auctor nunc. Aliquam a arcu in sem bibendum laoreet non eu nunc.' - : '' - }`, - value: `value-${index * 3 + 1}`, - extraContent: extraContent ? ( - <Text color="muted" element="span"> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis scelerisque quis augue sit amet semper. Donec - porttitor mauris neque, quis feugiat erat malesuada ac. Cras vel mauris a est pretium egestas. - </Text> - ) : undefined, - colProps, - background: colored && 'warning-main', - tooltip: tooltip ? 'Tooltip' : undefined, - }, - { - id: `value-${index * 3 + 2}`, - label: 'Option 3', - value: `value-${index * 3 + 2}`, - disabled: !colored, - colProps, - background: colored && 'important-main', - tooltip: tooltip ? 'Tooltip' : undefined, - }, -]; - -export const Radio: Story = { - args: { - label: 'ChoiceGroup with radios:', - id: 'example-1', - defaultValue: [], - inputType: 'radio', - name: 'radio-1', - items: generateItems(0), - onChange: (value) => console.log({ value }), - }, -}; - -export const RadioRow: Story = { - args: { - label: 'ChoiceGroup with radios:', - id: 'example-1.1', - defaultValue: [], - inputType: 'radio', - name: 'radio-1.1', - items: generateItems(1), - direction: 'row', - onChange: (value) => console.log({ value }), - }, -}; - -export const Check: Story = { - args: { - label: 'ChoiceGroup with checkboxes:', - id: 'example-2', - defaultValue: [], - inputType: 'checkbox', - name: 'check-2', - items: generateItems(2), - }, -}; - -export const CheckRow: Story = { - args: { - label: 'ChoiceGroup with direction row:', - id: 'example-2.1', - defaultValue: [], - inputType: 'checkbox', - name: 'check-2.1', - items: generateItems(3), - direction: 'row', - }, -}; - -export const FilterItem: Story = { - args: { - label: 'Choose your filter:', - id: 'example-3', - defaultValue: [], - inputType: 'radio', - name: 'radio-3', - type: 'filter', - items: generateItems(4), - }, -}; - -export const FilterItemColumn: Story = { - args: { - label: 'Choose your filter:', - id: 'example-3.5', - defaultValue: [], - inputType: 'radio', - name: 'radio-3.5', - type: 'filter', - items: generateItems(5), - direction: 'column', - }, -}; - -export const SelectorItem: Story = { - args: { - label: 'Select your item:', - id: 'example-4', - defaultValue: [], - inputType: 'checkbox', - name: 'check-4', - type: 'selector', - items: generateItems(6), - }, -}; - -export const SelectorItemColumn: Story = { - args: { - label: 'Select your item:', - id: 'example-4.5', - defaultValue: [], - inputType: 'checkbox', - name: 'check-4.5', - type: 'selector', - items: generateItems(7), - direction: 'column', - }, -}; - -export const LightItem: Story = { - args: { - label: 'Choose your item:', - id: 'example-5', - defaultValue: [], - inputType: 'radio', - name: 'radio-5', - type: 'light', - items: generateItems(8), - }, -}; - -export const LightItemAutoWidth: Story = { - args: { - label: 'Choose your item:', - id: 'example-5.1', - defaultValue: [], - inputType: 'radio', - name: 'radio-5.1', - type: 'light', - items: generateItems(9, { colProps: { width: 'auto' } }), - }, -}; - -export const LightItemColumn: Story = { - args: { - label: 'Choose your item:', - id: 'example-5.2', - defaultValue: [], - inputType: 'radio', - name: 'radio-5.2', - type: 'light', - items: generateItems(10), - direction: 'column', - }, -}; - -export const WithHiddenLabel: Story = { - args: { - ...Check.args, - label: 'Im hidden:', - hideLabel: true, - items: generateItems(11), - }, -}; - -export const WithError: Story = { - args: { - ...Check.args, - label: 'I have error:', - items: generateItems(12), - helper: { - text: 'Oh no an error!', - type: 'error', - id: 'test', - }, - }, -}; - -export const WithDefaultValue: Story = { - args: { - ...Check.args, - label: 'I have second item selected by default:', - items: generateItems(13), - defaultValue: ['value-40'], - }, -}; - -export const WithIndeterminate: Story = { - args: { - ...Check.args, - label: 'I have an indeterminate checkbox:', - items: generateItems(14), - indeterminateCheck: (state) => (state === 'all' ? 'Unselect all' : 'Select all'), - }, -}; - -/** - * ExtraContent prop can only be used with check and radio inputType. - */ -export const WithExtraContent: Story = { - args: { - ...Check.args, - inputType: 'radio', - label: 'I have extra content after label:', - items: generateItems(15, { extraContent: true }), - }, -}; - -export const CheckboxWithLongTitle: Story = { - args: { - ...Check.args, - inputType: 'checkbox', - label: 'I have extra long titles:', - items: generateItems(16, { extraLongTitle: true }), - }, -}; - -export const CheckboxWithTooltip: Story = { - args: { - ...Check.args, - inputType: 'checkbox', - label: 'I have extra long titles:', - items: generateItems(17, { tooltip: true }), - }, -}; - -export const RadioWithLongTitle: Story = { - args: { - ...Check.args, - inputType: 'radio', - label: 'I have extra long titles:', - items: generateItems(18, { extraLongTitle: true }), - }, -}; - -export const FilterItemWithColors: Story = { - args: { - label: 'Choose your filter:', - id: 'filter-colored', - inputType: 'radio', - name: 'filter-colored', - type: 'filter', - items: generateItems(19, { colored: true }), - }, -}; - -export const RadioWithTooltip: Story = { - args: { - label: 'ChoiceGroup with radio buttons that have tooltips:', - id: 'radio-tooltip', - defaultValue: [], - inputType: 'radio', - name: 'radio-tooltip', - items: generateItems(20, { tooltip: true }), - }, -}; diff --git a/libs/react-components/src/community/components/form/choice-group/choice-group.tsx b/libs/react-components/src/community/components/form/choice-group/choice-group.tsx deleted file mode 100644 index d8c6336e4..000000000 --- a/libs/react-components/src/community/components/form/choice-group/choice-group.tsx +++ /dev/null @@ -1,284 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { FeedbackText, FeedbackTextProps } from '../../../../tedi/components/form/feedback-text/feedback-text'; -import FormLabel, { FormLabelProps } from '../../../../tedi/components/form/form-label/form-label'; -import { Direction, Gutter, Row, RowProps } from '../../../../tedi/components/layout/grid'; -import { useLabels } from '../../../../tedi/providers/label-provider'; -import Check, { CheckProps } from '../check/check'; -import styles from './choice-group.module.scss'; -import { ChoiceGroupItemProps } from './choice-group.types'; -import { ChoiceGroupContext, IChoiceGroupContext } from './choice-group-context'; -import ChoiceGroupCheck from './components/choice-group-check/choice-group-check'; -import ChoiceGroupRadio from './components/choice-group-radio/choice-group-radio'; -import FilterItem from './components/filter-item/filter-item'; -import LightItem from './components/light-item/light-item'; -import { SelectorItem } from './components/selector-item/selector-item'; - -export type TChoiceGroupValue = string | string[] | null; -export type TChoiceGroupType = 'radio' | 'checkbox'; -export type TChoiceGroupIndeterminateState = 'none' | 'some' | 'all'; - -export interface ChoiceGroupProps extends FormLabelProps { - /** - * ID of choice-group. - */ - id: string; - /** - * Item props array - */ - items: ChoiceGroupItemProps[]; - /** - * Direction for Row containing Items - * @default column for type default / row for anything else - * @deprecated use rowProps - */ - direction?: Direction; - /** - * Row props - */ - rowProps?: RowProps; - /** - * Name property on inputs - */ - name: string; - /** - * Input type - * @default radio - */ - inputType?: TChoiceGroupType; - /** - * Form helper props - */ - helper?: FeedbackTextProps; - /** - * Custom class - */ - className?: string; - /** - * Default value of ChoiceGroup. Won't work with value and onChange. - */ - defaultValue?: TChoiceGroupValue; - /** - * The value of ChoiceGroup. Use to control value outside of component. Should use with onChange prop. - */ - value?: TChoiceGroupValue; - /** - * onChange handler - */ - onChange?: (value: TChoiceGroupValue) => void; - /** - * Type of ChoiceGroup - * @default default - */ - type?: 'light' | 'selector' | 'filter' | 'default'; - /** - * Value can be one of two options:<br /> - * `true` - Uses default internal label.<br /> - * `string` - Label for the indeterminate checkbox.<br /> - * `function` - Function that can be used for conditional label.<br /> - * If omitted then the indeterminate checkbox isn't rendered. - * Only works with `inputType="checkbox"` and `type="default"` - */ - indeterminateCheck?: boolean | string | ((state: TChoiceGroupIndeterminateState) => string); - /** - * Overridable Indeterminate Check props. - * Applies only when `indeterminateCheckLabel` is used - * @default { indented: true } - */ - indeterminateCheckProps?: { indented?: boolean } & Partial< - Omit<CheckProps, 'indeterminate' | 'checked' | 'onChange' | 'defaultChecked' | 'label'> - >; -} - -export const ChoiceGroup = (props: ChoiceGroupProps): React.ReactElement => { - const { getLabel } = useLabels(); - const { - id, - className, - label, - required, - helper, - items, - type = 'default', - direction = type === 'default' ? 'column' : 'row', - rowProps, - name, - inputType = 'radio', - value, - defaultValue, - onChange, - hideLabel, - indeterminateCheck, - indeterminateCheckProps = {}, - ...rest - } = props; - const { indented, ...restIndeterminate } = indeterminateCheckProps; - const isIndented = indeterminateCheckProps?.indented ?? true; - const helperId = helper ? helper?.id ?? `${id}-helper` : undefined; - const showIndeterminate = indeterminateCheck && type === 'default' && inputType === 'checkbox'; - - const [innerValue, setInnerValue] = React.useState<TChoiceGroupValue>(() => { - if (defaultValue) { - return defaultValue; - } else if (inputType === 'checkbox') { - return []; - } else { - return null; - } - }); - - const isValueControlled = (value = props.value): value is TChoiceGroupValue => { - return !!onChange && typeof value !== 'undefined'; - }; - - const currentValue: TChoiceGroupValue = isValueControlled(value) ? value : innerValue; - - const isNoneSelected = React.useMemo(() => currentValue?.length === 0, [currentValue?.length]); - const isAllSelected = React.useMemo( - () => currentValue?.length === items?.filter((item) => !item.disabled)?.length, - [currentValue?.length, items] - ); - const isSomeSelected = React.useMemo(() => !isNoneSelected && !isAllSelected, [isAllSelected, isNoneSelected]); - - const getIndeterminateLabel = React.useMemo(() => { - const state = isAllSelected ? 'all' : isNoneSelected ? 'none' : 'some'; - - return typeof indeterminateCheck === 'string' - ? indeterminateCheck - : typeof indeterminateCheck === 'function' - ? indeterminateCheck(state) - : indeterminateCheck - ? state === 'all' - ? getLabel('table.filter.remove-all') - : getLabel('table.filter.select-all') - : ''; - }, [getLabel, indeterminateCheck, isAllSelected, isNoneSelected]); - - const onChangeHandler = (value: string, checked: boolean): void => { - let nextValue = currentValue; - - if (inputType === 'checkbox' && nextValue) { - if (Array.isArray(nextValue)) { - nextValue = checked ? [...nextValue, value] : nextValue.filter((item) => item !== value); - } else { - // When input="radio" and a selection has been made and then inputType is dynamically changed to 'checkbox', - // then the nextValue needs to be placed back into array to get checkbox functionality back - nextValue = checked ? [nextValue, value] : [nextValue].filter((item) => item !== value); - } - } else { - nextValue = value; - } - - if (!isValueControlled()) { - setInnerValue(Array.isArray(nextValue) ? [...nextValue] : nextValue); - } - - onChange?.(nextValue); - }; - - const ContextValue: IChoiceGroupContext = { - name, - inputType, - onChange: onChangeHandler, - currentValue: currentValue, - }; - - let gutterX: Gutter; - let gutterY: Gutter; - - let ChoiceGroupItemElement: - | typeof ChoiceGroupCheck - | typeof ChoiceGroupRadio - | typeof SelectorItem - | typeof FilterItem - | typeof LightItem = LightItem; - - switch (type) { - case 'default': - gutterX = 2; - gutterY = 1; - ChoiceGroupItemElement = inputType === 'checkbox' ? ChoiceGroupCheck : ChoiceGroupRadio; - break; - case 'selector': - gutterX = 0; - gutterY = 0; - ChoiceGroupItemElement = SelectorItem; - break; - case 'filter': - gutterX = 2; - gutterY = 2; - ChoiceGroupItemElement = FilterItem; - break; - case 'light': - gutterX = 1; - gutterY = 1; - ChoiceGroupItemElement = LightItem; - break; - } - - const FieldSetBEM = cn(styles['choice-group'], className); - const CheckGroupBEM = cn(styles['choice-group__inner'], rowProps?.className, { - [styles['choice-group__inner--indented']]: showIndeterminate && isIndented, - }); - - const onIndeterminateChangeHandler = (value: string, checked: boolean): void => { - const nextValue = !isAllSelected ? items?.filter((item) => !item.disabled)?.map((item) => item.value) : []; - - if (!isValueControlled()) { - setInnerValue([...nextValue]); - } - - onChange?.(nextValue); - }; - - return ( - <ChoiceGroupContext.Provider value={ContextValue}> - <fieldset - data-name="choice-group" - {...rest} - className={FieldSetBEM} - id={id} - name={name} - aria-describedby={helperId} - > - <legend> - <FormLabel id={id} label={label} required={required} hideLabel={hideLabel} renderWithoutLabel={true} /> - </legend> - {items?.length ? ( - <> - {showIndeterminate && ( - <Check - id={`${id}-indeterminate`} - value="indeterminate" - name="indeterminate" - {...restIndeterminate} - label={getIndeterminateLabel} - indeterminate={isSomeSelected} - checked={isAllSelected} - onChange={onIndeterminateChangeHandler} - /> - )} - <Row direction={direction} gutterX={gutterX} gutterY={gutterY} {...rowProps} className={CheckGroupBEM}> - {items.map((item, key) => ( - <ChoiceGroupItemElement - {...item} - className={cn(item.className, { - [styles['choice-group__item--extra-padding']]: item.extraContent && key !== items.length - 1, - })} - direction={direction} - key={item.id} - /> - ))} - </Row> - </> - ) : ( - <p>{getLabel('table.filter.no-options')}</p> - )} - {helper && <FeedbackText {...helper} id={helperId} />} - </fieldset> - </ChoiceGroupContext.Provider> - ); -}; - -export default ChoiceGroup; diff --git a/libs/react-components/src/community/components/form/choice-group/choice-group.types.ts b/libs/react-components/src/community/components/form/choice-group/choice-group.types.ts deleted file mode 100644 index b8fa111e6..000000000 --- a/libs/react-components/src/community/components/form/choice-group/choice-group.types.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ColProps, Direction } from '../../../../tedi/components/layout/grid'; -import { ColorsFunctional } from '../../commonTypes'; -import { ChoiceInputProps } from '../choice-input.types'; - -export type ChoiceGroupItemBackground = Extract<ColorsFunctional, 'positive-main' | 'important-main' | 'warning-main'>; - -export interface ChoiceGroupItemProps extends Omit<ChoiceInputProps, 'name'> { - /** - * Item col element props. Use to set width of item. - */ - colProps?: ColProps; - /** - * Direction - */ - direction?: Direction; - /** - * Possibility to change choice group item background when selected. Will be primary if not provided. - * Can only be used with FilterItem. - */ - background?: ChoiceGroupItemBackground; -} diff --git a/libs/react-components/src/community/components/form/choice-group/components/choice-group-check/choice-group-check.tsx b/libs/react-components/src/community/components/form/choice-group/components/choice-group-check/choice-group-check.tsx deleted file mode 100644 index 5406b2087..000000000 --- a/libs/react-components/src/community/components/form/choice-group/components/choice-group-check/choice-group-check.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; - -import { Col } from '../../../../../../tedi/components/layout/grid'; -import Check from '../../../check/check'; -import { ChoiceGroupItemProps } from '../../choice-group.types'; -import { ChoiceGroupContext } from '../../choice-group-context'; - -export const ChoiceGroupCheck = (props: ChoiceGroupItemProps): React.ReactElement => { - const { - id, - label, - value, - className, - direction = 'column', - disabled, - colProps = direction === 'column' ? { width: 12 } : { width: 'auto', grow: 1 }, - onChange: onChangeItem, - hideLabel, - extraContent, - tooltip, - } = props; - const { currentValue, inputType, name, onChange } = React.useContext(ChoiceGroupContext); - - const isChecked = !currentValue - ? false - : inputType === 'checkbox' - ? value === currentValue || currentValue.indexOf(value) !== -1 - : value === currentValue; - - const onChangeHandler = (value: string, checked: boolean): void => { - onChange?.(value, checked); - onChangeItem?.(value, checked); - }; - - return ( - <Col {...colProps}> - <Check - id={id} - label={label} - value={value} - name={name} - className={className} - disabled={disabled} - checked={isChecked} - onChange={onChangeHandler} - hideLabel={hideLabel} - extraContent={extraContent} - tooltip={tooltip} - /> - </Col> - ); -}; - -export default ChoiceGroupCheck; diff --git a/libs/react-components/src/community/components/form/choice-group/components/choice-group-radio/choice-group-radio.tsx b/libs/react-components/src/community/components/form/choice-group/components/choice-group-radio/choice-group-radio.tsx deleted file mode 100644 index 91deeff82..000000000 --- a/libs/react-components/src/community/components/form/choice-group/components/choice-group-radio/choice-group-radio.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; - -import { Col } from '../../../../../../tedi/components/layout/grid'; -import Radio from '../../../radio/radio'; -import { ChoiceGroupItemProps } from '../../choice-group.types'; -import { ChoiceGroupContext } from '../../choice-group-context'; - -export const ChoiceGroupRadio = (props: ChoiceGroupItemProps): React.ReactElement => { - const { - id, - label, - value, - className, - direction = 'column', - disabled, - colProps = direction === 'column' ? { width: 12 } : { width: 'auto', grow: 1 }, - onChange: onChangeItem, - hideLabel, - extraContent, - tooltip, - } = props; - const { currentValue, inputType, name, onChange } = React.useContext(ChoiceGroupContext); - - const isChecked = !currentValue - ? false - : inputType === 'checkbox' - ? value === currentValue || currentValue.indexOf(value) !== -1 - : value === currentValue; - - const onChangeHandler = (value: string, checked: boolean): void => { - onChange?.(value, checked); - onChangeItem?.(value, checked); - }; - - return ( - <Col {...colProps}> - <Radio - id={id} - label={label} - value={value} - name={name} - className={className} - disabled={disabled} - checked={isChecked} - onChange={onChangeHandler} - hideLabel={hideLabel} - extraContent={extraContent} - tooltip={tooltip} - /> - </Col> - ); -}; - -export default ChoiceGroupRadio; diff --git a/libs/react-components/src/community/components/form/choice-group/components/filter-item/filter-item.module.scss b/libs/react-components/src/community/components/form/choice-group/components/filter-item/filter-item.module.scss deleted file mode 100644 index e22d26b50..000000000 --- a/libs/react-components/src/community/components/form/choice-group/components/filter-item/filter-item.module.scss +++ /dev/null @@ -1,40 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -$backgrounds: ('positive-main', 'important-main', 'warning-main'); - -.filter-item__input { - @include mixins.visually-hidden; -} - -.filter-item__label { - display: flex; - align-items: center; - justify-content: center; - padding: 0.25rem 0.5rem; - font-size: 1rem; - color: var(--color-text-muted); - cursor: pointer; - background: var(--color-bg-subtle); - border-radius: var(--border-radius-default); - - .filter-item__input:focus + & { - @include mixins.focus-element; - } - - .filter-item--disabled & { - color: var(--color-text-disabled); - cursor: unset; - background-color: var(--color-bg-disabled); - } - - .filter-item--checked & { - color: var(--color-text-inverted); - background-color: var(--color-primary-main); - } - - @each $background in $backgrounds { - .filter-item--#{$background}.filter-item--checked & { - background-color: var(--color-#{$background}); - } - } -} diff --git a/libs/react-components/src/community/components/form/choice-group/components/filter-item/filter-item.tsx b/libs/react-components/src/community/components/form/choice-group/components/filter-item/filter-item.tsx deleted file mode 100644 index d707150ef..000000000 --- a/libs/react-components/src/community/components/form/choice-group/components/filter-item/filter-item.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Col } from '../../../../../../tedi/components/layout/grid'; -import { ChoiceGroupItemProps } from '../../choice-group.types'; -import { ChoiceGroupContext } from '../../choice-group-context'; -import styles from './filter-item.module.scss'; - -export const FilterItem = (props: ChoiceGroupItemProps): React.ReactElement => { - const { id, label, value, disabled, colProps, background } = props; - const { currentValue, inputType, name, onChange } = React.useContext(ChoiceGroupContext); - - const isChecked = !currentValue - ? false - : inputType === 'checkbox' - ? value === currentValue || currentValue.indexOf(value) !== -1 - : value === currentValue; - - const ColumnBEM = cn( - styles['filter-item'], - colProps?.className, - { [styles['filter-item--disabled']]: disabled }, - { [styles['filter-item--checked']]: isChecked }, - { [styles[`filter-item--${background}`]]: !!background } - ); - - return ( - <Col {...colProps} className={ColumnBEM}> - <input - id={id} - value={value} - name={name} - type={inputType} - disabled={disabled} - checked={isChecked} - onChange={(event) => onChange(value, event?.target.checked)} - className={styles['filter-item__input']} - /> - <label htmlFor={id} className={styles['filter-item__label']}> - {label} - </label> - </Col> - ); -}; - -export default FilterItem; diff --git a/libs/react-components/src/community/components/form/choice-group/components/light-item/light-item.module.scss b/libs/react-components/src/community/components/form/choice-group/components/light-item/light-item.module.scss deleted file mode 100644 index 32bdfb7ff..000000000 --- a/libs/react-components/src/community/components/form/choice-group/components/light-item/light-item.module.scss +++ /dev/null @@ -1,36 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.light-item__input { - @include mixins.visually-hidden; -} - -.light-item__label { - display: flex; - align-items: center; - justify-content: center; - padding: 0.625rem 0.5rem; - margin: 1px; - font-size: 0.875rem; - color: var(--color-text-muted); - cursor: pointer; - background: var(--color-bg-default); - border: 1px solid var(--color-bg-disabled); - border-radius: var(--border-radius-default); - - .light-item__input:focus + & { - @include mixins.focus-element; - } - - .light-item--disabled & { - color: var(--color-text-disabled); - cursor: unset; - background-color: var(--color-bg-disabled); - } - - .light-item--checked & { - margin: 0; - color: var(--color-primary-main); - background-color: var(--color-white); - border: 2px solid var(--color-primary-main); - } -} diff --git a/libs/react-components/src/community/components/form/choice-group/components/light-item/light-item.tsx b/libs/react-components/src/community/components/form/choice-group/components/light-item/light-item.tsx deleted file mode 100644 index 6e4728d2a..000000000 --- a/libs/react-components/src/community/components/form/choice-group/components/light-item/light-item.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Col } from '../../../../../../tedi/components/layout/grid'; -import { ChoiceGroupItemProps } from '../../choice-group.types'; -import { ChoiceGroupContext } from '../../choice-group-context'; -import styles from './light-item.module.scss'; - -export const LightItem = (props: ChoiceGroupItemProps): React.ReactElement => { - const { id, label, value, disabled, colProps } = props; - const { currentValue, inputType, name, onChange } = React.useContext(ChoiceGroupContext); - - const isChecked = !currentValue - ? false - : inputType === 'checkbox' - ? value === currentValue || currentValue.indexOf(value) !== -1 - : value === currentValue; - - const ColumnBEM = cn( - colProps?.className, - { [styles['light-item--disabled']]: disabled }, - { [styles['light-item--checked']]: isChecked } - ); - - return ( - <Col {...colProps} className={ColumnBEM}> - <input - id={id} - value={value} - name={name} - type={inputType} - disabled={disabled} - checked={isChecked} - onChange={(event) => onChange(value, event?.target.checked)} - className={styles['light-item__input']} - /> - <label htmlFor={id} className={styles['light-item__label']}> - {label} - </label> - </Col> - ); -}; - -export default LightItem; diff --git a/libs/react-components/src/community/components/form/choice-group/components/selector-item/selector-item.module.scss b/libs/react-components/src/community/components/form/choice-group/components/selector-item/selector-item.module.scss deleted file mode 100644 index a6130d85d..000000000 --- a/libs/react-components/src/community/components/form/choice-group/components/selector-item/selector-item.module.scss +++ /dev/null @@ -1,81 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.selector-item { - display: flex; - height: 2.5rem; - - --global-outline-offset: -2px; -} - -.selector-item__input { - @include mixins.visually-hidden; -} - -.selector-item__label { - display: flex; - align-items: center; - justify-content: center; - width: 100%; - padding: 0.5rem 1.25rem; - font-size: 0.875rem; - color: var(--color-text-muted); - white-space: nowrap; - cursor: pointer; - background-color: var(--color-bg-subtle); - border: 1px solid var(--color-border-contrast); - - .selector-item__input:focus + & { - @include mixins.focus-element; - - border-radius: 0; - } - - .selector-item--disabled & { - color: var(--color-text-disabled); - cursor: unset; - background-color: var(--color-bg-disabled); - } - - .selector-item--checked & { - color: var(--color-text-inverted); - background-color: var(--color-primary-main); - - --global-outline-color: var(--color-primary-highlight); - } - - .selector-item--checked:not(.selector-item--column, .selector-item--column-reverse) & { - border-top-color: var(--color-primary-main); - border-bottom-color: var(--color-primary-main); - } - - .selector-item--row:first-of-type &, - .selector-item--row-reverse:last-child & { - margin-left: 0; - border-top-left-radius: var(--border-radius-default); - border-bottom-left-radius: var(--border-radius-default); - } - - .selector-item--row:last-child &, - .selector-item--row-reverse:first-of-type & { - border-top-right-radius: var(--border-radius-default); - border-bottom-right-radius: var(--border-radius-default); - } - - .selector-item--column &, - .selector-item--column-reverse & { - border-top: 0; - } - - .selector-item--column:first-of-type &, - .selector-item--column-reverse:last-child & { - border-top: 1px solid var(--color-border-contrast); - border-top-left-radius: var(--border-radius-default); - border-top-right-radius: var(--border-radius-default); - } - - .selector-item--column:last-child &, - .selector-item--column-reverse:first-of-type & { - border-bottom-right-radius: var(--border-radius-default); - border-bottom-left-radius: var(--border-radius-default); - } -} diff --git a/libs/react-components/src/community/components/form/choice-group/components/selector-item/selector-item.tsx b/libs/react-components/src/community/components/form/choice-group/components/selector-item/selector-item.tsx deleted file mode 100644 index 19bf95344..000000000 --- a/libs/react-components/src/community/components/form/choice-group/components/selector-item/selector-item.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Col } from '../../../../../../tedi/components/layout/grid'; -import { ChoiceGroupItemProps } from '../../choice-group.types'; -import { ChoiceGroupContext } from '../../choice-group-context'; -import styles from './selector-item.module.scss'; - -export const SelectorItem = (props: ChoiceGroupItemProps): React.ReactElement => { - const { id, label, value, disabled, colProps, direction } = props; - const { currentValue, inputType, name, onChange } = React.useContext(ChoiceGroupContext); - - const isChecked = !currentValue - ? false - : inputType === 'checkbox' - ? value === currentValue || currentValue.indexOf(value) !== -1 - : value === currentValue; - - const onChangeHandler = (event: React.ChangeEvent<HTMLInputElement>): void => { - onChange?.(value, event?.target.checked); - }; - - const ColumnBEM = cn( - styles['selector-item'], - colProps?.className, - styles[`selector-item--${direction}`], - { [styles['selector-item--disabled']]: disabled }, - { [styles['selector-item--checked']]: isChecked } - ); - - return ( - <Col {...colProps} className={ColumnBEM}> - <input - id={id} - value={value} - name={name} - type={inputType} - disabled={disabled} - checked={isChecked} - onChange={onChangeHandler} - className={styles['selector-item__input']} - /> - <label htmlFor={id} className={styles['selector-item__label']}> - {label} - </label> - </Col> - ); -}; diff --git a/libs/react-components/src/community/components/form/choice-group/index.ts b/libs/react-components/src/community/components/form/choice-group/index.ts deleted file mode 100644 index 8d851d36a..000000000 --- a/libs/react-components/src/community/components/form/choice-group/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './choice-group'; -export * from './choice-group.types'; -export * from './components/choice-group-check/choice-group-check'; -export * from './components/choice-group-radio/choice-group-radio'; diff --git a/libs/react-components/src/community/components/form/choice-input.types.ts b/libs/react-components/src/community/components/form/choice-input.types.ts deleted file mode 100644 index 90cda61ee..000000000 --- a/libs/react-components/src/community/components/form/choice-input.types.ts +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react'; - -export interface ChoiceInputProps { - /** - * ID property - */ - id: string; - /** - * Label text - */ - label: React.ReactNode; - /** - * Additional classes. - */ - className?: string; - /** - * Value property - */ - value: string; - /** - * name of the input - */ - name: string; - /** - * is the label hidden - */ - hideLabel?: boolean; - /** - * If the option is disabled - */ - disabled?: boolean; - /** - * onChange handler - */ - onChange?: (value: string, checked: boolean) => void; - /** - * Possibility to add extra content after label. ExtraContent is not clickable like label - * Can only be used with ChoiceGroupRadio and Checkbox. - */ - extraContent?: React.ReactNode; - /** - * If the check is controlled from outside the components - */ - checked?: boolean; - /** - * If the check is checked by default - */ - defaultChecked?: boolean; - /** - * If the item should be in hover state - */ - hover?: boolean; - /** - * Provide content for tooltip. - */ - tooltip?: React.ReactNode; -} diff --git a/libs/react-components/src/community/components/form/file-upload/examples/multiple-handled.tsx b/libs/react-components/src/community/components/form/file-upload/examples/multiple-handled.tsx deleted file mode 100644 index f0cf3d85a..000000000 --- a/libs/react-components/src/community/components/form/file-upload/examples/multiple-handled.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { StoryFn } from '@storybook/react'; -import React from 'react'; - -import FileUpload, { FileUploadFile } from '../file-upload'; - -export const MultipleHandledTemplate: StoryFn<typeof FileUpload> = (args) => { - const [files, setFiles] = React.useState<FileUploadFile[]>([{ name: 'avaldus.pdf' }]); - - return <FileUpload files={files} onChange={setFiles} {...args} />; -}; diff --git a/libs/react-components/src/community/components/form/file-upload/file-upload.module.scss b/libs/react-components/src/community/components/form/file-upload/file-upload.module.scss deleted file mode 100644 index 8dbe87040..000000000 --- a/libs/react-components/src/community/components/form/file-upload/file-upload.module.scss +++ /dev/null @@ -1,36 +0,0 @@ -.file-upload { - float: right; - cursor: pointer; - - &-disabled { - cursor: initial; - } - - & input[type='file'] { - display: none; - } -} - -.file-upload__items { - display: flex; - flex-wrap: wrap; - gap: 0.5rem; - margin: 0; - - & li { - list-style-type: none; - } -} - -.file-upload__label { - width: fit-content; - cursor: pointer; -} - -.file-upload__label-wrapper { - width: fit-content; -} - -.file-upload__card { - border-color: var(--color-border-contrast); -} diff --git a/libs/react-components/src/community/components/form/file-upload/file-upload.stories.tsx b/libs/react-components/src/community/components/form/file-upload/file-upload.stories.tsx deleted file mode 100644 index dbead2758..000000000 --- a/libs/react-components/src/community/components/form/file-upload/file-upload.stories.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import { MultipleHandledTemplate } from './examples/multiple-handled'; -import FileUpload from './file-upload'; - -const meta: Meta<typeof FileUpload> = { - component: FileUpload, - title: 'Community/Form/FileUpload', -}; - -export default meta; -type Story = StoryObj<typeof FileUpload>; - -export const Default: Story = { - args: { - id: 'file-upload', - name: 'file', - label: 'Upload file', - }, -}; - -export const Multiple: Story = { - args: { - id: 'file-upload-MULTIPLE', - name: 'file-multiple', - label: 'Upload file', - multiple: true, - helper: { - text: 'JPG, PNG, PDF with size 1MB.', - }, - }, -}; - -export const LoadingState: Story = { - args: { - id: 'file-upload-loading', - name: 'file-loading', - label: 'Upload file', - defaultFiles: [{ name: 'report.pdf', isLoading: true }], - }, -}; - -export const MultipleHandled: Story = { - render: MultipleHandledTemplate, - args: { - id: 'file-upload-handled', - name: 'file-loading-handled', - label: 'Upload file', - multiple: true, - onDelete: (file) => { - console.log(`Deleted - ${file.name}`); - }, - }, -}; - -export const ReadOnlyFiles: Story = { - args: { - id: 'file-upload-read-only', - name: 'file-loading', - label: 'Upload file', - files: [{ name: 'report.pdf' }], - onChange: (files) => { - console.log(files); - }, - readOnly: true, - }, -}; - -export const Disabled: Story = { - args: { - id: 'file-upload-disabled', - name: 'file-loading', - label: 'Upload file', - defaultFiles: [{ name: 'report.pdf' }], - disabled: true, - }, -}; - -export const PdfAndTxtOnly: Story = { - args: { - id: 'file-upload-accepts', - name: 'file-accepts', - label: 'Upload file', - accept: '.pdf,.txt', - }, -}; - -export const SizeLimited: Story = { - args: { - id: 'file-upload-size-limited', - name: 'file-size-limited', - label: 'Upload file', - maxSize: 0.001, - multiple: true, - }, -}; - -export const ExtensionAndSizeLimit: Story = { - args: { - id: 'file-upload-size-extension-limited', - name: 'file-size-extension-limited', - label: 'Upload file', - maxSize: 0.001, - accept: '.pdf,.txt', - multiple: true, - }, -}; diff --git a/libs/react-components/src/community/components/form/file-upload/file-upload.tsx b/libs/react-components/src/community/components/form/file-upload/file-upload.tsx deleted file mode 100644 index 228dde59e..000000000 --- a/libs/react-components/src/community/components/form/file-upload/file-upload.tsx +++ /dev/null @@ -1,277 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { FeedbackText, FeedbackTextProps } from '../../../../tedi/components/form/feedback-text/feedback-text'; -import { FormLabel, FormLabelProps } from '../../../../tedi/components/form/form-label/form-label'; -import { Col, Row } from '../../../../tedi/components/layout/grid'; -import { Tag } from '../../../../tedi/components/tags/tag/tag'; -import { ILabelContext, useLabels } from '../../../../tedi/providers/label-provider'; -import Button from '../../button/button'; -import { Card, CardContent } from '../../card'; -import styles from './file-upload.module.scss'; - -export interface FileUploadFile extends Partial<File> { - id?: string; - /** - * Is the file currently loading. Used when files are uploaded immediately - */ - isLoading?: boolean; -} - -export type FileRejectionType = 'size' | 'extension'; - -export interface RejectedFile { - type: FileRejectionType; - file: File; -} - -export interface FileUploadProps extends FormLabelProps { - /** - * Additional classes. - */ - className?: string; - /** - * Field name - */ - name: string; - /** - * FileUpload helper - */ - helper?: FeedbackTextProps; - /** - * The accept attribute value is a string that defines the file types the file input should accept - * For example '.pdf,.jpg' - */ - accept?: string; - /** - * When the multiple Boolean attribute is true, the file input allows the user to select more than one file. - */ - multiple?: boolean; - /** - * onChange handler - */ - onChange?: (files: FileUploadFile[]) => void; - /** - * defaultValue - */ - defaultFiles?: FileUploadFile[]; - /** - * onDelete handler - */ - onDelete?: (file: FileUploadFile) => void; - /** - * Value of input to control input value from outside of component. - * Do not use with defaultValue - */ - files?: FileUploadFile[]; - /** - * Is the fileUpload read-only - */ - readOnly?: boolean; - /** - * If fileUpload is disabled. - * @default false - */ - disabled?: boolean; - /** - * Size limit in megabytes - */ - maxSize?: number; -} - -const getDefaultHelpers = ( - { accept, maxSize }: Partial<FileUploadProps>, - getLabel: ILabelContext['getLabel'] -): FeedbackTextProps | undefined => { - if (!accept && !maxSize) return; - const text = [ - accept && `${getLabel('file-upload.accept')} ${accept.replaceAll(',', ', ')}`, - maxSize && `${getLabel('file-upload.max-size')} ${maxSize}MB`, - ] - .filter(Boolean) - .join('. '); - return text.length ? { text } : undefined; -}; - -const getUploadErrorHelperText = (rejectedFiles: RejectedFile[], getLabel: ILabelContext['getLabel']): string => { - const textMap = rejectedFiles.reduce( - (acc, { type, file }) => { - acc[type].push(file.name); - return acc; - }, - { extension: [] as string[], size: [] as string[] } - ); - - // Get labels based on rejection type - return Object.entries(textMap) - .filter(([_, names]) => names.length) - .map(([type, names]) => { - const joinedNames = names.map((name) => `'${name}'`).join(', '); - const label = getLabel(`file-upload.${type as FileRejectionType}-rejected`, joinedNames); - return label; - }) - .join('. '); -}; - -export const FileUpload = (props: FileUploadProps): JSX.Element => { - const { getLabel } = useLabels(); - const { - id, - name, - accept, - multiple, - onChange, - className, - defaultFiles, - onDelete, - files, - readOnly, - disabled = false, - maxSize, - helper = getDefaultHelpers({ accept, maxSize }, getLabel), - ...rest - } = props; - const helperId = helper ? helper?.id ?? `${id}-helper` : undefined; - - const [hovered, setHovered] = React.useState(false); - const [innerFiles, setInnerFiles] = React.useState<FileUploadFile[]>(defaultFiles || []); - const [uploadErrorHelper, setUploadErrorHelper] = React.useState<FeedbackTextProps | undefined>(); - - const fileUploadBEM = cn(styles['file-upload'], { [styles['file-upload-disabled']]: disabled }); - - const validFileType = (file: File) => { - if (!accept) { - return true; - } - - const fileTypes = accept?.replace(/,/g, '').split('.') || []; - // Todo: Handle error handling - - const fileType = file.name.split('.').pop()?.toLowerCase(); - return !!fileType && fileTypes.includes(fileType); - }; - - const getFiles = React.useMemo(() => { - return !!files && !!onChange ? files : innerFiles; - }, [files, innerFiles, onChange]); - - const onFileChange = (e: React.ChangeEvent<HTMLInputElement>): void => { - if (e.target.files) { - const rejectedFiles: RejectedFile[] = []; - const uploadedFiles = [...Array.from(e.target.files)] - .filter((file) => { - if (validFileType(file)) return true; - - rejectedFiles.push({ type: 'extension', file }); - return false; - }) - .filter((file) => { - if (!maxSize || file.size <= maxSize * 1024 ** 2) return true; - - rejectedFiles.push({ type: 'size', file }); - return false; - }); - const newFiles = [...getFiles, ...uploadedFiles]; - - if (typeof files === 'undefined') { - setInnerFiles(newFiles); - } - - onChange?.(newFiles); - - // reset input to allow re-uploading of the same file after deletion - (e.target as HTMLInputElement).value = ''; - - if (rejectedFiles.length) { - setUploadErrorHelper({ type: 'error', text: getUploadErrorHelperText(rejectedFiles, getLabel) }); - } else { - setUploadErrorHelper(undefined); - } - } - }; - - const onFileRemove = (file: FileUploadFile): void => { - const newFiles = [...getFiles].filter((f) => f !== file); - - if (onDelete) { - onDelete(file); - } - - if (typeof files === 'undefined') { - setInnerFiles(newFiles); - } - - onChange?.(newFiles); - }; - - const getFileElement = (file: FileUploadFile, index: number) => { - return ( - <li key={index}> - <Tag - color="secondary" - onClose={!file.isLoading && !disabled && !readOnly ? () => onFileRemove(file) : undefined} - isLoading={file.isLoading} - > - {file.name} - </Tag> - </li> - ); - }; - - const showFiles = () => { - return ( - <ul className={styles['file-upload__items']}>{getFiles.map((file, index) => getFileElement(file, index))}</ul> - ); - }; - - return ( - <div> - <div - onMouseEnter={() => setHovered(true)} - onMouseLeave={() => setHovered(false)} - className={styles['file-upload__label-wrapper']} - > - <FormLabel id={id} {...rest} renderWithoutLabel={readOnly} className={styles['file-upload__label']} /> - </div> - {readOnly ? ( - showFiles() - ) : ( - <Card padding={0.5} background={disabled ? 'bg-disabled' : undefined} className={styles['file-upload__card']}> - <CardContent> - <Row gutterY={2}> - <Col>{showFiles()}</Col> - <Col xs={12} md="auto" align="center"> - <div className={fileUploadBEM}> - <input - id={id} - type="file" - name={name} - accept={accept} - onChange={onFileChange} - multiple={multiple} - disabled={disabled} - /> - <Button - visualType="link" - iconLeft="file_upload" - aria-describedby={helperId} - isActive={hovered} - disabled={disabled} - onClick={() => document.getElementById(id)?.click()} - > - {getLabel('file-upload.add')} - </Button> - </div> - </Col> - </Row> - </CardContent> - </Card> - )} - {(uploadErrorHelper || helper) && ( - <FeedbackText {...((uploadErrorHelper || helper) as FeedbackTextProps)} id={helperId} /> - )} - </div> - ); -}; - -export default FileUpload; diff --git a/libs/react-components/src/community/components/form/file-upload/index.ts b/libs/react-components/src/community/components/form/file-upload/index.ts deleted file mode 100644 index a00190ec5..000000000 --- a/libs/react-components/src/community/components/form/file-upload/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './file-upload'; diff --git a/libs/react-components/src/community/components/form/form.stories.tsx b/libs/react-components/src/community/components/form/form.stories.tsx deleted file mode 100644 index 5eaa27dd7..000000000 --- a/libs/react-components/src/community/components/form/form.stories.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { Description, Stories, Title } from '@storybook/addon-docs'; -import { Meta, StoryObj } from '@storybook/react'; - -import { TextField } from '../../../tedi/components/form/textfield/textfield'; -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import { Button } from '../../index'; - -const EmptyComponent = () => <p>Empty component</p>; - -const meta: Meta = { - component: EmptyComponent, - title: 'Community/Form', - parameters: { - docs: { - page: () => ( - <> - <Title /> - <Description /> - <Stories /> - </> - ), - }, - }, -}; - -export default meta; -type Story = StoryObj; - -/** - * Most applications handle form validation on their own with libraries like <a href="https://formik.org/" target="_blank">Formik</a>. <br/> - * Because browsers own validation might interfere with that process, we disable browsers validation on form submit. This can be overridden by `formNoValidate` prop on the button. - */ -export const BrowserValidation: Story = { - render: () => { - return ( - <form - onSubmit={(e) => { - e.preventDefault(); - alert('Form submitted'); - }} - > - <VerticalSpacing> - <TextField id="email" label="Email" required input={{ type: 'email' }} /> - <Row gutter={2}> - <Col width="auto"> - <Button type="submit">Submits form without validation</Button> - </Col> - <Col width="auto"> - <Button type="submit" formNoValidate={false}> - Submits form with validation - </Button> - </Col> - </Row> - </VerticalSpacing> - </form> - ); - }, -}; diff --git a/libs/react-components/src/community/components/form/hidden-field/examples/hidden-multiselect.tsx b/libs/react-components/src/community/components/form/hidden-field/examples/hidden-multiselect.tsx deleted file mode 100644 index 25006dc30..000000000 --- a/libs/react-components/src/community/components/form/hidden-field/examples/hidden-multiselect.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { StoryFn } from '@storybook/react'; -import React from 'react'; - -import { Col, Row } from '../../../../../tedi/components/layout/grid'; -import { Tag } from '../../../tag/tag'; -import { HiddenField } from '../hidden-field'; - -const keywords = [ - { label: 'Hooldusõigus', value: 'A' }, - { label: 'Käitumisprobleemid', value: 'B' }, - { label: 'Koolikiusamine', value: 'C' }, - { label: 'Variant D', value: 'D' }, - { label: 'Variant E', value: 'E' }, - { label: 'Variant F', value: 'F' }, -]; - -export const HiddenMultiselect: StoryFn<typeof HiddenField> = (_args) => { - const [state, setState] = React.useState([keywords[0], keywords[1], keywords[2]]); - - return ( - <HiddenField - content={ - <Row gutter={2}> - {state.map((keyword, index) => ( - <Col key={index} width="auto"> - <Tag type="secondary">{keyword.label}</Tag> - </Col> - ))} - </Row> - } - fieldType="select" - fieldOptions={{ - id: 'example-3', - label: 'Multiselect', - multiple: true, - value: state, - options: keywords, - closeMenuOnSelect: false, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - onChange: (value: any) => setState(value), - }} - /> - ); -}; diff --git a/libs/react-components/src/community/components/form/hidden-field/examples/hidden-select.tsx b/libs/react-components/src/community/components/form/hidden-field/examples/hidden-select.tsx deleted file mode 100644 index e92212340..000000000 --- a/libs/react-components/src/community/components/form/hidden-field/examples/hidden-select.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { StoryFn } from '@storybook/react'; -import React from 'react'; - -import { Col, Row } from '../../../../../tedi/components/layout/grid'; -import { Icon } from '../../../icon/icon'; -import { Tag } from '../../../tag/tag'; -import { ISelectOption } from '../../select/select'; -import HiddenField from '../hidden-field'; - -const selectOptions: ISelectOption[] = [ - { label: 'Abivajav laps', value: 'A' }, - { label: 'Abivajav täiskasvanu', value: 'B' }, - { label: 'Hädaohus olev laps', value: 'C' }, -]; - -export const HiddenSelect: StoryFn<typeof HiddenField> = (_args) => { - const [state, setState] = React.useState(selectOptions[0]); - - return ( - <HiddenField - content={ - <Row alignItems="end" gutter={2}> - <Col width="auto"> - <Tag color="warning" type="secondary" iconOnly={true}> - <Icon size={12} name="circle" filled /> - </Tag> - </Col> - <Col>{state?.label}</Col> - </Row> - } - fieldType="select" - fieldOptions={{ - id: 'example-2', - label: 'Select', - value: state, - options: selectOptions, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - onChange: (value: any) => setState(value), - }} - /> - ); -}; diff --git a/libs/react-components/src/community/components/form/hidden-field/examples/hidden-textfield.tsx b/libs/react-components/src/community/components/form/hidden-field/examples/hidden-textfield.tsx deleted file mode 100644 index 422595d19..000000000 --- a/libs/react-components/src/community/components/form/hidden-field/examples/hidden-textfield.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { StoryFn } from '@storybook/react'; -import React from 'react'; - -import { HiddenField } from '../hidden-field'; - -export const HiddenTextField: StoryFn<typeof HiddenField> = (_args) => { - const [state, setState] = React.useState('Vaba tekst'); - - return ( - <HiddenField - content={<p>{state}</p>} - fieldType="textfield" - fieldOptions={{ - id: 'example-1', - label: 'Textfield', - value: state, - onChange: (value: string) => setState(value), - }} - /> - ); -}; diff --git a/libs/react-components/src/community/components/form/hidden-field/hidden-field.module.scss b/libs/react-components/src/community/components/form/hidden-field/hidden-field.module.scss deleted file mode 100644 index 3185cbd58..000000000 --- a/libs/react-components/src/community/components/form/hidden-field/hidden-field.module.scss +++ /dev/null @@ -1,27 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.hidden-field { - &--select { - padding: 0.0625rem; - border: none; - } - - &--datetime { - padding: 0; - border: none; - } -} - -.hidden-field-button { - @include mixins.button-reset; - - display: flex; - align-items: flex-start; - width: 100%; - padding: 0.25rem; - border-radius: var(--border-radius-default); - - &:hover { - background-color: var(--color-bg-default); - } -} diff --git a/libs/react-components/src/community/components/form/hidden-field/hidden-field.stories.tsx b/libs/react-components/src/community/components/form/hidden-field/hidden-field.stories.tsx deleted file mode 100644 index eb43cca32..000000000 --- a/libs/react-components/src/community/components/form/hidden-field/hidden-field.stories.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { Meta } from '@storybook/react'; - -import { HiddenMultiselect } from './examples/hidden-multiselect'; -import { HiddenSelect } from './examples/hidden-select'; -import { HiddenTextField } from './examples/hidden-textfield'; -import HiddenField from './hidden-field'; - -const meta: Meta<typeof HiddenField> = { - component: HiddenField, - title: 'Community/Form/HiddenField', - argTypes: { - content: { control: false }, - fieldType: { control: false }, - fieldOptions: { control: false }, - }, -}; - -export default meta; - -export { HiddenTextField, HiddenSelect, HiddenMultiselect }; diff --git a/libs/react-components/src/community/components/form/hidden-field/hidden-field.tsx b/libs/react-components/src/community/components/form/hidden-field/hidden-field.tsx deleted file mode 100644 index e8ac8f283..000000000 --- a/libs/react-components/src/community/components/form/hidden-field/hidden-field.tsx +++ /dev/null @@ -1,149 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import TextField, { TextFieldForwardRef, TextFieldProps } from '../../../../tedi/components/form/textfield/textfield'; -import { DateTimePicker, DateTimePickerProps } from '../pickers'; -import Select, { SelectProps, TSelectValue } from '../select/select'; -import styles from './hidden-field.module.scss'; - -export interface HiddenFieldDefaultProps { - /* - * Classname for the button/displayed content - * */ - className?: string; - /* - * Content displayed when not a field - * */ - content: React.ReactNode; -} - -/* - * Example of field-specific interface, containing specific fieldType and corresponding Prop type - * */ -export interface HiddenTextFieldProps extends HiddenFieldDefaultProps { - fieldType: 'textfield'; - fieldOptions: TextFieldProps; -} - -export interface HiddenSelectProps extends HiddenFieldDefaultProps { - fieldType: 'select'; - fieldOptions: SelectProps; -} - -export interface HiddenDateTimeProps extends HiddenFieldDefaultProps { - fieldType: 'datetime'; - fieldOptions: DateTimePickerProps; -} - -export type HiddenFieldProps = HiddenTextFieldProps | HiddenSelectProps | HiddenDateTimeProps; - -const isTextFieldProps = (props: HiddenFieldProps): props is HiddenTextFieldProps => { - return props.fieldType === 'textfield'; -}; - -const isSelectProps = (props: HiddenFieldProps): props is HiddenSelectProps => { - return props.fieldType === 'select'; -}; - -const isDateTimeProps = (props: HiddenFieldProps): props is HiddenDateTimeProps => { - return props.fieldType === 'datetime'; -}; - -export const HiddenField = (props: HiddenFieldProps): JSX.Element => { - const [isOpen, setIsOpen] = React.useState(false); - const inputRef = React.useRef<TextFieldForwardRef>(null); - - React.useEffect(() => { - if (isTextFieldProps(props) && inputRef.current?.input && isOpen) { - inputRef.current?.input.focus(); - } - }, [isOpen, props]); - - const HiddenTextField = (props: HiddenTextFieldProps) => { - const { className, onBlur, onKeyDown, ...rest } = props.fieldOptions; - const TextFieldBEM = cn(className, styles['hidden-field']); - - const closeField: React.FocusEventHandler<HTMLInputElement | HTMLTextAreaElement> = (e) => { - onBlur?.(e); - setIsOpen(false); - }; - - return ( - <TextField - {...rest} - data-name="hidden-field" - hideLabel - size="small" - className={TextFieldBEM} - inputClassName={styles['hidden-field__input']} - onKeyDown={(event) => { - onKeyDown?.(event); - if (event.key === 'enter' || event.keyCode === 13 || event.which === 13) { - event.preventDefault(); - closeField(event as unknown as React.FocusEvent<HTMLInputElement | HTMLTextAreaElement, Element>); - } - }} - onBlur={closeField} - ref={inputRef} - /> - ); - }; - - const HiddenSelectField = (props: HiddenSelectProps) => { - const { className, onBlur, onChange, closeMenuOnSelect = false, ...rest } = props.fieldOptions; - const SelectBEM = cn(className, styles['hidden-field'], styles['hidden-field--select']); - - const handleBlur = () => { - onBlur?.(); - setIsOpen(false); - }; - - const handleChange = (value: TSelectValue) => { - onChange?.(value); - if (closeMenuOnSelect) { - setIsOpen(false); - } - }; - - return ( - <Select - autoFocus - {...rest} - onBlur={handleBlur} - onChange={handleChange} - className={SelectBEM} - hideLabel - size="small" - /> - ); - }; - - const HiddenDateTimeField = (props: HiddenDateTimeProps) => { - const { className: fieldClassName, onBlur, ...rest } = props.fieldOptions; - const DateTimeBEM = cn(fieldClassName, styles['hidden-field'], styles['hidden-field--datetime']); - - const handleBlur: React.FocusEventHandler<HTMLInputElement | HTMLTextAreaElement> = (e) => { - setIsOpen(false); - onBlur?.(e); - }; - - return <DateTimePicker {...rest} hideLabel className={DateTimeBEM} onBlur={handleBlur} />; - }; - - return ( - <> - {isTextFieldProps(props) && isOpen ? <HiddenTextField {...props} /> : null} - {isSelectProps(props) && isOpen ? <HiddenSelectField {...props} /> : null} - {isDateTimeProps(props) && isOpen ? <HiddenDateTimeField {...props} /> : null} - <button - type="button" - onClick={() => setIsOpen(true)} - className={cn(styles['hidden-field-button'], 'text-small', { hidden: isOpen }, props.className)} - > - {props.content} - </button> - </> - ); -}; - -export default HiddenField; diff --git a/libs/react-components/src/community/components/form/pickers/calendar/calendar.module.scss b/libs/react-components/src/community/components/form/pickers/calendar/calendar.module.scss deleted file mode 100644 index 6fc5c3945..000000000 --- a/libs/react-components/src/community/components/form/pickers/calendar/calendar.module.scss +++ /dev/null @@ -1,26 +0,0 @@ -.calendar__day--status-error, -.calendar__day--status-success, -.calendar__day--status-inactive { - &::before { - position: absolute; - top: 0; - right: 0; - width: 0.625rem; - height: 0.625rem; - content: ''; - border: 1px solid var(--color-bg-default); - border-radius: 50%; - } -} - -.calendar__day--status-success::before { - background-color: var(--color-positive-main); -} - -.calendar__day--status-error::before { - background-color: var(--color-important-main); -} - -.calendar__day--status-inactive::before { - background-color: var(--color-text-disabled); -} diff --git a/libs/react-components/src/community/components/form/pickers/calendar/calendar.stories.tsx b/libs/react-components/src/community/components/form/pickers/calendar/calendar.stories.tsx deleted file mode 100644 index 81eca03fc..000000000 --- a/libs/react-components/src/community/components/form/pickers/calendar/calendar.stories.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; -import dayjs, { Dayjs } from 'dayjs'; - -import Calendar, { CalendarStatus } from './calendar'; - -const meta: Meta<typeof Calendar> = { - component: Calendar, - title: 'Community/Form/Pickers/Calendar', -}; - -export default meta; -type Story = StoryObj<typeof Calendar>; - -const highlightedDates: Dayjs[] = [ - dayjs('2024-10-10'), - dayjs('2024-10-22'), - dayjs('2024-10-23'), - dayjs('2024-11-06'), - dayjs('2024-11-12'), -]; - -const statusOnDates: Dayjs[] = [dayjs('2024-10-10'), dayjs('2024-10-16'), dayjs('2024-10-23')]; - -const statuses: { date: Dayjs; status: CalendarStatus }[] = [ - { date: dayjs('2024-10-10'), status: 'error' }, - { date: dayjs('2024-10-11'), status: 'error' }, - { date: dayjs('2024-10-21'), status: 'success' }, - { date: dayjs('2024-10-22'), status: 'success' }, - { date: dayjs('2024-10-23'), status: 'inactive' }, - { date: dayjs('2024-10-24'), status: 'inactive' }, -]; - -export const Default: Story = { - args: { - defaultValue: dayjs('2024-10-10'), - }, -}; - -export const Disabled: Story = { - args: { - defaultValue: highlightedDates[0], - disabled: true, - }, -}; - -export const Highlighted: Story = { - args: { - defaultValue: highlightedDates[0], - disableHighlightToday: true, - minDate: highlightedDates[0], - maxDate: highlightedDates[highlightedDates.length - 1], - shouldHighlightDate: (day) => { - return !!highlightedDates.find((date) => date.isSame(day, 'day')); - }, - shouldDisableDate: (day) => { - return !highlightedDates.find((date) => date.isSame(day, 'day')); - }, - shouldShowStatusOnDate: (day) => { - return statusOnDates.find((date) => date.isSame(day, 'day')) ? 'error' : undefined; - }, - }, -}; - -export const WithStatuses: Story = { - args: { - defaultValue: highlightedDates[0], - disableHighlightToday: true, - minDate: highlightedDates[0], - maxDate: highlightedDates[highlightedDates.length - 1], - shouldHighlightDate: (day) => { - return !!highlightedDates?.find((date) => date?.isSame(day)); - }, - shouldShowStatusOnDate: (day) => { - const value = statuses.find((value) => day?.isSame(value.date)); - return value ? value.status : undefined; - }, - }, -}; diff --git a/libs/react-components/src/community/components/form/pickers/calendar/calendar.tsx b/libs/react-components/src/community/components/form/pickers/calendar/calendar.tsx deleted file mode 100644 index 50608b55a..000000000 --- a/libs/react-components/src/community/components/form/pickers/calendar/calendar.tsx +++ /dev/null @@ -1,178 +0,0 @@ -import { CalendarPicker, PickersDay, PickersDayProps } from '@mui/x-date-pickers'; -import cn from 'classnames'; -import type { Dayjs } from 'dayjs'; -import React from 'react'; - -import styles from './calendar.module.scss'; - -export type CalendarValue = Dayjs | null; -export type CalendarStatus = 'error' | 'success' | 'inactive'; - -export interface CalendarProps { - /** - * Currently selected value. Accepts a dayjs date object. - * Used only if onChange is also defined - */ - value?: CalendarValue; - /** - * Calendar picker initial value. Accepts a dayjs date object. - */ - defaultValue?: CalendarValue; - /** - * onChange handler. - * Triggers each time when new value is selected from calendar picker. - */ - onChange?: (value: CalendarValue) => void; - /** - * If true, the picker and text field are disabled. - */ - disabled?: boolean; - /** - * If true future days are disabled. - */ - disableFuture?: boolean; - /** - * If true, today's date is rendering without highlighting with circle. - */ - disableHighlightToday?: boolean; - /** - * If true past days are disabled. - */ - disablePast?: boolean; - /** - * If true renders LoadingComponent in calendar instead of calendar view. Can be used to preload information and show it in calendar. - */ - loading?: boolean; - /** - * minDate to set minDate user can select. - * If want to disable past dates use disablePast boolean. - */ - minDate?: Dayjs; - /** - * maxDate to set maxDate user can select. - * If want to disable future dates use disableFuture boolean. - */ - maxDate?: Dayjs; - /** - * Make picker read only. - */ - readOnly?: boolean; - /** - * Controlled open view. - * @default day - */ - view?: 'day' | 'month' | 'year'; - /** - * Views for calendar picker. - * @default [day] - */ - views?: Array<'day' | 'month' | 'year'>; - /** - * If true, days that have outsideCurrentMonth={true} are displayed. - * @default false - */ - showDaysOutsideCurrentMonth?: boolean; - /** - * Highlight specific date - */ - shouldHighlightDate?: (day: CalendarValue) => boolean; - /** - * Disable specific date. - */ - shouldDisableDate?: (day: CalendarValue) => boolean; - /** - * Disable specific months dynamically. Works like shouldDisableDate but for month selection view - */ - shouldDisableMonth?: (month: CalendarValue) => boolean; - /** - * Disable specific years dynamically. Works like shouldDisableDate but for year selection view - */ - shouldDisableYear?: (month: CalendarValue) => boolean; - /** - * Shows status on date. Return the status type or undefined - */ - shouldShowStatusOnDate?: (day: CalendarValue) => CalendarStatus | undefined; -} - -export const Calendar = (props: CalendarProps): JSX.Element => { - const { - value, - defaultValue, - onChange, - disabled, - disableFuture, - disableHighlightToday, - disablePast, - loading, - minDate, - maxDate, - readOnly, - view = 'day', - views = ['day'], - showDaysOutsideCurrentMonth = false, - shouldHighlightDate, - shouldDisableDate, - shouldDisableMonth, - shouldDisableYear, - shouldShowStatusOnDate, - } = props; - - const [innerDate, setInnerDate] = React.useState<CalendarValue>(defaultValue || null); - - const getValue = React.useMemo((): CalendarValue => { - return onChange && typeof value !== 'undefined' ? value : innerDate; - }, [innerDate, onChange, value]); - - const onChangeHandler = (selectedDate: CalendarValue): void => { - if (!selectedDate?.isValid() && selectedDate !== null) { - return; - } - - if (typeof value === 'undefined') { - setInnerDate(selectedDate); - } - - if (selectedDate?.isSame(innerDate)) { - return; - } - - onChange?.(selectedDate); - }; - - const dayRenderer = (day: CalendarValue, _: CalendarValue[], pickersDayProps: PickersDayProps<CalendarValue>) => { - const isHighlightedDay = shouldHighlightDate?.(day); - const statusOnDay: CalendarStatus | undefined = shouldShowStatusOnDate?.(day); - - const dayBEM = cn( - { 'Mui-highlighted': isHighlightedDay }, - { [styles[`calendar__day--status-${statusOnDay}`]]: statusOnDay } - ); - - return <PickersDay className={dayBEM} {...pickersDayProps} />; - }; - - return ( - <CalendarPicker<CalendarValue> - data-name="calendar" - date={getValue} - onChange={onChangeHandler} - disabled={disabled} - disableFuture={disableFuture} - disableHighlightToday={disableHighlightToday} - disablePast={disablePast} - loading={loading} - minDate={minDate} - maxDate={maxDate} - readOnly={readOnly} - renderDay={dayRenderer} - shouldDisableDate={shouldDisableDate} - shouldDisableMonth={shouldDisableMonth} - shouldDisableYear={shouldDisableYear} - showDaysOutsideCurrentMonth={showDaysOutsideCurrentMonth} - view={view} - views={views} - /> - ); -}; - -export default Calendar; diff --git a/libs/react-components/src/community/components/form/pickers/datepicker/datepicker.stories.tsx b/libs/react-components/src/community/components/form/pickers/datepicker/datepicker.stories.tsx deleted file mode 100644 index b7ad4c973..000000000 --- a/libs/react-components/src/community/components/form/pickers/datepicker/datepicker.stories.tsx +++ /dev/null @@ -1,171 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import dayjs, { Dayjs } from 'dayjs'; -import React from 'react'; - -import { Col, Row } from '../../../../../tedi/components/layout/grid'; -import Button from '../../../button/button'; -import DatePicker, { DatePickerProps } from './datepicker'; - -const meta: Meta<typeof DatePicker> = { - component: DatePicker, - title: 'Community/Form/Pickers/DatePicker', -}; - -export default meta; -type Story = StoryObj<typeof DatePicker>; - -const Template: StoryFn<DatePickerProps> = (args) => <DatePicker {...args} label="Choose date" />; -const numberOne = 1; // https://github.com/storybookjs/storybook/issues/12208 - -export const Default: Story = { - render: Template, - - args: { - id: 'datepicker-default', - defaultValue: dayjs('2024-10-10'), - }, -}; - -export const Disabled: Story = { - render: Template, - - args: { - id: 'datepicker-disabled', - disabled: true, - }, -}; - -export const ReadOnly: Story = { - render: Template, - - args: { - id: 'datepicker-read-only', - readOnly: true, - defaultValue: dayjs('2024-10-10'), - }, -}; - -export const ReferenceDate: Story = { - render: Template, - - args: { - id: 'datepicker-reference-date', - referenceDate: dayjs().add(1, 'month'), - }, -}; - -export const DisableFuture: Story = { - render: Template, - - args: { - id: 'datepicker-disable-future', - disableFuture: true, - }, -}; - -export const DisablePast: Story = { - render: Template, - - args: { - id: 'datepicker-disable-past', - disablePast: true, - }, -}; - -/** - * Can only select fridays, defaultValue is next friday and today is not highlighted. - */ -export const CustomDisabledDays: Story = { - render: Template, - - args: { - id: 'datepicker-custom-disabled-days', - defaultValue: dayjs('2024-10-10').weekday(5), - shouldDisableDate: (date) => date?.weekday() !== 4, - disableHighlightToday: true, - }, -}; - -export const WithCustomFormat: Story = { - render: Template, - - args: { - id: 'datepicker-custom-format', - inputFormat: 'MM-DD-YYYY', - }, -}; - -export const WithCustomPlaceholder: Story = { - render: Template, - - args: { - id: 'datepicker-custom-placeholder', - placeholder: 'PP-KK-AAAA', - }, -}; - -export const WithCustomViews: Story = { - render: Template, - - args: { - id: 'datepicker-custom-views', - views: ['year', 'month', 'day'], - }, -}; - -export const InLoadingState: Story = { - render: Template, - - args: { - id: 'datepicker-loading', - loading: true, - }, -}; - -export const WithErrorHelper: Story = { - render: Template, - - args: { - id: 'datepicker-error-helper', - defaultValue: dayjs('2024-10-10').add(numberOne, 'day'), - helper: { text: 'Date can not be in the future!', type: 'error' }, - }, -}; - -export const Controlled = () => { - const [date, setDate] = React.useState<Dayjs | null>(dayjs('2024-10-10')); - - return ( - <> - <Row> - <Col width="auto"> - <Button visualType="link" onClick={() => setDate(null)}> - Clear - </Button> - </Col> - <Col width="auto"> - <Button visualType="link" onClick={() => setDate(dayjs('2024-10-10'))}> - today - </Button> - </Col> - <Col width="auto"> - <Button visualType="link" onClick={() => setDate(dayjs('2024-10-10').add(numberOne, 'day'))}> - tomorrow - </Button> - </Col> - <Col width="auto"> - <Button visualType="link" onClick={() => setDate(dayjs('2024-10-10').add(numberOne, 'month'))}> - next month - </Button> - </Col> - <Col width="auto"> - <Button visualType="link" onClick={() => setDate(dayjs('2024-10-10').subtract(numberOne, 'year'))}> - minus year - </Button> - </Col> - </Row> - <DatePicker label="Choose date" id="datepicker-2" value={date} onChange={setDate} /> - <p>Current date is: {date?.toString()}</p> - </> - ); -}; diff --git a/libs/react-components/src/community/components/form/pickers/datepicker/datepicker.tsx b/libs/react-components/src/community/components/form/pickers/datepicker/datepicker.tsx deleted file mode 100644 index 47dfd1e01..000000000 --- a/libs/react-components/src/community/components/form/pickers/datepicker/datepicker.tsx +++ /dev/null @@ -1,183 +0,0 @@ -import { DatePicker as MuiDatePicker } from '@mui/x-date-pickers'; -import { DateValidationError } from '@mui/x-date-pickers/internals'; -import { Dayjs } from 'dayjs'; -import React from 'react'; - -import { TextFieldProps } from '../../../../../tedi/components/form/textfield/textfield'; -import MuiInputTransition from '../mui-input-transition/mui-input-transition'; - -export type DatepickerValue = Dayjs | null; - -export interface DatePickerProps extends Omit<TextFieldProps, 'defaultValue' | 'value' | 'onChange'> { - /** - * Datepicker initial value. Accepts a dayjs date object. - */ - defaultValue?: DatepickerValue; - /** - * Currently selected value. Accepts a dayjs date object. - * Used only if onChange is also defined - */ - value?: DatepickerValue; - /** - * onChange handler. - * Triggers each time when new value is selected from datepicker. - */ - onChange?: (value: DatepickerValue) => void; - /** - * minDate to set minDate user can select. - * If want to disable past dates use disablePast boolean. - */ - minDate?: Dayjs; - /** - * maxDate to set maxDate user can select. - * If want to disable future dates use disableFuture boolean. - */ - maxDate?: Dayjs; - /** - * Controls the date the picker is opened to - */ - referenceDate?: Dayjs; - /** - * If true future days are disabled. - */ - disableFuture?: boolean; - /** - * If true past days are disabled. - */ - disablePast?: boolean; - /** - * If true, today's date is rendering without highlighting with circle. - */ - disableHighlightToday?: boolean; - /** - * Disable specific date. - */ - shouldDisableDate?: (day: DatepickerValue) => boolean; - /** - * Disable specific months dynamically. Works like shouldDisableDate but for month selection view - */ - shouldDisableMonth?: (month: DatepickerValue) => boolean; - /** - * Disable specific years dynamically. Works like shouldDisableDate but for year selection view - */ - shouldDisableYear?: (month: DatepickerValue) => boolean; - /** - * Mobile picker title, displaying in the toolbar. Default from LabelProvider - */ - toolbarTitle?: string; - /** - * Format string. - * @Default DD.MM.YYYY - */ - inputFormat?: string; - /** - * If true renders LoadingComponent in calendar instead of calendar view. Can be used to preload information and show it in calendar. - */ - loading?: boolean; - /** - * Callback that fired when input value or new value prop validation returns new validation error (or value is valid after error). - * In case of validation error detected reason prop return non-null value and TextField must be displayed in error state. - * This can be used to render appropriate form error. - * Read the guide about form integration and error displaying (https://next.material-ui-pickers.dev/guides/forms). - */ - onError?: (reason: DateValidationError, value: DatepickerValue) => void; - /** - * Array of views to show. - * @default ['year', 'day'] - */ - views?: Array<'day' | 'month' | 'year'>; - /** - * Callback fired when the popup requests to be closed. - */ - onClose?: () => void; -} - -export const DatePicker = (props: DatePickerProps): JSX.Element => { - const { - value, - defaultValue, - onChange, - minDate, - maxDate, - disabled, - readOnly, - toolbarTitle, - disableFuture, - disablePast, - shouldDisableDate, - shouldDisableMonth, - shouldDisableYear, - disableHighlightToday, - referenceDate, - inputFormat = 'DD.MM.YYYY', - views = ['year', 'day'], - onError, - loading, - onClose, - ...rest - } = props; - const [innerDate, setInnerDate] = React.useState<DatepickerValue>(defaultValue || null); - const [open, setOpen] = React.useState(false); - - const getValue = React.useMemo((): DatepickerValue => { - return onChange && typeof value !== 'undefined' ? value : innerDate; - }, [innerDate, onChange, value]); - - const onChangeHandler = (date: DatepickerValue): void => { - if (!date?.isValid() && date !== null) { - return; - } - - if (typeof value === 'undefined') { - setInnerDate(date); - } - - onChange?.(date); - }; - - const onCloseHandler = () => { - setOpen(false); - onClose?.(); - }; - - return ( - <MuiDatePicker<DatepickerValue> - data-name="datepicker" - value={getValue} - onChange={onChangeHandler} - renderInput={(props) => ( - <MuiInputTransition - muiTextfieldProps={props} - inputFormat={inputFormat} - onChangeHandler={onChangeHandler} - textfieldProps={{ - ...rest, - onClear: () => onChangeHandler(null), - onIconClick: !readOnly ? () => setOpen((open) => !open) : undefined, - }} - /> - )} - open={open} - inputFormat={inputFormat} - onOpen={() => setOpen(true)} - onClose={onCloseHandler} - defaultCalendarMonth={referenceDate} - disabled={disabled} - disableFuture={disableFuture} - disablePast={disablePast} - shouldDisableDate={shouldDisableDate} - shouldDisableMonth={shouldDisableMonth} - shouldDisableYear={shouldDisableYear} - disableHighlightToday={disableHighlightToday} - readOnly={readOnly} - minDate={minDate} - maxDate={maxDate} - toolbarTitle={toolbarTitle} - onError={onError} - loading={loading} - views={views} - /> - ); -}; - -export default DatePicker; diff --git a/libs/react-components/src/community/components/form/pickers/datetimepicker/datetimepicker.stories.tsx b/libs/react-components/src/community/components/form/pickers/datetimepicker/datetimepicker.stories.tsx deleted file mode 100644 index cb7d85d78..000000000 --- a/libs/react-components/src/community/components/form/pickers/datetimepicker/datetimepicker.stories.tsx +++ /dev/null @@ -1,190 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import dayjs, { Dayjs } from 'dayjs'; -import React from 'react'; - -import { Col, Row } from '../../../../../tedi/components/layout/grid'; -import Button from '../../../button/button'; -import DateTimePicker, { DateTimePickerProps } from './datetimepicker'; - -const meta: Meta<typeof DateTimePicker> = { - component: DateTimePicker, - title: 'Community/Form/Pickers/DateTimePicker', -}; - -export default meta; -type Story = StoryObj<typeof DateTimePicker>; - -const Template: StoryFn<DateTimePickerProps> = (args) => <DateTimePicker {...args} label="Choose date and time" />; -const numberOne = 1; // https://github.com/storybookjs/storybook/issues/12208 - -export const Default: Story = { - render: Template, - - args: { - id: 'datetimepicker-default', - }, -}; - -export const Disabled: Story = { - render: Template, - - args: { - id: 'datetimepicker-disabled', - disabled: true, - }, -}; - -export const ReadOnly: Story = { - render: Template, - - args: { - id: 'datetimepicker-read-only', - readOnly: true, - defaultValue: dayjs(), - }, -}; - -export const ReferenceDate: Story = { - render: Template, - - args: { - id: 'datepicker-reference-date', - referenceDate: dayjs().add(1, 'month'), - }, -}; - -export const DisableFuture: Story = { - render: Template, - - args: { - id: 'datetimepicker-disable-future', - disableFuture: true, - }, -}; - -export const DisablePast: Story = { - render: Template, - - args: { - id: 'datetimepicker-disable-past', - disablePast: true, - }, -}; - -/** - * Can select time between 8:00-16:30 every workday. - */ -export const WithMinMaxTime: Story = { - render: Template, - - args: { - id: 'datetimepicker-max-time', - maxTime: dayjs().set('hours', 16).set('minute', 30), - minTime: dayjs().set('hours', 8).set('minute', 0), - shouldDisableDate: (date) => date?.weekday() === 6 || date?.weekday() === 7, - }, -}; - -/** - * Can only select fridays, defaultValue is next friday and today is not highlighted. - */ -export const CustomDisabledDays: Story = { - render: Template, - - args: { - id: 'datetimepicker-custom-disabled-days', - defaultValue: dayjs().weekday(5), - shouldDisableDate: (date) => date?.weekday() !== 5, - disableHighlightToday: true, - }, -}; - -export const WithCustomFormat: Story = { - render: Template, - - args: { - id: 'datetimepicker-custom-format', - inputFormat: 'MM-DD-YYYY HH-mm', - mask: '__-__-____ __-__', - }, -}; - -export const WithCustomPlaceholder: Story = { - render: Template, - - args: { - id: 'datetimepicker-custom-placeholder', - placeholder: 'PP-KK-AAAA', - }, -}; - -export const WithCustomViews: Story = { - render: Template, - - args: { - id: 'datetimepicker-custom-views', - views: ['day', 'hours', 'minutes', 'month', 'seconds', 'year'], - }, -}; - -export const InLoadingState: Story = { - render: Template, - - args: { - id: 'datetimepicker-loading', - loading: true, - }, -}; - -export const WithErrorHelper: Story = { - render: Template, - - args: { - id: 'datetimepicker-error-helper', - defaultValue: dayjs().add(numberOne, 'day'), - helper: { text: 'Date can not be in the future!', type: 'error' }, - }, -}; - -export const Controlled = () => { - const [date, setDate] = React.useState<Dayjs | null>(dayjs()); - - return ( - <> - <Row> - <Col width="auto"> - <Button visualType="link" onClick={() => setDate(null)}> - clear - </Button> - </Col> - <Col width="auto"> - <Button visualType="link" onClick={() => setDate(dayjs())}> - today - </Button> - </Col> - <Col width="auto"> - <Button visualType="link" onClick={() => setDate(dayjs().add(numberOne, 'day'))}> - tomorrow - </Button> - </Col> - <Col width="auto"> - <Button visualType="link" onClick={() => setDate(dayjs().subtract(numberOne, 'hour'))}> - last hour - </Button> - </Col> - <Col width="auto"> - <Button visualType="link" onClick={() => setDate(dayjs().add(numberOne, 'month'))}> - next month - </Button> - </Col> - <Col width="auto"> - <Button visualType="link" onClick={() => setDate(dayjs().subtract(numberOne, 'year'))}> - minus year - </Button> - </Col> - </Row> - <DateTimePicker label="Choose date and time" id="datetimepicker-controlled" value={date} onChange={setDate} /> - <p>Current date is: {date?.toString()}</p> - </> - ); -}; diff --git a/libs/react-components/src/community/components/form/pickers/datetimepicker/datetimepicker.tsx b/libs/react-components/src/community/components/form/pickers/datetimepicker/datetimepicker.tsx deleted file mode 100644 index edbe99e69..000000000 --- a/libs/react-components/src/community/components/form/pickers/datetimepicker/datetimepicker.tsx +++ /dev/null @@ -1,238 +0,0 @@ -import { ClockPickerView, DateTimePicker as MuiDateTimePicker } from '@mui/x-date-pickers'; -import { DateTimeValidationError } from '@mui/x-date-pickers/internals/hooks/validation/useDateTimeValidation'; -import type { Dayjs } from 'dayjs'; -import React from 'react'; - -import { TextFieldProps } from '../../../../../tedi/components/form/textfield/textfield'; -import MuiInputTransition from '../mui-input-transition/mui-input-transition'; - -export type DateTimepickerValue = Dayjs | null; - -export interface DateTimePickerProps extends Omit<TextFieldProps, 'defaultValue' | 'value' | 'onChange'> { - /** - * DateTimepicker initial value. Accepts a dayjs date object. - */ - defaultValue?: DateTimepickerValue; - /** - * Currently selected value. Accepts a dayjs date object. - * Used only if onChange is also defined - */ - value?: DateTimepickerValue; - /** - * onChange handler. - * Triggers each time when new value is selected from datetimepicker. - */ - onChange?: (value: DateTimepickerValue) => void; - /** - * Minimal selectable date. - * If want to disable past dates use disablePast boolean. - */ - minDate?: Dayjs; - /** - * Minimal selectable moment of time with binding to date, to set min time in each day use minTime. - */ - minDateTime?: Dayjs; - /** - * Min time acceptable time - */ - minTime?: Dayjs; - /** - * Maximal selectable date. - * If want to disable future dates use disableFuture boolean. - */ - maxDate?: Dayjs; - /** - * Maximal selectable moment of time with binding to date, to set max time in each day use maxTime. - */ - maxDateTime?: Dayjs; - /** - * Max time acceptable time. - */ - maxTime?: Dayjs; - /** - * Controls the date the picker is opened to - */ - referenceDate?: Dayjs; - /** - * Step over minutes. - * @default 1 - */ - minutesStep?: number; - /** - * If true future days are disabled. - */ - disableFuture?: boolean; - /** - * If true past days are disabled. - */ - disablePast?: boolean; - /** - * If true, today's date is rendering without highlighting with circle. - */ - disableHighlightToday?: boolean; - /** - * Disable specific date. - */ - shouldDisableDate?: (day: DateTimepickerValue) => boolean; - /** - * Disable specific months dynamically. Works like shouldDisableDate but for month selection view - */ - shouldDisableMonth?: (month: DateTimepickerValue) => boolean; - /** - * Dynamically check if time is disabled or not. If returns false appropriate time point will ot be acceptable. - */ - shouldDisableTime?: (timeValue: number, clockType: ClockPickerView) => boolean; - /** - * Disable specific years dynamically. Works like shouldDisableDate but for year selection view - */ - shouldDisableYear?: (month: DateTimepickerValue) => boolean; - /** - * Mobile picker title, displaying in the toolbar. Default from LabelProvider - */ - toolbarTitle?: string; - /** - * Date format, that is displaying in toolbar. - */ - toolbarFormat?: string; - /** - * Format string. - * @default DD.MM.YYYY HH:mm - */ - inputFormat?: string; - /** - * If true renders LoadingComponent in calendar instead of calendar view. Can be used to preload information and show it in calendar. - */ - loading?: boolean; - /** - * Callback that fired when input value or new value prop validation returns new validation error (or value is valid after error). - * In case of validation error detected reason prop return non-null value and TextField must be displayed in error state. - * This can be used to render appropriate form error. - * Read the guide about form integration and error displaying (https://next.material-ui-pickers.dev/guides/forms). - */ - onError?: (reason: DateTimeValidationError, value: DateTimepickerValue) => void; - /** - * Array of views to show. - * @default ['year', 'day', 'hours', 'minutes'] - */ - views?: Array<'day' | 'hours' | 'minutes' | 'month' | 'seconds' | 'year'>; - /** - * Custom mask. Can be used to override generate from format. (e.g. __/__/____ __:__ or __/__/____ __:__ _M). - * @default __.__.____ __:__ - */ - mask?: string; - /** - * 12h/24h view for hour selection clock. - * @default false, - */ - ampm?: boolean; - /** - * Callback fired when the popup requests to be closed. - */ - onClose?: () => void; -} - -export const DateTimePicker = (props: DateTimePickerProps): JSX.Element => { - const { - value, - defaultValue, - onChange, - minDate, - minDateTime, - minTime, - maxDate, - maxDateTime, - maxTime, - minutesStep = 1, - disabled, - readOnly, - toolbarTitle, - toolbarFormat, - disableFuture, - disablePast, - shouldDisableDate, - shouldDisableMonth, - shouldDisableYear, - disableHighlightToday, - referenceDate, - inputFormat = 'DD.MM.YYYY HH:mm', - views = ['year', 'day', 'hours', 'minutes'], - onError, - loading, - mask = '__.__.____ __:__', - ampm = false, - onClose, - ...rest - } = props; - const [innerDate, setInnerDate] = React.useState<DateTimepickerValue>(defaultValue || null); - const [open, setOpen] = React.useState(false); - - const getValue = React.useMemo((): DateTimepickerValue => { - return onChange && typeof value !== 'undefined' ? value : innerDate; - }, [innerDate, onChange, value]); - - const onChangeHandler = (date: DateTimepickerValue): void => { - if (!date?.isValid() && date !== null) { - return; - } - - if (typeof value === 'undefined') { - setInnerDate(date); - } - - onChange?.(date); - }; - - const onCloseHandler = () => { - setOpen(false); - onClose?.(); - }; - - return ( - <MuiDateTimePicker<DateTimepickerValue> - data-name="datetimepicker" - value={getValue} - onChange={onChangeHandler} - renderInput={(props) => ( - <MuiInputTransition - muiTextfieldProps={props} - inputFormat={inputFormat} - onChangeHandler={onChangeHandler} - textfieldProps={{ - ...rest, - onClear: () => onChangeHandler(null), - onIconClick: !readOnly ? () => setOpen((open) => !open) : undefined, - }} - /> - )} - open={open} - inputFormat={inputFormat} - onOpen={() => setOpen(true)} - onClose={onCloseHandler} - defaultCalendarMonth={referenceDate} - disabled={disabled} - disableFuture={disableFuture} - disablePast={disablePast} - shouldDisableDate={shouldDisableDate} - shouldDisableMonth={shouldDisableMonth} - shouldDisableYear={shouldDisableYear} - disableHighlightToday={disableHighlightToday} - readOnly={readOnly} - minDate={minDate} - minDateTime={minDateTime} - minTime={minTime} - maxDate={maxDate} - maxDateTime={maxDateTime} - maxTime={maxTime} - toolbarTitle={toolbarTitle} - toolbarFormat={toolbarFormat} - onError={onError} - loading={loading} - views={views} - mask={mask} - minutesStep={minutesStep} - ampm={ampm} - /> - ); -}; - -export default DateTimePicker; diff --git a/libs/react-components/src/community/components/form/pickers/index.ts b/libs/react-components/src/community/components/form/pickers/index.ts deleted file mode 100644 index 30c3f7e9e..000000000 --- a/libs/react-components/src/community/components/form/pickers/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './datepicker/datepicker'; -export * from './datetimepicker/datetimepicker'; -export * from './timepicker/timepicker'; -export * from './calendar/calendar'; diff --git a/libs/react-components/src/community/components/form/pickers/mui-input-transition/mui-input-transition.tsx b/libs/react-components/src/community/components/form/pickers/mui-input-transition/mui-input-transition.tsx deleted file mode 100644 index 998021cf5..000000000 --- a/libs/react-components/src/community/components/form/pickers/mui-input-transition/mui-input-transition.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import type { TextFieldProps as MuiTextFieldPropsType } from '@mui/material'; -import type { Dayjs } from 'dayjs'; -import dayjs from 'dayjs'; -import React from 'react'; - -import TextField, { - TextFieldForwardRef, - TextFieldProps, -} from '../../../../../tedi/components/form/textfield/textfield'; -import { IntentionalAny } from '../../../../types'; - -export interface MuiInputTransitionProps { - muiTextfieldProps: MuiTextFieldPropsType; - textfieldProps: TextFieldProps; - inputFormat: string; - onChangeHandler: (date: Dayjs | null) => void; - type?: 'date' | 'time'; -} - -const MuiInputTransition = (props: MuiInputTransitionProps) => { - const { muiTextfieldProps, textfieldProps, inputFormat, onChangeHandler, type = 'date' } = props; - const { ref, inputRef, inputProps, InputProps, value, size, onChange, error, disabled, ...muiRest } = - muiTextfieldProps; - const { readOnly, id, input, ...textfieldRest } = textfieldProps; - const textfieldRef = React.useRef<TextFieldForwardRef>({ inner: null, input: null }); - - React.useEffect(() => { - if (textfieldRef.current.input) { - (inputRef as React.RefCallback<HTMLInputElement | HTMLTextAreaElement>)?.(textfieldRef.current.input); - } - }, [inputRef]); - - return ( - <TextField - id={id} - {...muiRest} - disabled={disabled} - readOnly={readOnly} - {...textfieldRest} - value={inputProps?.['value']} - onChangeEvent={(e) => { - inputProps?.onChange?.(e); - }} - placeholder={textfieldProps?.placeholder || inputProps?.placeholder} - defaultValue={undefined} // Types do not match with MuiDatepicker, and we use controlled value - ref={textfieldRef} - input={{ ...inputProps, ...input }} - invalid={error} - icon={{ - name: type === 'date' ? 'today' : 'schedule', - // TODO https://github.com/mui/mui-x/issues/6330 - label: (muiTextfieldProps?.InputProps as IntentionalAny)?.endAdornment?.props?.children?.props?.['aria-label'], - }} - onBlur={(e) => { - textfieldRest.onBlur?.(e); - muiRest.onBlur?.(e); - - // If date is not valid on blur then clear value and call onChange with null - if (!dayjs(e.currentTarget.value, inputFormat, true).isValid()) { - onChangeHandler(null); - inputProps?.onChange?.({ ...e, target: { ...e.target, value: '' } as EventTarget & HTMLInputElement }); - } - }} - /> - ); -}; - -export default MuiInputTransition; diff --git a/libs/react-components/src/community/components/form/pickers/timepicker/timepicker.stories.tsx b/libs/react-components/src/community/components/form/pickers/timepicker/timepicker.stories.tsx deleted file mode 100644 index 65872bd71..000000000 --- a/libs/react-components/src/community/components/form/pickers/timepicker/timepicker.stories.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import dayjs, { Dayjs } from 'dayjs'; -import React from 'react'; - -import { Col, Row } from '../../../../../tedi/components/layout/grid'; -import Button from '../../../button/button'; -import TimePicker, { TimePickerProps } from './timepicker'; - -const meta: Meta<typeof TimePicker> = { - component: TimePicker, - title: 'Community/Form/Pickers/TimePicker', -}; - -export default meta; -type Story = StoryObj<typeof TimePicker>; - -const Template: StoryFn<TimePickerProps> = (args) => <TimePicker {...args} label="Choose time" />; -const numberOne = 1; // https://github.com/storybookjs/storybook/issues/12208 - -export const Default: Story = { - render: Template, - - args: { - id: 'timepicker-default', - defaultValue: dayjs().set('hour', 10).set('minute', 30), - }, -}; - -export const Disabled: Story = { - render: Template, - - args: { - id: 'timepicker-disabled', - disabled: true, - }, -}; - -export const ReadOnly: Story = { - render: Template, - - args: { - id: 'timepicker-read-only', - readOnly: true, - defaultValue: dayjs().set('hour', 10).set('minute', 30), - }, -}; - -/** - * Time selected has to be over 12:00 - */ -export const MinTime: Story = { - render: Template, - - args: { - id: 'timepicker-min-time', - minTime: dayjs().set('h', 12).set('minute', 0), - }, -}; - -/** - * Time selected has to be below 12:00 - */ -export const MaxTime: Story = { - render: Template, - - args: { - id: 'timepicker-max-time', - maxTime: dayjs().set('h', 11).set('minute', 59), - }, -}; - -export const WithCustomFormat: Story = { - render: Template, - - args: { - id: 'timepicker-custom-format', - inputFormat: 'HH-mm', - }, -}; - -export const WithCustomPlaceholder: Story = { - render: Template, - - args: { - id: 'timepicker-custom-placeholder', - placeholder: 'tt:mm', - }, -}; - -export const WithCustomViews: Story = { - render: Template, - - args: { - id: 'timepicker-custom-views', - views: ['hours', 'minutes', 'seconds'], - inputFormat: 'HH:mm:ss', - }, -}; - -export const WithErrorHelper: Story = { - render: Template, - - args: { - id: 'timepicker-error-helper', - defaultValue: dayjs().set('hour', 10).add(numberOne, 'minute'), - helper: { text: 'Time can not be in the future!', type: 'error' }, - maxTime: dayjs(), - }, -}; - -export const Controlled = () => { - const [time, setTime] = React.useState<Dayjs | null>(dayjs().set('hour', 10)); - - return ( - <> - <Row> - <Col width="auto"> - <Button visualType="link" onClick={() => setTime(null)}> - clear - </Button> - </Col> - <Col width="auto"> - <Button visualType="link" onClick={() => setTime(dayjs().set('hour', 10))}> - current - </Button> - </Col> - <Col width="auto"> - <Button visualType="link" onClick={() => setTime(dayjs().set('hour', 10).add(numberOne, 'hour'))}> - next hour - </Button> - </Col> - <Col width="auto"> - <Button visualType="link" onClick={() => setTime(dayjs().set('hour', 10).add(numberOne, 'minute'))}> - next minute - </Button> - </Col> - <Col width="auto"> - <Button visualType="link" onClick={() => setTime(dayjs().set('hour', 10).set('hours', 0).set('minute', 0))}> - 00:00 - </Button> - </Col> - </Row> - <TimePicker label="Choose time" id="timepicker-controlled" value={time} onChange={setTime} /> - <p>Current time is: {time?.format('HH:mm')}</p> - </> - ); -}; diff --git a/libs/react-components/src/community/components/form/pickers/timepicker/timepicker.tsx b/libs/react-components/src/community/components/form/pickers/timepicker/timepicker.tsx deleted file mode 100644 index 33cd7afce..000000000 --- a/libs/react-components/src/community/components/form/pickers/timepicker/timepicker.tsx +++ /dev/null @@ -1,157 +0,0 @@ -import { ClockPickerView, TimePicker as MuiTimePicker } from '@mui/x-date-pickers'; -import { TimeValidationError } from '@mui/x-date-pickers/internals/hooks/validation/useTimeValidation'; -import type { Dayjs } from 'dayjs'; -import React from 'react'; - -import { TextFieldProps } from '../../../../../tedi/components/form/textfield/textfield'; -import MuiInputTransition from '../mui-input-transition/mui-input-transition'; - -export type TimePickerValue = Dayjs | null; - -export interface TimePickerProps extends Omit<TextFieldProps, 'defaultValue' | 'value' | 'onChange'> { - /** - * TimePicker initial value. Accepts a dayjs date object. - */ - defaultValue?: TimePickerValue; - /** - * Currently selected value. Accepts a dayjs date object. - * Used only if onChange is also defined - */ - value?: TimePickerValue; - /** - * onChange handler. - * Triggers each time when new value is selected from TimePicker. - */ - onChange?: (value: TimePickerValue) => void; - /** - * Format string. - * @default HH:mm - */ - inputFormat?: string; - /** - * Mobile picker title, displaying in the toolbar. Default from LabelProvider - */ - toolbarTitle?: string; - /** - * Max time acceptable time. For input validation date part of passed object will be ignored. - */ - maxTime?: TimePickerValue; - /** - * Min time acceptable time. For input validation date part of passed object will be ignored. - */ - minTime?: TimePickerValue; - /** - * Step over minutes. - * @default 1 - */ - minutesStep?: number; - /** - * Callback that fired when input value or new value prop validation returns new validation error (or value is valid after error). - * In case of validation error detected reason prop return non-null value and TextField must be displayed in error state. - * This can be used to render appropriate form error. - * Read the guide about form integration and error displaying (https://next.material-ui-pickers.dev/guides/forms). - */ - onError?: (reason: TimeValidationError, value: TimePickerValue) => void; - /** - * Dynamically check if time is disabled or not. If returns false appropriate time point will ot be acceptable. - * timeValue: The value to check. - * clockType: The clock type of the timeValue. - * returns (boolean): Returns true if the time should be disabled - */ - shouldDisableTime?: (timeValue: number, clockType: ClockPickerView) => boolean; - /** - * Array of views to show. - * @default ['hours', 'minutes'] - */ - views?: Array<'hours' | 'minutes' | 'seconds'>; - /** - * 12h/24h view for hour selection clock. - * @default false - */ - ampm?: boolean; - /** - * Callback fired when the popup requests to be closed. - */ - onClose?: () => void; -} - -export const TimePicker = (props: TimePickerProps): JSX.Element => { - const { - defaultValue, - onChange, - value, - disabled, - readOnly, - inputFormat = 'HH:mm', - toolbarTitle, - maxTime, - minTime, - minutesStep = 1, - onError, - shouldDisableTime, - views = ['hours', 'minutes'], - ampm = false, - onClose, - ...rest - } = props; - const [innerTime, setInnerTime] = React.useState<TimePickerValue>(defaultValue || null); - const [open, setOpen] = React.useState(false); - - const getValue = React.useMemo((): TimePickerValue => { - return onChange && typeof value !== 'undefined' ? value : innerTime; - }, [innerTime, onChange, value]); - - const onChangeHandler = (time: TimePickerValue): void => { - if (!time?.isValid() && time !== null) { - return; - } - - if (typeof value === 'undefined') { - setInnerTime(time); - } - - onChange?.(time); - }; - - const onCloseHandler = () => { - setOpen(false); - onClose?.(); - }; - - return ( - <MuiTimePicker<TimePickerValue> - data-name="timepicker" - value={getValue} - onChange={onChangeHandler} - open={open} - onOpen={() => setOpen(true)} - onClose={onCloseHandler} - renderInput={(props) => ( - <MuiInputTransition - muiTextfieldProps={props} - inputFormat={inputFormat} - onChangeHandler={onChangeHandler} - textfieldProps={{ - ...rest, - onClear: () => onChangeHandler(null), - onIconClick: !readOnly ? () => setOpen((open) => !open) : undefined, - }} - type="time" - /> - )} - disabled={disabled} - readOnly={readOnly} - inputFormat={inputFormat} - toolbarTitle={toolbarTitle} - maxTime={maxTime} - minTime={minTime} - minutesStep={minutesStep} - onError={onError} - shouldDisableTime={shouldDisableTime} - views={views} - ampm={ampm} - /> - ); -}; - -export default TimePicker; diff --git a/libs/react-components/src/community/components/form/radio/radio.module.scss b/libs/react-components/src/community/components/form/radio/radio.module.scss deleted file mode 100644 index c6d74bc09..000000000 --- a/libs/react-components/src/community/components/form/radio/radio.module.scss +++ /dev/null @@ -1,72 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.radio { - position: relative; - display: inline; - - @include mixins.print-grayscale; - - &:hover:not(.radio--disabled) { - cursor: pointer; - } -} - -.radio__input { - @include mixins.visually-hidden; -} - -.radio__indicator { - position: relative; - display: block; - min-width: 1.125rem; - height: 1.125rem; - margin-top: 0.125rem; - margin-right: 0.625rem; - background-color: var(--color-bg-default); - border: 1px solid var(--color-border-contrast); - border-radius: 50%; - transition: 150ms ease; - transition-property: border-color; - - .radio__input:not(:disabled) + &--hover, - .radio__input:hover:not(:disabled) + &, - .radio__input:not(:disabled) + &:hover, - .radio__input:focus:not(:disabled) + & { - cursor: pointer; - border: 1px solid var(--color-primary-main); - outline: var(--color-primary-main) solid 1px; - } - - &::after { - position: absolute; - top: 50%; - left: 50%; - width: 0.75rem; - height: 0.75rem; - content: ''; - background: var(--color-transparent); - border: 1px solid var(--color-transparent); - border-radius: 50%; - transition: 150ms ease; - transition-property: background-color, border-color; - transform: translate(-50%, -50%); - } - - [type='radio']:checked + &::after { - background: var(--color-primary-main); - border-color: var(--color-primary-main); - } - - .radio__input:disabled + & { - background-color: var(--color-bg-disabled); - } -} - -.radio__tooltip-icon { - margin-left: 0.25rem; -} - -.radio__extra-content { - padding-top: 0.125rem; - padding-left: 1.75rem; -} diff --git a/libs/react-components/src/community/components/form/radio/radio.stories.tsx b/libs/react-components/src/community/components/form/radio/radio.stories.tsx deleted file mode 100644 index e2a0bb659..000000000 --- a/libs/react-components/src/community/components/form/radio/radio.stories.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import React from 'react'; - -import { Col, Row } from '../../../../tedi/components/layout/grid'; -import Text from '../../typography/text/text'; -import Radio, { RadioProps } from './radio'; - -/** - * Most of the time you should use `ChoiceGroup` component. But we also export a single `Radio` component for custom use cases. - */ -const meta: Meta<typeof Radio> = { - component: Radio, - title: 'Community/Form/Radio', - parameters: { - status: { - type: ['deprecated', 'ExistsInTediReady'], - }, - }, -}; - -export default meta; -type Story = StoryObj<typeof Radio>; - -const Template: StoryFn<RadioProps> = (args) => <Radio {...args} label="Select me" value="default" />; - -export const Default: Story = { - render: Template, - - args: { - id: 'default-radio', - name: 'default-radio', - defaultChecked: true, - }, -}; - -export const HiddenLabel: Story = { - render: Template, - - args: { - id: 'hidden-label-radio', - name: 'hidden-label-radio', - hideLabel: true, - }, -}; - -export const DisabledState: Story = { - render: Template, - - args: { - id: 'disabled-radio', - name: 'disabled-radio', - disabled: true, - }, -}; - -export const WithExtraContent: Story = { - render: Template, - - args: { - id: 'extra-content-radio', - name: 'extra-content-radio', - extraContent: ( - <Text color="muted" element="span"> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis scelerisque quis augue sit amet semper. Donec - porttitor mauris neque, quis feugiat erat malesuada ac. Cras vel mauris a est pretium egestas. - </Text> - ), - }, -}; - -export const HoverState: Story = { - render: Template, - - args: { - id: 'hover-check', - name: 'hover-check', - hover: true, - }, -}; - -export const WithTooltip: Story = { - render: Template, - - args: { - id: 'tooltip-radio', - name: 'tooltip-radio', - tooltip: 'This is a tooltip', - }, -}; - -export const WithTooltipAndExtraContent: Story = { - render: Template, - - args: { - id: 'tooltip-extra-content-radio', - name: 'tooltip-extra-content-radio', - extraContent: ( - <Text color="muted" element="span"> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis scelerisque quis augue sit amet semper. Donec - porttitor mauris neque, quis feugiat erat malesuada ac. Cras vel mauris a est pretium egestas. - </Text> - ), - tooltip: 'This is a tooltip', - }, -}; - -export const WithLongTitleAndTooltipAndExtraContent: Story = { - args: { - id: 'long-title-tooltip-extra-content-radio', - name: 'long-title-tooltip-extra-content-radio', - label: - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin varius, sem blandit sodales tincidunt, orci elit ornare ex, eu ultrices diam turpis id nisl. Sed sollicitudin auctor nunc. Aliquam a arcu in sem bibendum laoreet non eu nunc.', - extraContent: ( - <Text color="muted" element="span"> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis scelerisque quis augue sit amet semper. Donec - porttitor mauris neque, quis feugiat erat malesuada ac. Cras vel mauris a est pretium egestas. - </Text> - ), - tooltip: 'This is a tooltip', - }, -}; - -export const Controlled = () => { - const [checked, setChecked] = React.useState<boolean>(false); - - return ( - <Radio - id="controlled-check" - label="Select me" - name="controlled-check" - value="controlled" - checked={checked} - onChange={(value, checked) => setChecked(checked)} - /> - ); -}; - -export const RadioWithLongTitle = () => { - return ( - <Row> - <Col width={6}> - <Radio - id="radio-long-title" - label="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin varius, sem blandit sodales tincidunt, orci elit ornare ex, eu ultrices diam turpis id nisl. Sed sollicitudin auctor nunc. Aliquam a arcu in sem bibendum laoreet non eu nunc." - name="radio-long-title" - value="radio" - /> - </Col> - </Row> - ); -}; diff --git a/libs/react-components/src/community/components/form/radio/radio.tsx b/libs/react-components/src/community/components/form/radio/radio.tsx deleted file mode 100644 index f651f5f9f..000000000 --- a/libs/react-components/src/community/components/form/radio/radio.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Icon } from '../../../../tedi/components/base/icon/icon'; -import { Col, Row } from '../../../../tedi/components/layout/grid'; -import { Tooltip, TooltipProvider, TooltipTrigger } from '../../tooltip'; -import { ChoiceInputProps } from '../choice-input.types'; -import styles from './radio.module.scss'; - -export type RadioProps = ChoiceInputProps; - -export const Radio = (props: RadioProps): JSX.Element => { - const { - id, - label, - value, - className, - disabled, - onChange, - hideLabel, - extraContent, - checked, - defaultChecked, - hover, - name, - tooltip, - ...rest - } = props; - const [innerChecked, setInnerChecked] = React.useState<boolean>(defaultChecked || false); - const labelRef = React.useRef<HTMLLabelElement>(null); - - const getChecked = React.useMemo((): boolean => { - return onChange && typeof checked !== 'undefined' ? checked : innerChecked; - }, [onChange, innerChecked, checked]); - - const onChangeHandler = (event: React.ChangeEvent<HTMLInputElement>): void => { - if (typeof checked === 'undefined') { - setInnerChecked(event?.target.checked); - } - onChange?.(value, event?.target.checked); - }; - - const LabelBEM = cn(styles['radio'], { [styles['radio--disabled']]: disabled }); - - return ( - <div data-name="radio" className={className} {...rest}> - <Row gutter={0}> - <Col width="auto"> - <input - id={id} - value={value} - name={name} - type="radio" - disabled={disabled} - checked={getChecked} - onChange={onChangeHandler} - className={styles['radio__input']} - /> - <div - aria-hidden="true" - onClick={() => labelRef.current?.click()} // Click on the indicator itself should still toggle state - className={cn(styles['radio__indicator'], { [styles['radio__indicator--hover']]: hover })} - /> - </Col> - <Col> - <label ref={labelRef} className={LabelBEM} htmlFor={id}> - <span className={cn({ 'visually-hidden': hideLabel })}>{label}</span> - {tooltip && ( - <TooltipProvider> - <TooltipTrigger> - <Icon - name="info" - color="brand" - size={16} - display="inline" - className={styles['radio__tooltip-icon']} - /> - </TooltipTrigger> - <Tooltip>{tooltip}</Tooltip> - </TooltipProvider> - )} - </label> - </Col> - </Row> - - {extraContent && <div className={styles['radio__extra-content']}>{extraContent}</div>} - </div> - ); -}; - -export default Radio; diff --git a/libs/react-components/src/community/components/form/select/examples/async.tsx b/libs/react-components/src/community/components/form/select/examples/async.tsx deleted file mode 100644 index d389e82e2..000000000 --- a/libs/react-components/src/community/components/form/select/examples/async.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { StoryFn } from '@storybook/react'; -import React from 'react'; - -import Select, { ISelectOption } from '../select'; - -const colourOptions: ISelectOption[] = [ - { value: 'ocean', label: 'Ocean' }, - { value: 'blue', label: 'Blue', isDisabled: true }, - { value: 'purple', label: 'Purple' }, - { value: 'red', label: 'Red' }, - { value: 'orange', label: 'Orange' }, - { value: 'yellow', label: 'Yellow' }, - { value: 'green', label: 'Green' }, - { value: 'forest', label: 'Forest' }, - { value: 'slate', label: 'Slate' }, - { value: 'silver', label: 'Silver' }, -]; - -const filterColors = (inputValue: string) => { - return colourOptions.filter((i) => { - if (typeof i.label === 'string') { - return i.label.toLowerCase().includes(inputValue.toLowerCase()); - } - return; - }); -}; - -const loadOptions = (inputValue: string, callback: (options: ISelectOption[]) => void) => { - setTimeout(() => { - console.log(inputValue); - callback(filterColors(inputValue)); - }, 1000); -}; - -export const AsyncSelectTemplate: StoryFn<typeof Select> = (args) => { - const [inputValue, setInputValue] = React.useState(''); - - const handleInputChange = (newValue: string) => { - const newInputValue = newValue.replace(/\W/g, ''); - setInputValue(newInputValue); - return newInputValue; - }; - - return ( - <div> - <p>value: {inputValue}</p> - <Select {...args} onInputChange={handleInputChange} loadOptions={loadOptions} /> - </div> - ); -}; diff --git a/libs/react-components/src/community/components/form/select/examples/custom-option.tsx b/libs/react-components/src/community/components/form/select/examples/custom-option.tsx deleted file mode 100644 index f71967f06..000000000 --- a/libs/react-components/src/community/components/form/select/examples/custom-option.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { StoryFn } from '@storybook/react'; -import { MenuListProps, OptionProps } from 'react-select'; - -import { Col, Row } from '../../../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../../../tedi/components/layout/vertical-spacing'; -import Button from '../../../button/button'; -import Tag from '../../../tag/tag'; -import Text from '../../../typography/text/text'; -import Select, { ISelectOption } from '../select'; - -interface AppealData { - id: string; - name: string; - age: number; - personalCode: string; - aadress: string; - type?: 'L' | 'J'; -} - -const searchResults: AppealData[] = [ - { - id: '1', - name: 'Triinu Liis Kassisaba', - age: 9, - personalCode: '499050539124', - aadress: 'Pihlaka tn 32A, 11213 Nõmme, Tallinn, Harju maakond', - type: 'L', - }, - { - id: '2', - name: 'Triin Lamp', - age: 16, - personalCode: '499050539123', - aadress: 'Pihlaka tn 11A, 11213 Nõmme, Tallinn, Harju maakond', - type: 'L', - }, - { - id: '3', - name: 'Triin Kass', - age: 12, - personalCode: '499050539124', - aadress: 'Pihlaka tn 23A, 11213 Nõmme, Tallinn, Harju maakond', - type: 'J', - }, - { - id: '4', - name: 'Triin Marie Metsaots', - age: 22, - personalCode: '499050539124', - aadress: 'Pihlaka tn 23A, 11213 Nõmme, Tallinn, Harju maakond', - }, - { - id: '5', - name: 'Triin Paar', - age: 3, - personalCode: '499050539111', - aadress: 'Pihlaka tn 23A, 11213 Nõmme, Tartu, Tartu maakond', - }, - { - id: '6', - name: 'Triin Paar', - age: 3, - personalCode: '499050539111', - aadress: 'Pihlaka tn 23A, 11213 Nõmme, Tartu, Tartu maakond', - }, - { - id: '7', - name: 'Triin Paar', - age: 3, - personalCode: '499050539111', - aadress: 'Pihlaka tn 23A, 11213 Nõmme, Tartu, Tartu maakond', - }, -]; - -export const CustomOptionSelectTemplate: StoryFn<typeof Select> = (args) => { - const selectOptions: ISelectOption[] = searchResults.map((option) => ({ - label: option.name, - value: option.id, - customData: option, - })); - - return ( - <Select - {...args} - options={selectOptions} - renderOption={(props) => <CustomOption {...props} />} - renderMessageListFooter={(props) => <CustomMessageListFooter {...props} />} - /> - ); -}; - -const CustomOption = (props: OptionProps<ISelectOption, boolean>): JSX.Element => { - const { aadress, age, name, personalCode, type }: AppealData = props.data.customData as AppealData; - - return ( - <Row gutterX={2}> - {type && ( - <Col width="auto"> - <Tag type="secondary" color={type === 'L' ? 'warning' : 'important'}> - {type} - </Tag> - </Col> - )} - <Col> - <p className="text-primary"> - <b>{name}</b> · {`${age}a`} · {personalCode} - </p> - <Text color="muted" modifiers="small"> - {aadress} - </Text> - </Col> - </Row> - ); -}; - -const CustomMessageListFooter = (props: MenuListProps<ISelectOption, boolean>): JSX.Element => { - return ( - <VerticalSpacing className="text-center" size={0.75}> - <Row justifyContent="center" gutterX={2}> - <Col width="auto"> - <Button visualType="secondary">Isik teadmata</Button> - </Col> - <Col width="auto"> - <Button visualType="secondary">Puudub Eesti isikukood</Button> - </Col> - </Row> - <Text color="muted" modifiers="small"> - Rahvastikuregistri andmete päringuks sisesta isikukood täismahus. - </Text> - </VerticalSpacing> - ); -}; diff --git a/libs/react-components/src/community/components/form/select/examples/editable.tsx b/libs/react-components/src/community/components/form/select/examples/editable.tsx deleted file mode 100644 index db0e9acb7..000000000 --- a/libs/react-components/src/community/components/form/select/examples/editable.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { StoryFn } from '@storybook/react'; -import React from 'react'; -import { InputActionMeta } from 'react-select'; - -import Select, { ISelectOption, TSelectValue } from '../select'; - -const colourOptions: ISelectOption[] = [ - { value: 'ocean', label: 'Ocean' }, - { value: 'blue', label: 'Blue', isDisabled: true }, - { value: 'purple', label: 'Purple' }, - { value: 'red', label: 'Red' }, - { value: 'orange', label: 'Orange' }, - { value: 'yellow', label: 'Yellow' }, - { value: 'green', label: 'Green' }, - { value: 'forest', label: 'Forest' }, - { value: 'slate', label: 'Slate' }, - { value: 'silver', label: 'Silver' }, -]; - -export const EditableSelectTemplate: StoryFn<typeof Select> = (args) => { - const [inputValue, setInputValue] = React.useState<string>(''); - const [value, setValue] = React.useState<TSelectValue>(null); - - const handleInputChange = (newValue: string, { action }: InputActionMeta) => { - if (action === 'input-change') setInputValue(newValue); - return newValue; - }; - - const handleOnChange = (value: TSelectValue) => { - setValue(value); - setInputValue(value ? ((value as ISelectOption).label as string) : ''); - }; - - return ( - <div> - <p>value: {inputValue}</p> - <Select - {...args} - value={value} - inputValue={inputValue} - onInputChange={handleInputChange} - onChange={handleOnChange} - inputIsHidden={false} - options={colourOptions} - /> - </div> - ); -}; diff --git a/libs/react-components/src/community/components/form/select/examples/multiple-handled.tsx b/libs/react-components/src/community/components/form/select/examples/multiple-handled.tsx deleted file mode 100644 index 4377c5d6a..000000000 --- a/libs/react-components/src/community/components/form/select/examples/multiple-handled.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { StoryFn } from '@storybook/react'; -import React from 'react'; - -import { Col, Row } from '../../../../../tedi/components/layout/grid'; -import Select, { ISelectOption, TSelectValue } from '../select'; - -export const colourOptions: ISelectOption[] = [ - { value: 'ocean', label: 'Ocean' }, - { value: 'blue', label: 'Blue', isDisabled: true }, - { value: 'purple', label: 'Purple' }, - { value: 'red', label: 'Red' }, - { value: 'orange', label: 'Orange' }, - { value: 'yellow', label: 'Yellow' }, - { value: 'green', label: 'Green' }, - { value: 'forest', label: 'Forest' }, - { value: 'slate', label: 'Slate' }, - { value: 'silver', label: 'Silver' }, -]; - -const defaultOptions: TSelectValue = [colourOptions[0], colourOptions[2]]; - -export const MultipleHandledTemplate: StoryFn<typeof Select> = (args) => { - const [inputValue, setInputValue] = React.useState<TSelectValue>(args.defaultValue ?? defaultOptions); - - const handleInputChange = (newValue: TSelectValue) => { - setInputValue(newValue); - return inputValue; - }; - - return ( - <Row> - <Col width={4}> - <Select options={colourOptions} onChange={(value) => handleInputChange(value)} value={inputValue} {...args} /> - </Col> - </Row> - ); -}; diff --git a/libs/react-components/src/community/components/form/select/select.module.scss b/libs/react-components/src/community/components/form/select/select.module.scss deleted file mode 100644 index 36efeb01c..000000000 --- a/libs/react-components/src/community/components/form/select/select.module.scss +++ /dev/null @@ -1,181 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -$input-height-small: 2rem; - -div.select__control { - border: 1px solid var(--color-border-contrast); - - @include mixins.print-grayscale; -} - -.select--invalid .select__control { - border-color: var(--color-important-active); - - &.select__control--focused { - box-shadow: 0 0 0 1px var(--color-important-active); - } -} - -.select__arrow { - // -1px to account for border on top and bottom, making input height 40px - padding: calc(0.5rem - 1px) 2rem calc(0.5rem - 1px) 0; - - .select__control--focused & { - color: var(--color-primary-active); - } - - .select--invalid .select__control--focused & { - color: var(--color-important-active); - } -} - -div.select__menu-portal { - z-index: var(--z-index-dropdown); -} - -div .select__menu { - margin: 1px 0 0; - overflow: hidden; - border-radius: var(--border-radius-default); - - @include mixins.print-grayscale; -} - -.select__menu .select__menu-list { - padding: 0; -} - -.select__menu .select__menu-list-inner { - padding: 0; -} - -.select__menu-list-footer { - padding: 1rem; - border-top: 1px solid var(--color-border-default); -} - -.select__menu .select__option { - font-size: 0.875rem; - color: var(--color-text-default); - cursor: pointer; - background-color: var(--color-bg-default); - - &--focused { - background-color: var(--color-bg-subtle); - } - - &:active, - &--selected { - color: var(--color-primary-main); - background-color: var(--color-primary-highlight); - } - - &--disabled { - color: var(--color-text-disabled); - cursor: default; - background-color: var(--color-bg-disabled); - } -} - -.select--small { - & .select__control { - height: $input-height-small; - min-height: $input-height-small; - font-size: 0.875rem; - } - - & .select__input { - padding-top: 0; - padding-bottom: 0; - } - - & .select__arrow { - padding: 0; - } -} - -div.select__multi-value-item { - display: flex; - flex-shrink: 0; - align-items: baseline; -} - -.select__checkbox { - pointer-events: none; -} - -.select .select__group { - padding-top: 0.25rem; - padding-bottom: 0.25rem; - - &:first-child { - padding-top: 0; - } - - &:last-child { - padding-bottom: 0; - } -} - -.select .select__group-heading { - padding: 0.5rem 0.75rem; - margin-bottom: 0; -} - -.select__multi-value-clear { - margin: -0.125rem -0.25rem -0.125rem 0; -} - -:global { - .select__value-container--is-multi { - gap: 0.25rem; - } - - .select__value-container .select__placeholder { - color: var(--color-text-subtle); - } - - .select__value-container--is-multi .select__placeholder { - position: absolute; - left: 0.5rem; - } - - .select__value-container:not(.select__value-container--is-multi) .select__placeholder { - position: relative; - left: 0; - } -} - -.select--tags-row { - :global .select__control > .select__value-container--is-multi { - display: flex; - flex-wrap: nowrap; - - &::after { - position: absolute; - inset: 0; - pointer-events: none; - content: ''; - box-shadow: inset 0.5rem 0 0.25rem -0.25rem var(--color-white); - } - } - - &.select--searchable :global .select__control > .select__value-container--is-multi { - justify-content: flex-end; - } - - :global .select__control--is-focused .select__input { - min-width: 5rem !important; // no other way to override style - } -} - -.select--tags-stack { - :global .select__input-container { - grid-template-columns: 0 min-content; - margin: 0; - } - - :global .select__placeholder { - left: 0; - } -} diff --git a/libs/react-components/src/community/components/form/select/select.stories.tsx b/libs/react-components/src/community/components/form/select/select.stories.tsx deleted file mode 100644 index 700a9312b..000000000 --- a/libs/react-components/src/community/components/form/select/select.stories.tsx +++ /dev/null @@ -1,219 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; -import { OptionsOrGroups } from 'react-select'; - -import { AsyncSelectTemplate } from './examples/async'; -import { CustomOptionSelectTemplate } from './examples/custom-option'; -import { EditableSelectTemplate } from './examples/editable'; -import { colourOptions, MultipleHandledTemplate } from './examples/multiple-handled'; -import Select, { IGroupedOptions, ISelectOption } from './select'; - -const meta: Meta<typeof Select> = { - component: Select, - title: 'Community/Form/Select', -}; - -export default meta; -type Story = StoryObj<typeof Select>; - -const options = [ - { value: 'option-1', label: 'Option 1' }, - { value: 'option-2', label: 'Option 2', isDisabled: true }, - { value: 'option-3', label: 'Option 3' }, - { value: 'option-4', label: 'Option 4' }, -]; - -const groupedOptions: OptionsOrGroups<ISelectOption, IGroupedOptions<ISelectOption>> = [ - { - label: 'GROUP 1', - options: [ - { value: 'option-2', label: 'Option 2' }, - { value: 'option-3', label: 'Option 3' }, - ], - }, - { - label: 'GROUP 2', - options: [ - { value: 'option-4', label: 'Option 4' }, - { value: 'option-5', label: 'Option 5' }, - ], - }, -]; - -const groupedOptions2: OptionsOrGroups<ISelectOption, IGroupedOptions<ISelectOption>> = [ - { - label: 'Group 1', - options: [ - { value: 'option-1', label: 'Option 1' }, - { value: 'option-2', label: 'Option 2' }, - ], - }, - { - label: 'Group 2', - options: [ - { value: 'option-3', label: 'Option 3' }, - { value: 'option-4', label: 'Option 4' }, - ], - }, - { - label: 'Group 3 - Separately set styles have priority', - text: { - modifiers: ['small'], - color: 'inverted', - }, - backgroundColor: 'primary-main', - options: [ - { value: 'option-5', label: 'Option 5' }, - { value: 'option-6', label: 'Option 6' }, - ], - }, -]; - -export const Default: Story = { - args: { - id: 'example-1', - label: 'Label', - defaultValue: options[2], - options: options, - }, -}; - -export const Small: Story = { - args: { - ...Default.args, - id: 'example-2', - size: 'small', - }, -}; - -export const MultipleSmall: Story = { - args: { - ...Default.args, - id: 'example-multiple-small', - size: 'small', - multiple: true, - defaultValue: undefined, - placeholder: 'Placeholder', - }, -}; - -export const MultipleClosesOnSelect: Story = { - args: { - ...Default.args, - id: 'example-multiple-closes-on-select', - multiple: true, - closeMenuOnSelect: true, - blurInputOnSelect: true, - defaultValue: undefined, - placeholder: 'Placeholder', - }, -}; - -export const ClearIndicatorVisible: Story = { - args: { - ...Default.args, - isClearIndicatorVisible: true, - }, -}; - -export const MultipleHandled: Story = { - render: MultipleHandledTemplate, - args: { - id: 'multiple-handled-example', - label: 'Multiple Select', - multiple: true, - }, -}; - -export const StackingTags: Story = { - render: MultipleHandledTemplate, - args: { - id: 'stacking-tags-example', - label: 'Stacking Tags', - defaultValue: colourOptions.filter((option) => !option.isDisabled), - multiple: true, - tagsDirection: 'stack', - }, -}; - -export const RemovableTags: Story = { - render: MultipleHandledTemplate, - args: { - id: 'removable-tags-example', - label: 'Removable Tags', - defaultValue: colourOptions.filter((option) => !option.isDisabled), - multiple: true, - isTagRemovable: true, - tagsDirection: 'stack', - }, -}; - -export const CustomOptionSelect: Story = { - render: CustomOptionSelectTemplate, - args: { - label: 'Name or personal code', - id: 'appeal-select', - }, -}; - -export const AsyncSelect: Story = { - render: AsyncSelectTemplate, - args: { - id: 'async-example', - label: 'Async label', - async: true, - }, -}; - -export const EditableSelect: Story = { - render: EditableSelectTemplate, - args: { - id: 'editable-example', - label: 'Editable label', - }, -}; - -export const SelectWithGroupedOptions: Story = { - args: { - id: 'grouped-options-example', - label: 'Grouped options label', - options: groupedOptions, - }, -}; - -/** - * All group headings can be styled at once with `optionGroupHeadingText` and `optionGroupBackgroundColor`.<br/> - * But they can be styled separately also using `text` and `backgroundColor` inside `options` prop.<br/> - * If both ways are used at the same time, priority is given to separately set styles. - */ -export const SelectWithStyledGroupedOptions: Story = { - args: { - id: 'grouped-options-example-styled', - label: 'Grouped options label', - optionGroupHeadingText: { - modifiers: ['italic'], - color: 'important', - }, - optionGroupBackgroundColor: 'important-highlight', - options: groupedOptions2, - }, -}; - -export const PlaceholderForSingleValue: Story = { - args: { - id: 'example-1', - label: 'Label', - placeholder: 'Placeholder', - options: options, - multiple: false, - }, -}; - -export const PlaceholderForMultiValue: Story = { - args: { - id: 'example-1', - label: 'Label', - placeholder: 'Placeholder', - options: options, - multiple: true, - }, -}; diff --git a/libs/react-components/src/community/components/form/select/select.tsx b/libs/react-components/src/community/components/form/select/select.tsx deleted file mode 100644 index f7cfe0aab..000000000 --- a/libs/react-components/src/community/components/form/select/select.tsx +++ /dev/null @@ -1,648 +0,0 @@ -import cn from 'classnames'; -import React, { forwardRef, ReactElement } from 'react'; -import ReactSelect, { - ClearIndicatorProps, - components as ReactSelectComponents, - ControlProps, - GroupBase, - GroupHeadingProps, - GroupProps, - InputActionMeta, - InputProps, - MenuListProps, - MenuProps, - MultiValueProps, - MultiValueRemoveProps, - OnChangeValue, - OptionProps, - OptionsOrGroups, - PlaceholderProps, - SelectComponentsConfig, - SelectInstance, -} from 'react-select'; -import AsyncSelect from 'react-select/async'; -import { MenuPortalProps } from 'react-select/dist/declarations/src/components/Menu'; - -import { FeedbackText, FeedbackTextProps } from '../../../../tedi/components/form/feedback-text/feedback-text'; -import { FormLabel, FormLabelProps } from '../../../../tedi/components/form/form-label/form-label'; -import { useLabels } from '../../../../tedi/providers/label-provider'; -import { getBackgroundColorClass } from '../../../helpers'; -import { IntentionalAny } from '../../../types'; -import Button from '../../button/button'; -import { TColorsBackground } from '../../commonTypes'; -import { Icon } from '../../icon/icon'; -import Tag from '../../tag/tag'; -import Text, { TextProps } from '../../typography/text/text'; -import Check from '../check/check'; -import styles from './select.module.scss'; - -/** - * Because of the next problem, inputIsHidden has to be used from select custom props. - * For typescript they need to be declared in module - * https://github.com/JedWatson/react-select/issues/4804#issuecomment-927223471 - */ -declare module 'react-select/dist/declarations/src/Select' { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - export interface Props<Option, IsMulti extends boolean, Group extends GroupBase<Option>> { - inputIsHidden?: boolean; - } -} - -/** - * Outside of component because: https://github.com/JedWatson/react-select/issues/2810#issuecomment-569117980 - * If declared inside component, async Select loses focus after fetch - */ -const CustomControl = (props: ControlProps<ISelectOption, boolean>): JSX.Element => { - const CustomControlBEM = cn(styles['select__control'], props.className, { - [styles['select__control--focused']]: props.isFocused, - }); - - return <ReactSelectComponents.Control {...props} className={CustomControlBEM} />; -}; -const CustomInput = (props: InputProps<ISelectOption, boolean>): JSX.Element => ( - <ReactSelectComponents.Input - {...props} - className={cn(props.className, styles['select__input'])} - isHidden={props.selectProps.inputIsHidden !== undefined ? props.selectProps.inputIsHidden : props.isHidden} - /> -); - -const Menu = (props: MenuProps<ISelectOption, boolean>): JSX.Element => ( - <ReactSelectComponents.Menu {...props} className={cn(props.className, styles['select__menu'])} /> -); - -const MenuPortal = (props: MenuPortalProps<ISelectOption, boolean, IGroupedOptions<ISelectOption>>): JSX.Element => ( - <ReactSelectComponents.MenuPortal {...props} className={cn(props.className, styles['select__menu-portal'])} /> -); - -export interface SelectProps extends FormLabelProps { - /** - * ID attribute. - */ - id: string; - /** - * Options or grouped options for select. - */ - options?: OptionsOrGroups<ISelectOption, IGroupedOptions<ISelectOption>>; - /** - * Default options for async select. Do not use without async select. - */ - defaultOptions?: OptionsOrGroups<ISelectOption, IGroupedOptions<ISelectOption>> | boolean; - /** - * select field placeholder. - */ - placeholder?: string; - /** - * Additional classes. - */ - className?: string; - /** - * What icon to use for dropdown - * @default arrow_drop_down - */ - iconName?: 'arrow_drop_down' | 'search'; - /** - * onChange callback handler. - */ - onChange?: (value: TSelectValue) => void; - /** - * onChange callback handler when input changes on async/live select. - */ - onInputChange?: (value: string, actionMeta: InputActionMeta) => void; - /** - * Search input value. - */ - inputValue?: string; - /** - * onChange callback handler when input changes on async/live select. - */ - loadOptions?: ( - inputValue: string, - callback: (options: OptionsOrGroups<ISelectOption, IGroupedOptions<ISelectOption>>) => void - ) => void; - /** - * Is the select in a state of loading (async) - */ - isLoading?: boolean; - /** - * Default value of select. - */ - defaultValue?: TSelectValue; - /** - * Value of select to control select value from outside of component. - * Should be an actual JS reference to one of the options. - * Do not use with defaultValue - */ - value?: TSelectValue; - /** - * If select is disabled. - * @default false - */ - disabled?: boolean; - /** - * Name attribute. - */ - name?: string; - /** - * If select is invalid. - */ - invalid?: boolean; - /** - * Textfield helper. - */ - helper?: FeedbackTextProps; - /** - * Size of select. - */ - size?: 'small'; - /** - * If select should load options async - * @default false - */ - async?: boolean; - /** - * Render custom option for select - */ - renderOption?: (props: OptionProps<ISelectOption, boolean>) => JSX.Element; - /** - * Text to display when there are no options. - */ - noOptionsMessage?: (obj: { inputValue: string }) => React.ReactNode; - /** - * Text to display when there are no options. - */ - loadingMessage?: (obj: { inputValue: string }) => React.ReactNode; - /** - * Custom component to display under MessageList. - */ - renderMessageListFooter?: (props: MenuListProps<ISelectOption, boolean>) => JSX.Element; - /** - * If multiple option can be selected. When true, then closeMenuOnSelect is set to false by default. - */ - multiple?: boolean; - /** - * How tags should position themselves - * @default row - */ - tagsDirection?: 'stack' | 'row'; - /** - * If menu should open when select is focused. - * @default false - */ - openMenuOnFocus?: boolean; - /** - * If menu should open when control is clicked. - * @default true - */ - openMenuOnClick?: boolean; - /** - * If pressing tab inside menu should select currently focused option. - * @default false - */ - tabSelectsValue?: boolean; - /** - * Close menu on select - * @default true. If multiple select then defaults to false. - */ - closeMenuOnSelect?: boolean; - /** - * Blur input on select. Useful for closing the keyboard on touch devices. - * (**NB!** Will move the focus back to the beginning of the page) - * @default false - */ - blurInputOnSelect?: boolean; - /** - * Auto focus - */ - autoFocus?: boolean; - /** - * If select can be clearable - * @default true - */ - isClearable?: boolean; - /** - * If select displays an indicator to clear selected values - * @default false - */ - isClearIndicatorVisible?: boolean; - /** - * If select can be searched - * @defaults true - */ - isSearchable?: boolean; - /** - * Should tags be individually removable - * @default false - */ - isTagRemovable?: boolean; - /** - * Whether the menu is open - */ - menuIsOpen?: boolean; - /** - * Handle the menu opening - */ - onMenuOpen?: () => void; - /** - * Handle the menu closing - */ - onMenuClose?: () => void; - /** - * Handle the on blur - */ - onBlur?: () => void; - /** - * Whether the input text should be always hidden or always shown. Used for editable select results - */ - inputIsHidden?: boolean; - /** - * Option group heading text modifiers. Can also be set for each option group separately inside `options` prop. - * @default { modifiers: 'small', color: 'subtle' } - */ - optionGroupHeadingText?: Pick<TextProps, 'modifiers' | 'color'>; - /** - * Option group heading background color. Can also be set for each option group separately inside `options` prop. - */ - optionGroupBackgroundColor?: TColorsBackground; - /** - * If options should be cached - * @default true - */ - cacheOptions?: boolean; -} - -export interface ISelectOption<CustomData = unknown> { - /** - * Option value. - */ - value: string; - /** - * Option label. - */ - label: string | React.ReactNode | React.ReactNode[]; - /** - * If option is disabled - */ - isDisabled?: boolean; - /** - * Custom - */ - customData?: CustomData; -} - -export interface IGroupedOptions<CustomOption = unknown> extends GroupBase<CustomOption> { - text?: Pick<TextProps, 'modifiers' | 'color'>; - backgroundColor?: TColorsBackground; -} - -export type TSelectValue<CustomData = unknown> = - | ISelectOption<CustomData> - | ReadonlyArray<ISelectOption<CustomData>> - | null; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export const Select = forwardRef<SelectInstance<ISelectOption, boolean, IGroupedOptions<ISelectOption>>, SelectProps>( - (props, ref): JSX.Element => { - const { - options, - defaultOptions, - id, - name, - iconName = 'arrow_drop_down', - label, - required, - value, - defaultValue, - tagsDirection = 'row', - onChange, - onInputChange, - inputValue, - loadOptions, - isLoading, - isTagRemovable = false, - openMenuOnFocus = false, - openMenuOnClick = true, - tabSelectsValue = false, - disabled = false, - className, - hideLabel = false, - helper, - placeholder, - invalid, - size, - async = false, - renderOption, - renderMessageListFooter, - noOptionsMessage, - loadingMessage, - multiple = false, - closeMenuOnSelect = !multiple, - blurInputOnSelect = false, - autoFocus = false, - isClearable = true, - isClearIndicatorVisible = false, - isSearchable = true, - menuIsOpen, - onMenuClose, - onMenuOpen, - onBlur, - inputIsHidden, - optionGroupHeadingText = { modifiers: 'small', color: 'subtle' }, - optionGroupBackgroundColor, - cacheOptions = true, - ...rest - } = props; - const helperId = helper ? helper?.id ?? `${id}-helper` : undefined; - const element = React.useRef<SelectInstance<ISelectOption, boolean, IGroupedOptions<ISelectOption>> | null>(null); - const { getLabel } = useLabels(); - - React.useImperativeHandle( - ref, - () => element.current as SelectInstance<ISelectOption, boolean, IGroupedOptions<ISelectOption>> - ); - - const onChangeHandler = (option: OnChangeValue<ISelectOption, boolean>) => { - onChange?.(option); - - // because on touch device screen-readers(Talkback and VoiceOver) we lose focus on the input when selecting an option - // we have to manually set it back to the input - if (!blurInputOnSelect && element.current) { - element.current.inputRef?.focus(); - } - }; - - const getDropDownIndicator = (): JSX.Element => ( - <Icon name={iconName} size={24} className={styles['select__arrow']} /> - ); - - const getPlaceholder = (props: PlaceholderProps<ISelectOption>): JSX.Element => ( - <ReactSelectComponents.Placeholder {...props} className={cn(props.className, 'inline-block')} /> - ); - - const MenuList = React.useCallback( - (props: MenuListProps<ISelectOption, boolean>) => ( - <div className={styles['select__menu-list-wrapper']}> - <ReactSelectComponents.MenuList {...props} className={cn(props.className, styles['select__menu-list'])}> - {props.children} - </ReactSelectComponents.MenuList> - {renderMessageListFooter && ( - <div className={styles['select__menu-list-footer']}>{renderMessageListFooter(props)}</div> - )} - </div> - ), - [renderMessageListFooter] - ); - - const getMultiOption = (props: OptionProps<ISelectOption, boolean>): JSX.Element => { - const OptionBEM = cn( - styles['select__option'], - { [styles['select__option--disabled']]: props.isDisabled }, - { [styles['select__option--focused']]: props.isFocused } - ); - - const { tabIndex, ...innerProps } = props.innerProps; // https://github.com/JedWatson/react-select/issues/5190#issuecomment-1634111332 - - return ( - <ReactSelectComponents.Option - {...props} - innerProps={{ ...innerProps, role: 'option', 'aria-selected': props.isSelected }} - className={OptionBEM} - > - {renderOption ? ( - renderOption(props) - ) : ( - <> - <span className="sr-only">{props.label}</span> - <Check - id={props.data.value} - label={props.label} - aria-hidden={true} - className={styles['select__checkbox']} - value={props.data.value} - name={props.data.value} - checked={props.isSelected} - onChange={(value, checked) => null} - disabled={props.isDisabled} - hover={props.isFocused} - /> - </> - )} - </ReactSelectComponents.Option> - ); - }; - - const getSingleOption = (props: OptionProps<ISelectOption, boolean>): JSX.Element => { - const OptionBEM = cn( - styles['select__option'], - { [styles['select__option--disabled']]: props.isDisabled }, - { [styles['select__option--selected']]: props.isSelected }, - { [styles['select__option--focused']]: props.isFocused } - ); - - const { tabIndex, ...innerProps } = props.innerProps; // https://github.com/JedWatson/react-select/issues/5190#issuecomment-1634111332 - - return ( - <ReactSelectComponents.Option - {...props} - innerProps={{ ...innerProps, role: 'option', 'aria-selected': props.isSelected }} - className={OptionBEM} - > - {renderOption ? renderOption(props) : props.children} - </ReactSelectComponents.Option> - ); - }; - - const getOption = (props: OptionProps<ISelectOption, boolean>): JSX.Element => { - return multiple ? getMultiOption(props) : getSingleOption(props); - }; - - const getMultiValue = ({ - children, - components: { Remove }, - data, - selectProps, - removeProps, - ...rest - }: MultiValueProps<ISelectOption>): JSX.Element => { - return ( - <Tag - color="default" - type="secondary" - className={cn(styles['select__multi-value-item'], { - [styles['select__multi-value-item--big']]: size !== 'small', - })} - > - {children} - {isTagRemovable && <Remove data={data} selectProps={selectProps} innerProps={removeProps} />} - </Tag> - ); - }; - - const getMultiValueRemove = ({ data, innerProps }: MultiValueRemoveProps<ISelectOption>): JSX.Element => { - return ( - <Button - icon={{ name: 'clear', color: 'muted' }} - className={styles['select__multi-value-clear']} - visualType="link" - tabIndex={-1} - {...(innerProps as IntentionalAny)} - > - {`${getLabel('remove')} ${data.label}`} - </Button> - ); - }; - - // Clear currently is not focusable and that is by react-select design - // https://github.com/JedWatson/react-select/issues/4988 - const getClearIndicator = ({ innerProps: { ref, ...restInnerProps } }: ClearIndicatorProps<ISelectOption>) => { - return isClearIndicatorVisible ? ( - <Button - icon={{ name: 'clear', color: 'muted' }} - visualType="link" - tabIndex={-1} - ref={ref as IntentionalAny} - {...(restInnerProps as IntentionalAny)} - > - {getLabel('clear')} - </Button> - ) : null; - }; - - const getGroup = (props: GroupProps<ISelectOption, boolean, IGroupedOptions<ISelectOption>>): JSX.Element => { - const GroupBEM = cn(styles['select__group']); - - return ( - <ReactSelectComponents.Group {...props} className={GroupBEM}> - {props.children} - </ReactSelectComponents.Group> - ); - }; - - const getGroupHeading = ( - props: GroupHeadingProps<ISelectOption, boolean, IGroupedOptions<ISelectOption>> - ): ReactElement => { - const groupHeadingBEM = cn( - styles['select__group-heading'], - getBackgroundColorClass(props.data.backgroundColor || optionGroupBackgroundColor || 'transparent') - ); - const textSettings = props.data.text || optionGroupHeadingText; - - return ( - <ReactSelectComponents.GroupHeading {...props} className={groupHeadingBEM}> - <Text {...textSettings}>{props.data.label}</Text> - </ReactSelectComponents.GroupHeading> - ); - }; - - const renderReactSelect = (): JSX.Element => { - const customComponents: SelectComponentsConfig<ISelectOption, boolean, IGroupedOptions<ISelectOption>> = { - ClearIndicator: getClearIndicator, - DropdownIndicator: getDropDownIndicator, - IndicatorSeparator: () => null, - MenuPortal: MenuPortal, - Menu: Menu, - MenuList: MenuList, - Option: getOption, - Control: CustomControl, - Input: CustomInput, - MultiValue: getMultiValue, - MultiValueRemove: getMultiValueRemove, - Placeholder: getPlaceholder, - Group: getGroup, - GroupHeading: getGroupHeading, - }; - - const ReactSelectElement = async ? AsyncSelect : ReactSelect; - - const getNoOptionsMessage = () => getLabel('select.no-options'); - const getLoadingMessage = () => getLabel('select.loading'); - - return ( - <ReactSelectElement<ISelectOption, boolean, IGroupedOptions<ISelectOption>> - id={id} - aria-describedby={helperId} - autoFocus={autoFocus} - ref={element} - instanceId={id} - className="select__wrapper" - name={name} - options={options} - defaultOptions={defaultOptions} - value={value} - defaultValue={defaultValue} - cacheOptions={cacheOptions} - onChange={onChangeHandler} - onInputChange={onInputChange} - onBlur={onBlur} - inputValue={inputValue} - inputId={`${id}-input`} - loadOptions={loadOptions} - isLoading={isLoading} - noOptionsMessage={noOptionsMessage || getNoOptionsMessage} - loadingMessage={loadingMessage || getLoadingMessage} - classNamePrefix="select" - components={customComponents} - isDisabled={disabled} - isSearchable={isSearchable} - menuIsOpen={menuIsOpen} - openMenuOnFocus={openMenuOnFocus} - openMenuOnClick={openMenuOnClick} - tabSelectsValue={tabSelectsValue} - onMenuClose={onMenuClose} - onMenuOpen={onMenuOpen} - placeholder={placeholder || ''} - isClearable={isClearable} - backspaceRemovesValue={true} - menuShouldScrollIntoView={true} - isMulti={multiple} - hideSelectedOptions={false} - closeMenuOnSelect={closeMenuOnSelect} - blurInputOnSelect={blurInputOnSelect} - menuPosition="fixed" - menuPlacement="auto" - inputIsHidden={inputIsHidden} - required={required} - theme={(theme) => ({ - ...theme, - colors: { - ...theme.colors, - primary: '#005aa3', - danger: '#b50000', - dangerLight: '#fceeee', - }, - })} - // see https://github.com/JedWatson/react-select/issues/4461 - styles={{ - input: (base) => ({ - ...base, - gridTemplateColumns: '0fr', - }), - }} - /> - ); - }; - - const SelectBEM = cn( - styles['select'], - className, - { [styles['select--invalid']]: invalid || helper?.type === 'error' }, - { [styles[`select--${size}`]]: size }, - { [styles[`select--tags-${tagsDirection}`]]: tagsDirection }, - { [styles['select--searchable']]: isSearchable } - ); - - return ( - <div data-name="select" {...rest} className={SelectBEM}> - <div className={styles['select__inner']}> - <FormLabel id={`${id}-input`} label={label} required={required} hideLabel={hideLabel} size={size} /> - {renderReactSelect()} - </div> - {helper && <FeedbackText {...helper} id={helperId} />} - </div> - ); - } -); - -Select.displayName = 'Select'; - -export default Select; diff --git a/libs/react-components/src/community/components/form/text-editor/components/block-style-controls.tsx b/libs/react-components/src/community/components/form/text-editor/components/block-style-controls.tsx deleted file mode 100644 index 55385d797..000000000 --- a/libs/react-components/src/community/components/form/text-editor/components/block-style-controls.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { DraftBlockType, EditorState } from 'draft-js'; - -import styles from '../text-editor.module.scss'; -import StyleButton from './style-button'; - -interface BlockStyle { - label: string; - style: DraftBlockType; -} - -const BLOCK_TYPES: BlockStyle[] = [ - { label: 'H1', style: 'header-one' }, - { label: 'H2', style: 'header-two' }, - { label: 'H3', style: 'header-three' }, - { label: 'H4', style: 'header-four' }, - { label: 'H5', style: 'header-five' }, - { label: 'H6', style: 'header-six' }, - { label: 'format_quote', style: 'blockquote' }, - { label: 'format_list_bulleted', style: 'unordered-list-item' }, - { label: 'OL', style: 'ordered-list-item' }, - { label: 'Code Block', style: 'code-block' }, -]; - -export interface BlockStyleControlsProps { - editorState: EditorState; - onToggle: (style: DraftBlockType) => void; - /** - * Select which inlineStyleControls should be visible. - * Defaults to ['blockquote', 'unordered-list-item']. - */ - blockStyleControls?: DraftBlockType[]; -} - -export const BlockStyleControls = (props: BlockStyleControlsProps): JSX.Element => { - const { editorState, blockStyleControls = ['blockquote', 'unordered-list-item'] } = props; - const selection = editorState.getSelection(); - const blockType = editorState.getCurrentContent().getBlockForKey(selection.getStartKey()).getType(); - const filteredStyles = BLOCK_TYPES.filter((item) => blockStyleControls.includes(item.style)); - - return ( - <div className={styles['text-editor__control-block']}> - {filteredStyles.map((type) => ( - <StyleButton - key={type.label} - active={type.style === blockType} - label={type.label} - onToggle={props.onToggle} - style={type.style} - /> - ))} - </div> - ); -}; - -export default BlockStyleControls; diff --git a/libs/react-components/src/community/components/form/text-editor/components/inline-style-controls.tsx b/libs/react-components/src/community/components/form/text-editor/components/inline-style-controls.tsx deleted file mode 100644 index 14007a4d1..000000000 --- a/libs/react-components/src/community/components/form/text-editor/components/inline-style-controls.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { DraftInlineStyleType, EditorState } from 'draft-js'; - -import styles from '../text-editor.module.scss'; -import StyleButton from './style-button'; - -interface InlineStyle { - label: string; - style: DraftInlineStyleType; -} - -const INLINE_STYLES: InlineStyle[] = [ - { label: 'format_bold', style: 'BOLD' }, - { label: 'format_italic', style: 'ITALIC' }, - { label: 'format_underlined', style: 'UNDERLINE' }, - { label: 'code', style: 'CODE' }, -]; - -export interface InlineStyleControlsProps { - editorState: EditorState; - onToggle: (style: DraftInlineStyleType | string) => void; - /** - * Select which inlineStyleControls should be visible. - * Defaults to ['BOLD', 'ITALIC', 'UNDERLINE']. - */ - inlineStyleControls?: DraftInlineStyleType[]; -} - -export const InlineStyleControls = (props: InlineStyleControlsProps): JSX.Element => { - const { inlineStyleControls = ['BOLD', 'ITALIC'], onToggle, editorState } = props; - const currentStyle = editorState.getCurrentInlineStyle(); - - const filteredStyles = INLINE_STYLES.filter((item) => inlineStyleControls.includes(item.style)); - return ( - <div className={styles['text-editor__control-block']}> - {filteredStyles.map((type) => ( - <StyleButton - key={type.label} - active={currentStyle.has(type.style)} - label={type.label} - onToggle={onToggle} - style={type.style} - /> - ))} - </div> - ); -}; - -export default InlineStyleControls; diff --git a/libs/react-components/src/community/components/form/text-editor/components/style-button.tsx b/libs/react-components/src/community/components/form/text-editor/components/style-button.tsx deleted file mode 100644 index 8d0276084..000000000 --- a/libs/react-components/src/community/components/form/text-editor/components/style-button.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import cn from 'classnames'; -import { DraftBlockType, DraftInlineStyleType } from 'draft-js'; - -import Icon from '../../../icon/icon'; -import styles from '../text-editor.module.scss'; - -export interface StyleButtonProps { - label: string; - style: DraftInlineStyleType | DraftBlockType; - onToggle: (style: DraftInlineStyleType | DraftBlockType) => void; - active?: boolean; -} - -export const StyleButton = (props: StyleButtonProps): JSX.Element => { - const { active, style, label, onToggle } = props; - const BEM = cn(styles['style-button'], { [styles['style-button--active']]: active }); - - const onToggleHandler = (e: React.MouseEvent<HTMLButtonElement>): void => { - e.preventDefault(); - onToggle(style); - }; - - return ( - <button type="button" className={BEM} onClick={onToggleHandler}> - <Icon name={label} size={24} /> - </button> - ); -}; - -export default StyleButton; diff --git a/libs/react-components/src/community/components/form/text-editor/text-editor.module.scss b/libs/react-components/src/community/components/form/text-editor/text-editor.module.scss deleted file mode 100644 index 0524e8b0b..000000000 --- a/libs/react-components/src/community/components/form/text-editor/text-editor.module.scss +++ /dev/null @@ -1,52 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.text-editor__inner { - display: flex; - flex-direction: column; - padding: 0.75rem 1rem; - background-color: var(--color-bg-default); - border: 1px solid var(--color-border-contrast); - border-radius: var(--border-radius-default); - - .text-editor--invalid & { - border-color: var(--color-important-main); - } - - .text-editor--focused & { - border-color: var(--color-primary-active-subtle); - outline: none; - box-shadow: 0 0 0 1px var(--color-primary-active-subtle); - } -} - -.text-editor__controls { - display: flex; - column-gap: 0.25rem; -} - -.text-editor__control-block { - display: flex; - column-gap: 0.25rem; -} - -.text-editor__content { - padding-top: 1rem; - color: var(--color-text-default); -} - -.style-button { - @include mixins.button-reset; - - display: flex; - color: var(--color-text-muted); - - &:hover { - color: var(--color-text-default); - } -} - -.style-button--active { - color: var(--color-text-default); - background-color: var(--color-bg-subtle); - border-radius: var(--border-radius-default); -} diff --git a/libs/react-components/src/community/components/form/text-editor/text-editor.stories.tsx b/libs/react-components/src/community/components/form/text-editor/text-editor.stories.tsx deleted file mode 100644 index edb5749e6..000000000 --- a/libs/react-components/src/community/components/form/text-editor/text-editor.stories.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import dompurify from 'dompurify'; -import React from 'react'; -import * as showdown from 'showdown'; - -import { VerticalSpacing } from '../../../../tedi/components/layout/vertical-spacing'; -import Heading from '../../typography/heading/heading'; -import TextEditor, { TextEditorProps } from './text-editor'; -const converter = new showdown.Converter({ simpleLineBreaks: true }); - -/** - * TextEditor is built with [draft.js](https://draftjs.org/). It takes markdown string as input and outputs <br/> - * also markdown string. In this example we used [showdown.js](https://github.com/showdownjs/showdown) to get HTML <br/> - * elements of markdown. It is **highly recommended** to use [dompurify](https://github.com/cure53/DOMPurify) <br/> - * before using HTML content inside your app - */ -const meta: Meta<typeof TextEditor> = { - title: 'Community/Form/TextEditor', - component: TextEditor, -}; - -export default meta; - -type Story = StoryObj<TextEditorProps>; - -const Template: StoryFn<TextEditorProps> = (args) => { - const [markdown, setMarkdown] = React.useState<string>(args.defaultValue || ''); - React.useEffect(() => { - console.log({ markdown }); - }, [markdown]); - const santizedHtml = React.useMemo(() => dompurify.sanitize(converter.makeHtml(markdown)), [markdown]); - return ( - <VerticalSpacing> - <TextEditor {...args} onChange={setMarkdown} /> - <hr /> - <Heading element="h3">Example of HTML in page:</Heading> - <div className="text-editor-example" dangerouslySetInnerHTML={{ __html: santizedHtml }} /> - </VerticalSpacing> - ); -}; - -export const Default: Story = { - render: Template, - args: { - id: 'text-editor', - label: 'Situation description', - placeholder: 'Enter description...', - defaultValue: `According to the victim the __violence__: is repeating; and affects them in following ways: health, safety, quality of life. -In addition in the home there are: -- underage children -- person has a rifle under the bed -- person was released from prison - -Both parties had consumed alcohol`, - }, -}; diff --git a/libs/react-components/src/community/components/form/text-editor/text-editor.tsx b/libs/react-components/src/community/components/form/text-editor/text-editor.tsx deleted file mode 100644 index 57db0c892..000000000 --- a/libs/react-components/src/community/components/form/text-editor/text-editor.tsx +++ /dev/null @@ -1,194 +0,0 @@ -import cn from 'classnames'; -import { - convertFromRaw, - convertToRaw, - DraftBlockType, - DraftHandleValue, - DraftInlineStyleType, - Editor, - EditorCommand, - EditorState, - RichUtils, -} from 'draft-js'; -import { draftjsToMd, mdToDraftjs } from 'draftjs-md-converter'; -import React from 'react'; - -import { FeedbackText, FeedbackTextProps } from '../../../../tedi/components/form/feedback-text/feedback-text'; -import { FormLabel, FormLabelProps } from '../../../../tedi/components/form/form-label/form-label'; -import { useIsMounted } from '../../../../tedi/helpers'; -import BlockStyleControls from './components/block-style-controls'; -import InlineStyleControls from './components/inline-style-controls'; -import styles from './text-editor.module.scss'; - -import 'draft-js/dist/Draft.css'; - -export interface TextEditorProps extends FormLabelProps { - /** - * ID attribute. - */ - id: string; - /* - * Name attribute - * */ - name?: string; - /** - * Default value of input. - */ - defaultValue?: string; - /** - * onChange callback handler. - */ - onChange?: (value: string) => void; - /** - * Input field placeholder. - */ - placeholder?: string; - /** - * Additional classes. - */ - className?: string; - /** - * Select which inlineStyleControls should be visible. - * @default ['BOLD', 'ITALIC'] - */ - inlineStyleControls?: DraftInlineStyleType[]; - /** - * Select which inlineStyleControls should be visible. - * @default unordered-list-item - */ - blockStyleControls?: DraftBlockType[]; - /** - * Textfield helper. - */ - helper?: FeedbackTextProps; - /** - * onFocus callback handler. - */ - onFocus?: () => void; - /** - * onBlur callback handler. - */ - onBlur?: () => void; - /** - * If text-editor is invalid. - */ - invalid?: boolean; -} - -export const TextEditor = (props: TextEditorProps): JSX.Element => { - const { - inlineStyleControls = ['BOLD', 'ITALIC'], - blockStyleControls = ['unordered-list-item'], - label, - id, - required, - helper, - className, - hideLabel, - placeholder, - defaultValue, - onChange, - onBlur, - onFocus, - invalid, - ...rest - } = props; - - const helperId = helper ? helper?.id ?? `${id}-helper` : undefined; - const isMounted = useIsMounted(); - - const getDefaultValue = React.useMemo((): EditorState => { - const defaultRawData = mdToDraftjs(defaultValue || ''); - const defaultContentState = convertFromRaw(defaultRawData); - return EditorState.createWithContent(defaultContentState); - }, [defaultValue]); - - const [editorState, setEditorState] = React.useState(getDefaultValue); - const [isFocused, setIsFocused] = React.useState(false); - - const getMarkdown = React.useMemo(() => { - const content = editorState.getCurrentContent(); - return draftjsToMd(convertToRaw(content)); - }, [editorState]); - - const isInvalid = React.useMemo((): boolean => { - return invalid || helper?.type === 'error'; - }, [invalid, helper]); - - const isValid = React.useMemo((): boolean => { - return !invalid && helper?.type === 'valid'; - }, [invalid, helper]); - - React.useEffect(() => { - onChange?.(getMarkdown); - }, [getMarkdown, onChange]); - - const handleKeyCommand = (command: EditorCommand, editorState: EditorState): DraftHandleValue => { - const newState = RichUtils.handleKeyCommand(editorState, command); - - if (newState) { - setEditorState(newState); - return 'handled'; - } - - return 'not-handled'; - }; - - const toggleInlineStyle = (inlineStyle: DraftInlineStyleType | string): void => { - setEditorState(RichUtils.toggleInlineStyle(editorState, inlineStyle)); - }; - - const toggleBlockType = (blockType: DraftBlockType): void => { - setEditorState(RichUtils.toggleBlockType(editorState, blockType)); - }; - - const TextEditorBEM = cn( - styles['text-editor'], - className, - { [styles['text-editor--invalid']]: isInvalid }, - { [styles['text-editor--valid']]: isValid }, - { [styles['text-editor--focused']]: isFocused } - ); - - return ( - <div data-name="text-editor" {...rest} className={TextEditorBEM}> - <FormLabel id={id} label={label} required={required} hideLabel={hideLabel} /> - <div - className={styles['text-editor__inner']} - onClick={() => setIsFocused(true)} - onBlur={() => setIsFocused(false)} - > - <div className={styles['text-editor__controls']}> - <InlineStyleControls - inlineStyleControls={inlineStyleControls} - editorState={editorState} - onToggle={toggleInlineStyle} - /> - <BlockStyleControls - blockStyleControls={blockStyleControls} - editorState={editorState} - onToggle={toggleBlockType} - /> - </div> - <div className={styles['text-editor__content']}> - {isMounted && ( - <Editor - ariaDescribedBy={helperId} - placeholder={placeholder} - editorState={editorState} - onChange={setEditorState} - handleKeyCommand={handleKeyCommand} - preserveSelectionOnBlur={true} - editorKey="editor" - onBlur={onBlur} - onFocus={onFocus} - /> - )} - </div> - </div> - {helper && <FeedbackText {...helper} id={helperId} />} - </div> - ); -}; - -export default TextEditor; diff --git a/libs/react-components/src/community/components/form/toggle/toggle.module.scss b/libs/react-components/src/community/components/form/toggle/toggle.module.scss deleted file mode 100644 index d1875ddaf..000000000 --- a/libs/react-components/src/community/components/form/toggle/toggle.module.scss +++ /dev/null @@ -1,228 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -$dot-size-medium: 1rem; -$toggle-width-medium: 2.5rem; -$dot-size-large: 1.5rem; -$toggle-width-large: 3.5rem; -$toggle-padding: 0.125rem; -$toggle-transition-duration: 170ms; -$toggle-transition-timing-function: ease-out; - -@mixin toggle-size-variant($dot-size, $toggle-width) { - & { - width: $toggle-width; - height: calc($dot-size + 2 * $toggle-padding); - } - - & .toggle__dot { - right: calc(100% - $toggle-padding - $dot-size); - width: $dot-size; - height: $dot-size; - } - - &.toggle--active .toggle__dot { - right: $toggle-padding; - - .toggle--ghost & { - right: 1px; - } - } -} - -@mixin toggle-container-variant($bg, $bg-hover, $bg-active, $bg-hover-active) { - & { - background-color: $bg; - border-color: $bg; - } - - &:hover:not(.toggle--disabled) { - background-color: $bg-hover; - border-color: $bg-hover; - } - - &.toggle--active { - background-color: $bg-active; - border-color: $bg-active; - - &:hover:not(.toggle--disabled) { - background-color: $bg-hover-active; - border-color: $bg-hover-active; - } - } - - &.toggle--disabled { - cursor: auto; - background-color: var(--color-bg-disabled); - border-color: var(--color-bg-disabled); - } - - // GHOST - &.toggle--ghost { - background-color: var(--color-transparent); - border-color: $bg; - - &:hover:not(.toggle--disabled) { - background-color: var(--color-transparent); - border-color: $bg-hover; - } - - &.toggle--active { - background-color: var(--color-transparent); - border-color: $bg-active; - - &:hover:not(.toggle--disabled) { - background-color: var(--color-transparent); - border-color: $bg-hover-active; - } - } - - &.toggle--disabled { - background-color: var(--color-bg-subtle); - border-color: var(--color-border-contrast); - } - } -} - -@mixin toggle-dot-variant($bg, $bg-hover, $bg-active, $bg-hover-active, $bg-disabled) { - & .toggle__dot { - background-color: $bg; - } - - &.toggle--active .toggle__dot { - background-color: $bg-active; - } - - &:hover:not(.toggle--disabled) { - &.toggle__dot { - background-color: $bg-hover; - } - - &.toggle--active .toggle__dot { - background-color: $bg-hover-active; - } - } - - &.toggle--disabled .toggle__dot { - background-color: $bg-disabled; - } -} - -@mixin toggle-icon-variant($color, $color-active, $color-disabled) { - & .toggle__icon { - color: $color; - } - - & .toggle__spinner { - stroke: currentcolor; - } - - &.toggle--active .toggle__icon { - color: $color-active; - } - - &.toggle--disabled .toggle__icon { - color: $color-disabled; - } -} - -@mixin toggle-color-variant( - $bg, - $bg-active, - $bg-hover, - $bg-active-hover, - $icon-color, - $icon-color-active, - $icon-color-ghost, - $icon-color-ghost-active -) { - @include toggle-container-variant($bg, $bg-hover, $bg-active, $bg-active-hover); - @include toggle-dot-variant( - var(--color-text-inverted), - var(--color-text-inverted), - var(--color-text-inverted), - var(--color-text-inverted), - var(--color-text-disabled) - ); - @include toggle-icon-variant($icon-color, $icon-color-active, var(--color-bg-disabled)); - - &.toggle--ghost { - @include toggle-dot-variant($bg, $bg-hover, $bg-active, $bg-active-hover, var(--color-bg-disabled)); - @include toggle-icon-variant($icon-color-ghost, $icon-color-ghost-active, var(--color-text-disabled)); - } -} - -.toggle-wrapper { - display: grid; - grid-template-columns: min-content; - gap: 0 1rem; - place-items: center start; -} - -button.toggle { - @include mixins.button-reset; - - position: relative; - border: 1px solid; - border-radius: 1.5rem; - transition: background-color, $toggle-transition-duration, $toggle-transition-timing-function; - - @include toggle-color-variant( - var(--color-bg-disabled), - var(--color-primary-main), - var(--color-text-disabled), - var(--color-primary-active), - var(--color-text-disabled), - var(--color-primary-main), - var(--color-text-muted), - var(--color-text-inverted) - ); - @include mixins.print-grayscale; - - &--medium { - @include toggle-size-variant($dot-size-medium, $toggle-width-medium); - } - - &--large { - @include toggle-size-variant($dot-size-large, $toggle-width-large); - } - - &--alternative { - @include toggle-color-variant( - var(--color-important-main), - var(--color-positive-main), - var(--color-important-active), - var(--color-positive-active), - var(--color-important-main), - var(--color-positive-main), - var(--color-text-inverted), - var(--color-text-inverted) - ); - } -} - -.toggle__dot { - position: absolute; - top: 50%; - display: flex; - align-items: center; - justify-content: center; - border-radius: 1.5rem; - transition-timing-function: $toggle-transition-timing-function; - transition-duration: $toggle-transition-duration; - transition-property: right, background-color, border-color; - transform: translate(0, -50%); -} - -.toggle__icon { - transition: color, $toggle-transition-duration, $toggle-transition-timing-function; -} - -.toggle__label { - grid-row: 1; - grid-column: 2; -} - -.toggle__extra-content { - grid-row: 2; - grid-column: 2; -} diff --git a/libs/react-components/src/community/components/form/toggle/toggle.stories.tsx b/libs/react-components/src/community/components/form/toggle/toggle.stories.tsx deleted file mode 100644 index 8d54f8fab..000000000 --- a/libs/react-components/src/community/components/form/toggle/toggle.stories.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import React from 'react'; - -import { Col, Row } from '../../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../../tedi/components/layout/vertical-spacing'; -import Text from '../../typography/text/text'; -import Toggle, { ToggleProps } from './toggle'; - -const meta: Meta<ToggleProps> = { - component: Toggle, - title: 'Community/Form/Toggle', -}; - -export default meta; -type Story = StoryObj<ToggleProps>; - -interface ToggleTemplateProps extends ToggleProps { - name: string; -} - -const ToggleRow = (props: ToggleTemplateProps) => { - const { name, ...rest } = props; - return ( - <Row alignItems="center"> - <Col width="auto"> - <Toggle {...rest} /> - </Col> - <Col width="auto"> - <Toggle defaultChecked {...rest} /> - </Col> - <Col width="auto"> - <Text color="muted">{name}</Text> - </Col> - </Row> - ); -}; - -const ToggleCol = (props: ToggleTemplateProps) => { - const { name, ...rest } = props; - - return ( - <VerticalSpacing size={0.5}> - <p className="text-bold text-primary">{name}</p> - <ToggleRow {...rest} name="Regular" /> - <ToggleRow {...rest} disabled name="Disabled" /> - <ToggleRow {...rest} isLoading name="Loading" /> - <ToggleRow {...rest} size="large" name="Large" /> - <ToggleRow {...rest} icon isLoading name="Large loading" /> - <ToggleRow {...rest} icon name="With icon" /> - <ToggleRow {...rest} icon disabled name="With icon disabled" /> - </VerticalSpacing> - ); -}; - -const Template: StoryFn<ToggleProps> = (args) => ( - <Row gap={5}> - <Col width="auto"> - <ToggleCol {...args} name="Default type" /> - </Col> - <Col width="auto"> - <ToggleCol {...args} type="ghost" name="Ghost type" /> - </Col> - </Row> -); - -export const Default: Story = { - render: Template, - - args: { - ariaLabel: 'Insightful label text for screen reader', - }, -}; - -export const Alternative: Story = { - render: Template, - - args: { - ...Default.args, - color: 'alternative', - }, -}; - -export const WithLabel: Story = { - args: { - label: <Text>Child in danger</Text>, - - extraContent: <Text color="muted">Childs life or health is in danger or is putting others in danger.</Text>, - }, -}; - -export const Controlled: StoryFn<ToggleProps> = () => { - const [checked, setChecked] = React.useState<boolean>(false); - - return ( - <Toggle - ariaLabel="Insightful label text for screen reader" - checked={checked} - onChange={(checked) => setChecked(checked)} - /> - ); -}; diff --git a/libs/react-components/src/community/components/form/toggle/toggle.tsx b/libs/react-components/src/community/components/form/toggle/toggle.tsx deleted file mode 100644 index 52f7632b9..000000000 --- a/libs/react-components/src/community/components/form/toggle/toggle.tsx +++ /dev/null @@ -1,173 +0,0 @@ -import cn from 'classnames'; -import React, { forwardRef } from 'react'; - -import { Spinner } from '../../../../tedi/components/loaders/spinner/spinner'; -import Button, { ButtonProps } from '../../button/button'; -import Icon from '../../icon/icon'; -import styles from './toggle.module.scss'; - -export interface ToggleProps { - /** - * Aria Label - */ - ariaLabel: string; - /** - * Label text rendered next to toggle - * ariaLabel should still be provided, because it is used for the screen readers. - * Label is used for the visual label and hidden for screen-readers - * Click on the label triggers the toggle - */ - label?: React.ReactNode; - /** - * Possibility to add extra content after label. ExtraContent is not clickable like label - */ - extraContent?: React.ReactNode; - /** - * Wrapper Classname - */ - className?: string; - /** - * If the check is controlled from outside the components, use with onChange - */ - checked?: boolean; - /** - * If the check is checked by default. - * Ignored if checked is set - */ - defaultChecked?: boolean; - /** - * On change handler, value is the new value of the toggle - */ - onChange?(value: boolean): void; - /** - * Size of the toggle - * @default medium - */ - size?: 'medium' | 'large'; - /** - * Color of the toggle - * @default default - */ - color?: 'default' | 'alternative'; - /** - * Type of the toggle - */ - type?: 'ghost'; - /** - * Should the toggle show lock icon. - * Can be only used as large toggle - */ - icon?: boolean; - /** - * If the toggle is disabled - */ - disabled?: boolean; - /** - * If toggle is in loading state and should show spinner. - * When isLoading is true, toggle does not trigger onChange event. - * @default false - */ - isLoading?: boolean; -} - -export const Toggle = forwardRef<HTMLButtonElement, ToggleProps>((props, ref) => { - const { - ariaLabel, - className, - checked, - defaultChecked, - onChange, - size = props.icon ? 'large' : 'medium', - color = 'default', - type, - icon, - disabled = false, - isLoading = false, - extraContent, - label, - ...rest - } = props; - const [innerChecked, setInnerChecked] = React.useState<boolean>(defaultChecked || false); - - const getChecked = React.useMemo((): boolean => { - return onChange && typeof checked !== 'undefined' ? checked : innerChecked; - }, [onChange, innerChecked, checked]); - - const ToggleBEM = cn( - styles['toggle'], - styles[`toggle--${size}`], - styles[`toggle--${color}`], - { - [styles['toggle--active']]: getChecked, - [styles['toggle--disabled']]: disabled, - [styles[`toggle--${type}`]]: type, - }, - className - ); - - const handleChange = () => { - if (isLoading) { - return; - } - - const newChecked = !getChecked; - if (typeof checked === 'undefined') { - setInnerChecked(newChecked); - } - - onChange?.(newChecked); - }; - - const buttonProps: Partial<ButtonProps<'button'>> = { - noStyle: true, - type: 'button', - 'aria-label': ariaLabel, - 'aria-pressed': getChecked, - disabled: disabled, - 'aria-disabled': isLoading, - ...rest, - onClick: handleChange, - }; - - return ( - <div className={styles['toggle-wrapper']}> - <Button - {...buttonProps} - onClick={(event) => { - /** - * Allows Toggle to use inside TooltipTrigger. - * TooltipTrigger uses onClick to open the tooltip when openWith="click" - * Can't be passed to label button, because tooltip closes due that cursor leaves the ref button - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (rest as Record<string, any>)?.onClick?.(event); - handleChange(); - }} - ref={ref} - data-name="toggle" - className={ToggleBEM} - > - <span className={styles['toggle__dot']}> - {isLoading ? ( - <Spinner - size={size === 'large' ? 16 : 10} - className={cn(styles['toggle__icon'], styles['toggle__spinner'])} - /> - ) : icon ? ( - <Icon className={styles['toggle__icon']} name={getChecked ? 'lock_open_right' : 'lock'} size={16} /> - ) : null} - </span> - </Button> - {label && ( - <Button {...buttonProps} className={styles['toggle__label']} aria-hidden={true} tabIndex={-1}> - {label} - </Button> - )} - {extraContent && <div className={styles['toggle__extra-content']}>{extraContent}</div>} - </div> - ); -}); - -Toggle.displayName = 'Toggle'; - -export default Toggle; diff --git a/libs/react-components/src/community/components/icon/icon.module.scss b/libs/react-components/src/community/components/icon/icon.module.scss deleted file mode 100644 index 919caea6c..000000000 --- a/libs/react-components/src/community/components/icon/icon.module.scss +++ /dev/null @@ -1,16 +0,0 @@ -// we increase specificity to override default material-symbols-xxx class -span.icon { - width: var(--icon-variation-size, var(--icon-internal-variation-size, 1.5rem)); - font-size: var(--icon-variation-size, var(--icon-internal-variation-size, 1.5rem)); - font-variation-settings: 'FILL' var(--icon-variation-fill, var(--icon-internal-variation-fill, 0)); - font-optical-sizing: auto; -} - -.icon.icon--block { - display: block; -} - -.icon.icon--inline { - display: inline; - vertical-align: text-top; -} diff --git a/libs/react-components/src/community/components/icon/icon.stories.tsx b/libs/react-components/src/community/components/icon/icon.stories.tsx deleted file mode 100644 index 3afa297ed..000000000 --- a/libs/react-components/src/community/components/icon/icon.stories.tsx +++ /dev/null @@ -1,186 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import useLayout from '../../helpers/hooks/use-layout'; -import Heading from '../typography/heading/heading'; -import Text from '../typography/text/text'; -import { Icon, IconProps } from './icon'; - -const meta: Meta<typeof Icon> = { - component: Icon, - title: 'Community/Icon', - parameters: { - status: { - type: ['deprecated', 'ExistsInTediReady'], - }, - }, -}; - -export default meta; -type Story = StoryObj<TemplateMultipleProps>; - -const sizeArray: IconProps['size'][] = [12, 14, 16, 18, 24, 36, 48]; -const colorArray: IconProps['color'][] = [ - 'default', - 'primary', - 'muted', - 'subtle', - 'disabled', - 'inverted', - 'positive', - 'important', - 'warning', -]; -const typeArray: IconProps['type'][] = ['outlined', 'rounded', 'sharp']; - -interface TemplateMultipleProps<Type = IconProps['size'] | IconProps['color'] | IconProps['type'] | IconProps['filled']> - extends IconProps { - array: Type[]; - property: keyof IconProps; -} - -const TemplateMultiple: StoryFn<TemplateMultipleProps> = (args) => { - const { array, property, ...iconProps } = args; - - return ( - <VerticalSpacing> - {array.map((value, key) => ( - <Row key={key} alignItems="center" gutterX={2}> - <Col width={1}> - <Text modifiers="capitalize">{value?.toString()}</Text> - </Col> - <Col width="auto"> - <Icon {...iconProps} {...{ [property]: value }} name="home" /> - </Col> - <Col width="auto"> - <Icon {...iconProps} {...{ [property]: value }} name="arrow_drop_down" /> - </Col> - <Col width="auto"> - <Icon {...iconProps} {...{ [property]: value }} name="star_half" /> - </Col> - <Col width="auto"> - <Icon {...iconProps} {...{ [property]: value }} name="arrow_circle_up" /> - </Col> - </Row> - ))} - </VerticalSpacing> - ); -}; -const Template: StoryFn<IconProps> = (args) => <Icon {...args} />; - -export const Default: Story = { - render: Template, - - args: { - name: 'home', - size: 36, - label: 'Example icon', - }, -}; - -/** - * It is highly recommended to only use one `type` throughout your app. This ensures that only one icon font is downloaded. - */ -export const Types: Story = { - render: TemplateMultiple, - - args: { - size: 36, - property: 'type', - array: typeArray, - }, -}; - -export const Filled: Story = { - render: TemplateMultiple, - - args: { - size: 36, - property: 'filled', - array: [true, false], - }, -}; - -export const Sizes: Story = { - render: TemplateMultiple, - - args: { - property: 'size', - array: sizeArray, - }, -}; - -/** - * Use "positive", "important" or "warning" with caution, usually they should not be in application UI. - */ -export const Colors: Story = { - render: TemplateMultiple, - - args: { - property: 'color', - array: colorArray, - }, -}; - -/** - * Aligning icons with text can be achieved in two ways:<br/> - * 1. Use `<Row>` and `<Col>` components and place icon and text in separate columns. - * 1. Use `inline={true}` prop and place the icon as a text sibling. (Shown in this example) - * - * For both methods the `size` of the icon should be manually set to visually match the text. (Take note that h1-h6 font sizes differ on desktop/mobile) - * Icon `size` should be rounded up from text size. - * E.g. When text has `font-size: 32px`, then the icon should have `size={36} - */ -export const InText: Story = { - render: (args) => { - const isMobileLayout = useLayout(['mobile']); - - return ( - <div> - <div> - <Heading element="h1"> - <Icon name={args.name} display="inline" size={isMobileLayout ? 24 : 36} /> - This is level 1 heading with inline{' '} - <Icon name={args.name} display="inline" size={isMobileLayout ? 24 : 36} /> icon - </Heading> - <Heading element="h2"> - <Icon name={args.name} display="inline" size={isMobileLayout ? 24 : 36} /> - This is level 2 heading with inline{' '} - <Icon name={args.name} display="inline" size={isMobileLayout ? 24 : 36} /> icon - </Heading> - <Heading element="h3"> - <Icon name={args.name} display="inline" size={24} /> - This is level 3 heading with inline <Icon name={args.name} display="inline" size={24} /> icon - </Heading> - <Heading element="h4"> - <Icon name={args.name} display="inline" size={isMobileLayout ? 18 : 24} /> - This is level 4 heading with inline{' '} - <Icon name={args.name} display="inline" size={isMobileLayout ? 18 : 24} /> icon - </Heading> - <Heading element="h5"> - <Icon name={args.name} display="inline" size={isMobileLayout ? 16 : 18} /> - This is level 5 heading with inline{' '} - <Icon name={args.name} display="inline" size={isMobileLayout ? 16 : 18} /> icon - </Heading> - <Heading element="h6"> - <Icon name={args.name} display="inline" size={16} /> - This is level 6 heading with inline <Icon name={args.name} display="inline" size={16} /> icon - </Heading> - <p> - <Icon name={args.name} display="inline" size={16} /> - This is paragraph text with inline <Icon name={args.name} display="inline" size={16} /> icon - </p> - <small> - <Icon name={args.name} display="inline" size={14} /> - This is small text with inline <Icon name={args.name} display="inline" size={14} /> icon - </small> - </div> - </div> - ); - }, - - args: { - name: 'cancel', - }, -}; diff --git a/libs/react-components/src/community/components/icon/icon.tsx b/libs/react-components/src/community/components/icon/icon.tsx deleted file mode 100644 index ee6b2b86f..000000000 --- a/libs/react-components/src/community/components/icon/icon.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import cn from 'classnames'; -import React, { forwardRef } from 'react'; - -import { TextColor } from '../typography/text/text'; -import styles from './icon.module.scss'; - -export type IconSize = 12 | 14 | 16 | 18 | 24 | 36 | 48; - -export interface IconProps { - /** - * Name of material symbols icon. - * https://fonts.google.com/icons?icon.set=Material+Symbols - */ - name: string; - /** - * Additional classes. - */ - className?: string; - /** - * Type of icon. - * It is recommended to only use one type throughout your app. - * This ensures that only one icon font is downloaded. - * @default outlined - */ - type?: 'outlined' | 'rounded' | 'sharp'; - /** - * Render a filled variant of the icon. - * @default false - */ - filled?: boolean; - /** - * Size of the icon. - * @default 24 - */ - size?: IconSize; - /** - * Which color Icon should be. - * Use 'positive', 'important' or 'warning' with caution, usually they should not be in application UI. - * @default default - */ - color?: TextColor; - /** - * Type of display. block by default. - * @default block - */ - display?: 'block' | 'inline'; - /** - * Icons label for screen-readers. - * If omitted then the icon is hidden for screen-readers. - */ - label?: string; -} - -export const Icon = forwardRef<HTMLDivElement, IconProps>((props, ref): JSX.Element => { - const { - className, - name, - filled = false, - label, - type = 'outlined', - size = 24, - display = 'block', - color, - ...rest - } = props; - const iconBEM = cn( - 'notranslate', // Added to prevent Google Translate from translating the icon - 'material-symbols', - styles['icon'], - styles[`icon--${display}`], - { [`material-symbols--${type}`]: type, [`text-${color}`]: color }, - className - ); - - const iconVariant = { - ...(size ? { '--icon-internal-variation-size': `${size / 16}rem` } : {}), - ...(filled ? { '--icon-internal-variation-fill': 1 } : {}), - } as React.CSSProperties; - - return ( - <span - data-name="icon" - role="img" - aria-hidden={!label} - {...rest} - className={iconBEM} - style={iconVariant} - ref={ref} - aria-label={label} - > - {name} - </span> - ); -}); - -Icon.displayName = 'Icon'; - -export default Icon; diff --git a/libs/react-components/src/community/components/layout/breadcrumbs/breadcrumbs.module.scss b/libs/react-components/src/community/components/layout/breadcrumbs/breadcrumbs.module.scss deleted file mode 100644 index 3871ac5d4..000000000 --- a/libs/react-components/src/community/components/layout/breadcrumbs/breadcrumbs.module.scss +++ /dev/null @@ -1,17 +0,0 @@ -.breadcrumbs__list { - display: flex; - flex-wrap: wrap; - align-items: center; - margin: 0; - list-style: none; -} - -.breadcrumbs__separator { - margin: 0 0.25rem; - color: var(--color-primary-main); -} - -.breadcrumbs__item { - display: flex; - align-items: center; -} diff --git a/libs/react-components/src/community/components/layout/breadcrumbs/breadcrumbs.stories.tsx b/libs/react-components/src/community/components/layout/breadcrumbs/breadcrumbs.stories.tsx deleted file mode 100644 index b35509826..000000000 --- a/libs/react-components/src/community/components/layout/breadcrumbs/breadcrumbs.stories.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import { LinkBehaviour } from '../../anchor/anchor-helpers'; -import { Breadcrumbs } from './breadcrumbs'; - -const meta: Meta<typeof Breadcrumbs> = { - component: Breadcrumbs, - title: 'Community/Layout/Breadcrumbs', - argTypes: { - linkAs: { - type: 'function', - }, - }, -}; - -export default meta; -type Story = StoryObj<typeof Breadcrumbs>; - -// eslint-disable-next-line storybook/prefer-pascal-case -const exampleCrumbs = [ - { href: '/', children: 'Home' }, - { href: { pathname: '/volunteers' }, children: 'Volunteers' }, - { - href: { pathname: '/volunteers/volunteer', query: { id: '20' } }, - children: '20', - isLast: true, - }, -]; - -export const Default: Story = { - args: { - linkAs: LinkBehaviour, - crumbs: exampleCrumbs, - }, -}; - -/** - * By default, we only show last interactive crumb on mobile and tablet.<br/> - * This can be controlled with `showMinimalCrumbs` prop. We can force the minimal view or define our own layouts/breakpoints for when the switch happens. - */ -export const ForcedMinimalCrumbs: Story = { - args: { - ...Default.args, - showMinimalCrumbs: true, - }, -}; diff --git a/libs/react-components/src/community/components/layout/breadcrumbs/breadcrumbs.tsx b/libs/react-components/src/community/components/layout/breadcrumbs/breadcrumbs.tsx deleted file mode 100644 index 8a08ab790..000000000 --- a/libs/react-components/src/community/components/layout/breadcrumbs/breadcrumbs.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import Print from '../../../../tedi/components/misc/print/print'; -import { useLabels } from '../../../../tedi/providers/label-provider'; -import useLayout, { Layouts } from '../../../helpers/hooks/use-layout'; -import { AllowedHTMLTags } from '../../../helpers/polymorphic/types'; -import { IntentionalAny } from '../../../types'; -import styles from './breadcrumbs.module.scss'; -import Crumb, { CrumbProps } from './crumb/crumb'; - -type ConditionalTypes<C extends React.ElementType> = - | { - /** - * Render all anchors (except logoLink and skipLink) as this component<br /> - * See [Anchor/CustomComponent](/?path=/docs/components-anchor--custom-component) for an example - */ - linkAs: AllowedHTMLTags<C, 'a' | React.ComponentType<IntentionalAny>>; - /** - * Crumbs array - */ - crumbs: CrumbProps<C>[]; - } - | { - linkAs?: never; - crumbs: CrumbProps<IntentionalAny>[]; - }; - -export type BreadcrumbsProps<C extends React.ElementType = 'a'> = ConditionalTypes<C> & { - /** - * Additional custom class. - */ - className?: string; - /** - * Show only last interactive crumb. - * Can be defined as an array of layouts/breakpoints or boolean - * @default ['mobile', 'tablet'] - */ - showMinimalCrumbs?: boolean | Layouts; -}; - -export const Breadcrumbs = <C extends React.ElementType = 'a'>(props: BreadcrumbsProps<C>): JSX.Element | null => { - const { getLabel } = useLabels(); - const { className, crumbs, linkAs, showMinimalCrumbs = ['mobile', 'tablet'], ...rest } = props; - const isSmallLayout = useLayout( - showMinimalCrumbs === true ? ['mobile', 'tablet', 'desktop'] : showMinimalCrumbs || [] - ); - const minimalCrumbs = !!showMinimalCrumbs && isSmallLayout; - - const filteredCrumbs = minimalCrumbs ? crumbs.filter((crumb) => !crumb.isLast).slice(-1) : crumbs; - - if (!filteredCrumbs?.length) { - return null; - } - - return ( - <Print visibility="hide"> - <nav - data-name="breadcrumbs" - aria-label={getLabel('breadcrumbs')} - {...rest} - className={cn(className, styles['breadcrumbs'])} - > - <ol className={styles['breadcrumbs__list']}> - {filteredCrumbs.map((crumb, index) => { - return <Crumb as={linkAs} key={index} singleCrumb={minimalCrumbs} {...crumb} />; - })} - </ol> - </nav> - </Print> - ); -}; - -export default Breadcrumbs; diff --git a/libs/react-components/src/community/components/layout/breadcrumbs/crumb/crumb.tsx b/libs/react-components/src/community/components/layout/breadcrumbs/crumb/crumb.tsx deleted file mode 100644 index cb3a36958..000000000 --- a/libs/react-components/src/community/components/layout/breadcrumbs/crumb/crumb.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import Print from '../../../../../tedi/components/misc/print/print'; -import { Anchor, AnchorProps } from '../../../anchor/anchor'; -import Icon from '../../../icon/icon'; -import Text from '../../../typography/text/text'; -import styles from '../breadcrumbs.module.scss'; - -export type CrumbProps<C extends React.ElementType = 'a'> = { - /** - * If crumb is last/current page; - * @default false - */ - isLast?: boolean; -} & AnchorProps<C>; - -const Crumb = <C extends React.ElementType = 'a'>(props: CrumbProps<C> & { singleCrumb?: boolean }): JSX.Element => { - const { isLast = false, children, singleCrumb, ...rest } = props; - - const BEM = cn(styles['breadcrumbs__item']); - - return ( - <li data-name="crumb" className={BEM}> - <Print visibility="show"> - {isLast ? ( - <Text color="muted">{children}</Text> - ) : ( - // TODO: Remove ts-ignore - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - <Anchor iconLeft={singleCrumb ? 'keyboard_arrow_left' : undefined} {...rest}> - {children} - </Anchor> - )} - </Print> - {!singleCrumb && !isLast ? ( - <Icon className={styles['breadcrumbs__separator']} size={16} name="keyboard_arrow_right" /> - ) : null} - </li> - ); -}; - -export default Crumb; diff --git a/libs/react-components/src/community/components/layout/footer/footer.module.scss b/libs/react-components/src/community/components/layout/footer/footer.module.scss deleted file mode 100644 index c024aa435..000000000 --- a/libs/react-components/src/community/components/layout/footer/footer.module.scss +++ /dev/null @@ -1,61 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -.footer__bottom { - padding: 0.5rem 2.5rem; - background-color: var(--color-bg-inverted-contrast); -} - -.footer__inner { - display: flex; - flex-direction: column; - row-gap: 2.5rem; - align-items: center; - justify-content: space-between; - padding: 2.5rem; - background-color: var(--color-bg-inverted); - - @include mixins.print-grayscale; - - @include breakpoints.media-breakpoint-up(lg) { - justify-content: space-around; - } - - @include breakpoints.media-breakpoint-up(md) { - flex-direction: row; - align-items: flex-start; - } -} - -.footer__category { - text-align: center; - - @include breakpoints.media-breakpoint-up(md) { - text-align: left; - } -} - -.footer__category-icon { - --footer-icon-bg: rgb(255 255 255 / 20%); - - display: none; - align-items: center; - justify-content: center; - width: 3rem; - height: 3rem; - background-color: var(--footer-icon-bg); - border-radius: 50%; - - @include breakpoints.media-breakpoint-up(lg) { - display: flex; - } -} - -.footer__link { - word-break: break-all; -} - -.footer__category-list { - margin: 0; - list-style: none; -} diff --git a/libs/react-components/src/community/components/layout/footer/footer.stories.tsx b/libs/react-components/src/community/components/layout/footer/footer.stories.tsx deleted file mode 100644 index 58b78ec3e..000000000 --- a/libs/react-components/src/community/components/layout/footer/footer.stories.tsx +++ /dev/null @@ -1,192 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Col, Row } from '../../../../tedi/components/layout/grid'; -import useLayout from '../../../helpers/hooks/use-layout'; -import Anchor from '../../anchor/anchor'; -import Icon from '../../icon/icon'; -import Footer, { FooterProps } from './footer'; - -const meta: Meta<typeof Footer> = { - component: Footer, - title: 'Community/Layout/Footer', -}; - -export default meta; -type Story = StoryObj<typeof Footer>; - -const exampleFooterCategories = [ - { - heading: 'Category', - icon: 'call_made', - elements: [ - <Anchor key="link-1" href="#" color="inverted"> - Text link - </Anchor>, - <Anchor key="link-2" href="#" color="inverted"> - Text link - </Anchor>, - <Anchor key="link-3" href="#" color="inverted"> - Text link - </Anchor>, - ], - }, - { - heading: 'Category', - icon: 'call_made', - elements: [ - <Anchor key="link-1" href="#" color="inverted"> - Text link - </Anchor>, - <Anchor key="link-2" href="#" color="inverted"> - Text link - </Anchor>, - <Anchor key="link-3" href="#" color="inverted"> - Text link - </Anchor>, - <Anchor key="link-4" href="#" color="inverted"> - Text link - </Anchor>, - ], - }, - { - heading: 'Category', - icon: 'call_made', - elements: [ - <Anchor key="link-1" href="#" color="inverted"> - Text link - </Anchor>, - <Anchor key="link-2" href="#" color="inverted"> - Text link - </Anchor>, - <Anchor key="link-3" href="#" color="inverted"> - Text link - </Anchor>, - <Anchor key="link-4" href="#" color="inverted"> - Text link - </Anchor>, - <Anchor key="link-5" href="#" color="inverted"> - Text link - </Anchor>, - ], - }, -]; - -const Template: StoryFn<typeof Footer> = (args) => { - const isMobileLayout = useLayout(['mobile']); - - const logo: FooterProps['logo'] = { - src: isMobileLayout ? 'sf_logod.jpg' : 'sf_logod_vertikaalne.jpg', - alt: 'logo', - style: isMobileLayout - ? { - width: '9rem', - height: '5.25rem', - borderRadius: '0.25rem', - } - : { - width: '3.75rem', - height: '7rem', - borderRadius: '0.25rem', - }, - }; - return <Footer {...args} logo={logo} />; -}; - -export const Default: Story = { - render: Template, - - args: { - categories: exampleFooterCategories, - }, -}; - -export const Laeh: Story = { - render: Template, - - args: { - ...Default.args, - categories: [ - { - heading: 'STAR support', - icon: 'call_made', - elements: [ - <Anchor key="link-1" href="mailto:starteenusetugi@sotsiaalkindlustusamet.ee" color="inverted"> - starteenusetugi@sotsiaalkindlustusamet.ee - </Anchor>, - <Anchor key="link-2" href="tel:+3727943906" color="inverted"> - +372 794 3906 - </Anchor>, - ], - }, - ], - }, -}; - -export const TextInFooter: Story = { - render: Template, - - args: { - ...Default.args, - categories: [ - { - heading: 'Category', - icon: 'call_made', - elements: [ - 'Social insurance board', - 'Paldiski mnt 80, 15092 Tallinn', - <span key="sample-phone-nr"> - Phone <Icon name="info" display="inline" size={14} />: +372 612 1360 - </span>, - ], - }, - { - heading: 'Category', - icon: 'call_made', - elements: [ - <Anchor key="link-1" href="#" color="inverted"> - Text link - </Anchor>, - <Anchor key="link-2" href="#" color="inverted"> - Text link - </Anchor>, - <Anchor key="link-3" href="#" color="inverted"> - Text link - </Anchor>, - ], - }, - { - heading: 'Category', - icon: 'call_made', - elements: [ - <Anchor key="link-1" href="#" color="inverted"> - Text link - </Anchor>, - <Anchor key="link-2" href="#" color="inverted"> - Text link - </Anchor>, - <Anchor key="link-3" href="#" color="inverted"> - Text link - </Anchor>, - ], - }, - ], - }, -}; - -export const BottomRow: Story = { - render: Template, - - args: { - ...Default.args, - bottomElement: ( - <Row justifyContent="center"> - <Col width="auto">Text</Col> - <Col width="auto"> - <Anchor size="small" href="#" color="inverted"> - Link - </Anchor> - </Col> - </Row> - ), - }, -}; diff --git a/libs/react-components/src/community/components/layout/footer/footer.tsx b/libs/react-components/src/community/components/layout/footer/footer.tsx deleted file mode 100644 index a21ffe1b3..000000000 --- a/libs/react-components/src/community/components/layout/footer/footer.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Col, Row } from '../../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../../tedi/components/layout/vertical-spacing'; -import { Print } from '../../../../tedi/components/misc/print/print'; -import { StretchContent } from '../../../../tedi/components/misc/stretch-content/stretch-content'; -import { useLabels } from '../../../../tedi/providers/label-provider'; -import Icon, { IconProps } from '../../icon/icon'; -import Text from '../../typography/text/text'; -import styles from './footer.module.scss'; - -export type FooterCategory = { - /** - * Category elements - */ - elements?: React.ReactNode[]; - heading: React.ReactNode; - icon?: string | IconProps; -}; - -export type FooterProps = { - /** - * Footer Categorys - */ - categories: FooterCategory[]; - /** - * Src and styles of logo to show - */ - logo?: { - src: string; - alt: string; - style?: React.CSSProperties; - }; - /** - * Additional classname - */ - className?: string; - /** - * Additional element to display in the bottom of the footer - */ - bottomElement?: React.ReactNode; -}; - -export const Footer = (props: FooterProps): JSX.Element => { - const { logo, categories, className, bottomElement, ...rest } = props; - const { getLabel } = useLabels(); - - const BEM = cn(styles['footer'], className); - - return ( - <Print visibility="hide"> - <footer data-name="footer" {...rest} className={BEM}> - <Text className="visually-hidden" element="h2"> - {getLabel('footer.title')} - </Text> - <div className={styles['footer__inner']}> - {categories.map((c, index) => ( - <StretchContent direction="vertical" key={index}> - <FooterCategory {...c} /> - </StretchContent> - ))} - {logo && <img className={styles['footer__logo']} src={logo.src} alt={logo.alt} style={logo.style} />} - </div> - {bottomElement && ( - <Text color="inverted" element="div" className={styles['footer__bottom']}> - {bottomElement} - </Text> - )} - </footer> - </Print> - ); -}; - -const FooterCategory = (props: FooterCategory): JSX.Element => { - const { heading, icon, elements } = props; - - const getIcon = (icon: string | IconProps) => { - const defaultIconProps: Partial<IconProps> = { size: 16 }; - const iconProps: IconProps = - typeof icon === 'string' ? { ...defaultIconProps, name: icon } : { ...defaultIconProps, ...icon }; - - return <Icon {...iconProps} />; - }; - - return ( - <Row> - {icon && ( - <Col width="auto" className={cn('text-inverted', styles['footer__category-icon'])}> - {getIcon(icon)} - </Col> - )} - <Col width="auto"> - <VerticalSpacing className={cn('text-small', styles['footer__category'])} size={0.5}> - <Text color="inverted" modifiers={['bold', 'normal']} element="h3"> - {heading} - </Text> - <VerticalSpacing element="ul" size={0.5} className={cn(styles['footer__category-list'])}> - {elements?.map((item, index) => ( - <li key={index}> - <Text color="inverted" element="span" modifiers="break-all"> - {item} - </Text> - </li> - ))} - </VerticalSpacing> - </VerticalSpacing> - </Col> - </Row> - ); -}; - -export default Footer; diff --git a/libs/react-components/src/community/components/layout/header/components/header-bottom-content/header-bottom-content.module.scss b/libs/react-components/src/community/components/layout/header/components/header-bottom-content/header-bottom-content.module.scss deleted file mode 100644 index 9e4cb422e..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-bottom-content/header-bottom-content.module.scss +++ /dev/null @@ -1,3 +0,0 @@ -.header__bottom-content { - box-shadow: 0 1px 2px rgb(0 0 0 / 14%); -} diff --git a/libs/react-components/src/community/components/layout/header/components/header-bottom-content/header-bottom-content.stories.tsx b/libs/react-components/src/community/components/layout/header/components/header-bottom-content/header-bottom-content.stories.tsx deleted file mode 100644 index 5e5b4edef..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-bottom-content/header-bottom-content.stories.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import Text from '../../../../typography/text/text'; -import HeaderBottomContent from './header-bottom-content'; - -/** - * HeaderContent holds custom content of header and is used to place content in the middle of header. <br /> - * **Note**: This component is not meant to be used outside of Header. - */ -const meta: Meta<typeof HeaderBottomContent> = { - component: HeaderBottomContent, - title: 'Community/Layout/Header/HeaderBottomContent', -}; - -export default meta; -type Story = StoryObj<typeof HeaderBottomContent>; - -export const Default: Story = { - args: { - children: 'Any content', - cardProps: { - border: 'top-border-default', - }, - }, -}; - -export const Notice: Story = { - args: { - children: ( - <Text modifiers="center"> - Viewer role: <b>Asta Sarapuu</b> - </Text> - ), - cardProps: { - border: 'top-warning-main', - background: 'warning-highlight', - }, - }, -}; diff --git a/libs/react-components/src/community/components/layout/header/components/header-bottom-content/header-bottom-content.tsx b/libs/react-components/src/community/components/layout/header/components/header-bottom-content/header-bottom-content.tsx deleted file mode 100644 index 8c14c9618..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-bottom-content/header-bottom-content.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Card, CardContent, CardProps } from '../../../../card'; -import { LayoutContext } from '../../../layout-context'; -import styles from './header-bottom-content.module.scss'; - -export interface HeaderBottomContentProps { - /** - * Content of HeaderDropdown - */ - children?: React.ReactNode; - /** - * card props to pass down to card component. - */ - cardProps?: CardProps; -} - -export const HeaderBottomContent = (props: HeaderBottomContentProps) => { - const { children, cardProps } = props; - const { headerBottomElement } = React.useContext(LayoutContext); - - const BEM = cn(styles['header__bottom-content'], cardProps?.className); - - return ( - <Card padding={0.75} {...cardProps} className={BEM} ref={headerBottomElement}> - <CardContent>{children}</CardContent> - </Card> - ); -}; - -export default HeaderBottomContent; diff --git a/libs/react-components/src/community/components/layout/header/components/header-content/header-content.stories.tsx b/libs/react-components/src/community/components/layout/header/components/header-content/header-content.stories.tsx deleted file mode 100644 index 92696816c..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-content/header-content.stories.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import HeaderContent from './header-content'; - -/** - * HeaderContent holds custom content of header and is used to place content in the middle of header. <br /> - * **Note**: This component is not meant to be used outside of Header. - */ -const meta: Meta<typeof HeaderContent> = { - component: HeaderContent, - title: 'Community/Layout/Header/HeaderContent', -}; - -export default meta; -type Story = StoryObj<typeof HeaderContent>; - -export const Default: Story = { - args: { - children: 'Any content', - }, -}; diff --git a/libs/react-components/src/community/components/layout/header/components/header-content/header-content.tsx b/libs/react-components/src/community/components/layout/header/components/header-content/header-content.tsx deleted file mode 100644 index 2611e3039..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-content/header-content.tsx +++ /dev/null @@ -1,12 +0,0 @@ -export interface HeaderContentProps { - /** - * Content of HeaderDropdown - */ - children?: React.ReactNode; -} - -export const HeaderContent: React.FC<HeaderContentProps> = ({ children }) => <>{children}</>; - -HeaderContent.displayName = 'HeaderContent'; - -export default HeaderContent; diff --git a/libs/react-components/src/community/components/layout/header/components/header-dropdown/header-dropdown.module.scss b/libs/react-components/src/community/components/layout/header/components/header-dropdown/header-dropdown.module.scss deleted file mode 100644 index 408b14cd3..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-dropdown/header-dropdown.module.scss +++ /dev/null @@ -1,7 +0,0 @@ -.header__dropdown span[data-name='icon'] { - transition: transform 0.3s ease-in-out; -} - -.header__dropdown--open span[data-name='icon'] { - transform: rotate(180deg); -} diff --git a/libs/react-components/src/community/components/layout/header/components/header-dropdown/header-dropdown.stories.tsx b/libs/react-components/src/community/components/layout/header/components/header-dropdown/header-dropdown.stories.tsx deleted file mode 100644 index 4ceb02713..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-dropdown/header-dropdown.stories.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import { List, ListItem } from '../../../../../../tedi/components/content/list'; -import { VerticalSpacing } from '../../../../../../tedi/components/layout/vertical-spacing'; -import Separator from '../../../../../../tedi/components/misc/separator/separator'; -import Anchor from '../../../../anchor/anchor'; -import Button from '../../../../button/button'; -import HeaderDropdown from './header-dropdown'; - -/** - * HeaderDropdown is wrapper around Tooltip to provide a consistent dropdown menu for Header. <br /> - * **Note**: This component (or tooltip design) is not meant to be used outside of Header. - */ -const meta: Meta<typeof HeaderDropdown> = { - component: HeaderDropdown, - title: 'Community/Layout/Header/HeaderDropdown', -}; - -export default meta; -type Story = StoryObj<typeof HeaderDropdown>; - -export const Default: Story = { - args: { - tooltipProps: { - cardProps: { - padding: 1, - }, - }, - triggerProps: { - children: 'Settings', - visualType: 'tertiary', - icon: { name: 'account_circle', color: 'primary', size: 36 }, - }, - children: ( - <VerticalSpacing size={1}> - <List verticalSpacing={{ size: 0.75 }} element="ul"> - <ListItem> - <Anchor href="#">My data</Anchor> - </ListItem> - <ListItem> - <Anchor href="#">Representation rights</Anchor> - </ListItem> - <ListItem> - <Anchor href="#">Access to health data</Anchor> - </ListItem> - <ListItem> - <Anchor href="#">Statements of itention</Anchor> - </ListItem> - <ListItem> - <Anchor href="#">Contacts</Anchor> - </ListItem> - </List> - <Separator /> - <Anchor iconLeft="logout">Log out</Anchor> - </VerticalSpacing> - ), - }, -}; - -export const Language: Story = { - args: { - shouldAnimate: true, - tooltipProps: { - cardProps: { - padding: 1, - }, - }, - triggerProps: { - children: 'EST', - visualType: 'link', - iconRight: { name: 'keyboard_arrow_down', color: 'primary', size: 24 }, - }, - children: ( - <List verticalSpacing={{ size: 0.75 }} element="ul"> - <ListItem> - <Button visualType="link">EST</Button> - </ListItem> - <ListItem> - <Button visualType="link">ENG</Button> - </ListItem> - <ListItem> - <Button visualType="link">RUS</Button> - </ListItem> - </List> - ), - }, -}; diff --git a/libs/react-components/src/community/components/layout/header/components/header-dropdown/header-dropdown.tsx b/libs/react-components/src/community/components/layout/header/components/header-dropdown/header-dropdown.tsx deleted file mode 100644 index 55bbe58d3..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-dropdown/header-dropdown.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import Button, { ButtonProps } from '../../../../button/button'; -import { DEFAULT_TOOLTIP_OFFSET, Tooltip, TooltipProps, TooltipProvider, TooltipTrigger } from '../../../../tooltip'; -import { LayoutContext } from '../../../layout-context'; -import styles from './header-dropdown.module.scss'; - -export interface HeaderDropdownProps { - /** - * Content of tooltip - */ - children: React.ReactNode; - /** - * Trigger of Dropdown - */ - triggerProps: ButtonProps; - /** - * Should trigger icon animate when open - */ - shouldAnimate?: boolean; - /** - * Tooltip props - */ - tooltipProps?: Omit<TooltipProps, 'children'>; - /** - * Should Tooltip be initially shown. Won't work with open and onToggle. - * @default false - */ - defaultOpen?: boolean; - /** - * Should the Tooltip be open or closed. - * Use to handle state outside of component, should use with onToggle prop. - */ - open?: boolean; - /** - * Callback when Tooltip is toggled. - * Use to handle state outside of component, should use with open prop. - */ - onToggle?: (open: boolean) => void; -} - -export const HeaderDropdown = (props: HeaderDropdownProps) => { - const { children, triggerProps, defaultOpen, open, onToggle, shouldAnimate, tooltipProps } = props; - const [internalOpen, setInternalOpen] = React.useState(defaultOpen); - const [offset, setOffset] = React.useState(DEFAULT_TOOLTIP_OFFSET); - const { headerElement } = React.useContext(LayoutContext); - const buttonElement = React.useRef<HTMLButtonElement>(null); - - React.useEffect(() => { - if (headerElement?.current && buttonElement?.current) { - // Calculate offset to align HeaderDropdown with bottom of the Header - const headerRect = headerElement.current.getBoundingClientRect(); - const buttonRect = buttonElement.current.getBoundingClientRect(); - const offset = headerRect.bottom - buttonRect.bottom; - setOffset(offset); - } - }, [headerElement, buttonElement, children]); - - const isOpen = open !== undefined ? open : internalOpen; - - const handleToggle = (open: boolean) => { - setInternalOpen(open); - onToggle?.(open); - }; - - return ( - <TooltipProvider offset={offset} openWith="click" role="dialog" onToggle={handleToggle} open={isOpen}> - <TooltipTrigger> - <Button - {...triggerProps} - ref={buttonElement} - className={cn(styles['header__dropdown'], triggerProps.className, { - [styles['header__dropdown--open']]: shouldAnimate && isOpen, - })} - /> - </TooltipTrigger> - <Tooltip - {...tooltipProps} - cardProps={{ - ...tooltipProps?.cardProps, - border: 'top-primary-active-subtle', - borderless: false, - background: 'bg-muted', - }} - > - {children} - </Tooltip> - </TooltipProvider> - ); -}; - -export default HeaderDropdown; diff --git a/libs/react-components/src/community/components/layout/header/components/header-language/header-language.stories.tsx b/libs/react-components/src/community/components/layout/header/components/header-language/header-language.stories.tsx deleted file mode 100644 index a40b512fa..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-language/header-language.stories.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import HeaderLanguage from './header-language'; - -/** - * HeaderLanguage return a list of languages in HeaderDropdown. Pass it as direct children of Header and it will be automatically -positioned. <br /> - * **Note**: This component is not meant to be used outside of Header. - */ -const meta: Meta<typeof HeaderLanguage> = { - component: HeaderLanguage, - title: 'Community/Layout/Header/HeaderLanguage', -}; - -export default meta; -type Story = StoryObj<typeof HeaderLanguage>; - -export const Default: Story = { - args: { - languages: [ - { - label: 'EST', - 'aria-label': 'Estonian', - onClick: ({ onToggle }) => { - console.log('Selected EST'); - onToggle(false); - }, - isSelected: true, - }, - { - label: 'ENG', - 'aria-label': 'English', - onClick: ({ onToggle }) => { - console.log('Selected ENG'); - onToggle(false); - }, - isSelected: false, - }, - { - label: 'RUS', - 'aria-label': 'Russian', - onClick: ({ onToggle }) => { - console.log('Selected Rus'); - onToggle(false); - }, - isSelected: false, - }, - ], - }, -}; diff --git a/libs/react-components/src/community/components/layout/header/components/header-language/header-language.tsx b/libs/react-components/src/community/components/layout/header/components/header-language/header-language.tsx deleted file mode 100644 index eadd8fb35..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-language/header-language.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import React from 'react'; - -import { List, ListItem } from '../../../../../../tedi/components/content/list'; -import { Col, Row } from '../../../../../../tedi/components/layout/grid'; -import { useLabels } from '../../../../../../tedi/providers/label-provider'; -import { useLayout } from '../../../../../helpers/hooks/use-layout'; -import Button, { ButtonProps } from '../../../../button/button'; -import { Card, CardContent } from '../../../../card'; -import { Heading } from '../../../../typography/heading/heading'; -import Text from '../../../../typography/text/text'; -import HeaderDropdown from '../header-dropdown/header-dropdown'; -import HeaderModal from '../header-modal/header-modal'; - -export interface Language { - label: string; - onClick: (props: { onToggle: (open: boolean) => void }) => void; - isSelected?: boolean; - 'aria-label'?: string; -} - -export interface HeaderLanguageProps { - /** - * Content of HeaderDropdown - */ - languages?: Language[]; -} - -export const HeaderLanguage: React.FC<HeaderLanguageProps> = (props) => { - const { languages } = props; - const isDesktopTablet = useLayout(['desktop', 'tablet']); - const { getLabel } = useLabels(); - const [isOpen, setIsOpen] = React.useState(false); - - const selectedLanguage = languages?.find((language) => language.isSelected); - - const triggerProps: ButtonProps = { - children: selectedLanguage?.label, - 'aria-label': `${getLabel('header.select-lang')} ${selectedLanguage?.['aria-label'] ?? selectedLanguage?.label}`, - visualType: isDesktopTablet ? 'link' : 'tertiary', - iconRight: isDesktopTablet ? { name: 'expand_more', color: 'primary', size: 24 } : undefined, - }; - - const handleClick = (externalOnClick?: (props: { onToggle: (open: boolean) => void }) => void) => { - externalOnClick?.({ onToggle: setIsOpen }); - }; - - const getLanguageButton = ({ isSelected, onClick, label, 'aria-label': ariaLabel }: Language, isDropdown = true) => ( - <Button - visualType={isDropdown ? 'link' : isSelected ? 'primary' : 'tertiary'} - aria-current={isSelected} - aria-label={ariaLabel} - onClick={() => handleClick(onClick)} - > - {label} - </Button> - ); - - const dropdown = ( - <div> - <Text color="muted" modifiers="small"> - {getLabel('header.select-lang')} - </Text> - <HeaderDropdown - shouldAnimate={true} - open={isOpen} - onToggle={setIsOpen} - tooltipProps={{ cardProps: { padding: 1 } }} - triggerProps={triggerProps} - > - <List verticalSpacing={{ size: 0.75 }} element="ul"> - {languages?.map((language) => <ListItem key={language.label}>{getLanguageButton(language)}</ListItem>) || []} - </List> - </HeaderDropdown> - </div> - ); - - const modal = ( - <HeaderModal - ariaLabelledby="header-language-modal-label" - open={isOpen} - onToggle={setIsOpen} - triggerProps={triggerProps} - > - <Card borderless={true}> - <CardContent> - <Heading id="header-language-modal-label" className="sr-only"> - {getLabel('header.select-lang')} - </Heading> - <Row alignItems="center" element="ul"> - {languages?.map((language) => ( - <Col width="auto" key={language.label}> - {getLanguageButton(language, false)} - </Col> - ))} - </Row> - </CardContent> - </Card> - </HeaderModal> - ); - - return isDesktopTablet ? dropdown : modal; -}; - -HeaderLanguage.displayName = 'HeaderLanguage'; - -export default HeaderLanguage; diff --git a/libs/react-components/src/community/components/layout/header/components/header-modal/header-modal.stories.tsx b/libs/react-components/src/community/components/layout/header/components/header-modal/header-modal.stories.tsx deleted file mode 100644 index 087489706..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-modal/header-modal.stories.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import { List, ListItem } from '../../../../../../tedi/components/content/list'; -import { VerticalSpacing } from '../../../../../../tedi/components/layout/vertical-spacing'; -import Separator from '../../../../../../tedi/components/misc/separator/separator'; -import Anchor from '../../../../anchor/anchor'; -import Button from '../../../../button/button'; -import { Card, CardContent } from '../../../../card'; -import HeaderModal from './header-modal'; - -/** - * HeaderModal is wrapper around Modal to provide a consistent modal for Header. <br /> - * **Note**: This component (or tooltip design) is not meant to be used outside of Header. - */ -const meta: Meta<typeof HeaderModal> = { - component: HeaderModal, - title: 'Community/Layout/Header/HeaderModal', -}; - -export default meta; -type Story = StoryObj<typeof HeaderModal>; - -export const Default: Story = { - args: { - triggerProps: { - children: 'Settings', - visualType: 'tertiary', - icon: { name: 'account_circle', color: 'primary', size: 36 }, - }, - children: ( - <Card borderless> - <CardContent> - <VerticalSpacing> - <Anchor href="#">My data</Anchor> - <Separator isStretched /> - <Anchor href="#">Representation rights</Anchor> - <Separator isStretched /> - <Anchor href="#">Access to health data</Anchor> - <Separator isStretched /> - <Anchor href="#">Statements of itention</Anchor> - <Separator isStretched /> - <Anchor href="#">Contacts</Anchor> - <Separator isStretched /> - <Anchor href="#" iconLeft="logout"> - Log out - </Anchor> - <Separator isStretched /> - </VerticalSpacing> - </CardContent> - </Card> - ), - }, -}; - -export const Language: Story = { - args: { - triggerProps: { - children: 'EST', - visualType: 'link', - iconRight: { name: 'keyboard_arrow_down', color: 'primary', size: 24 }, - }, - children: ( - <Card borderless> - <CardContent> - <List verticalSpacing={{ size: 0.75 }} element="ul"> - <ListItem> - <Button visualType="link">EST</Button> - </ListItem> - <ListItem> - <Button visualType="link">ENG</Button> - </ListItem> - <ListItem> - <Button visualType="link">RUS</Button> - </ListItem> - </List> - </CardContent> - </Card> - ), - }, -}; diff --git a/libs/react-components/src/community/components/layout/header/components/header-modal/header-modal.tsx b/libs/react-components/src/community/components/layout/header/components/header-modal/header-modal.tsx deleted file mode 100644 index dd27d6d9d..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-modal/header-modal.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import React from 'react'; - -import { ClosingButton } from '../../../../../../tedi/components/buttons/closing-button/closing-button'; -import { useLabels } from '../../../../../../tedi/providers/label-provider'; -import Button, { ButtonProps } from '../../../../button/button'; -import { Card, CardContent } from '../../../../card'; -import { Modal, ModalCloser, ModalProvider, ModalTrigger } from '../../../../modal'; -import { Text } from '../../../../typography/text/text'; -import styles from '../../header/header.module.scss'; - -export interface HeaderModalProps { - /** - * Content of Modal - */ - children: React.ReactNode; - /** - * Id of aria-Labelledby element - */ - ariaLabelledby: string; - /** - * Trigger of Dropdown - */ - triggerProps: ButtonProps; - /** - * Should Tooltip be initially shown. Won't work with open and onToggle. - * @default false - */ - defaultOpen?: boolean; - /** - * Should the Tooltip be open or closed. - * Use to handle state outside of component, should use with onToggle prop. - */ - open?: boolean; - /** - * Callback when Tooltip is toggled. - * Use to handle state outside of component, should use with open prop. - */ - onToggle?: (open: boolean) => void; -} - -export const HeaderModal = (props: HeaderModalProps) => { - const { triggerProps, defaultOpen, open, onToggle, children, ariaLabelledby } = props; - const { getLabel } = useLabels(); - - return ( - <ModalProvider defaultOpen={defaultOpen} open={open} onToggle={onToggle}> - <ModalTrigger> - <Button {...triggerProps} /> - </ModalTrigger> - <Modal aria-labelledby={ariaLabelledby} hideCloseButton={true} position="right"> - <CardContent padding={0}> - <Card borderless background="primary-highlight-subtle" padding={0.5} borderRadius={false}> - <CardContent> - <Text element="div" modifiers="right"> - <ModalCloser> - <ClosingButton - title={getLabel('modal.close')} - size="large" - className={styles['header-modal__close']} - /> - </ModalCloser> - </Text> - </CardContent> - </Card> - <Card border="top-border-default" borderRadius={false} padding={0}> - <CardContent>{children}</CardContent> - </Card> - </CardContent> - </Modal> - </ModalProvider> - ); -}; - -export default HeaderModal; diff --git a/libs/react-components/src/community/components/layout/header/components/header-navigation/header-navigation.tsx b/libs/react-components/src/community/components/layout/header/components/header-navigation/header-navigation.tsx deleted file mode 100644 index dc4c76f42..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-navigation/header-navigation.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; - -import { Col, Row } from '../../../../../../tedi/components/layout/grid'; -import { StretchContent } from '../../../../../../tedi/components/misc/stretch-content/stretch-content'; -import { Anchor } from '../../../../anchor/anchor'; -import { LayoutContext } from '../../../layout-context'; - -export const HeaderNavigation = () => { - const { sideNavProps } = React.useContext(LayoutContext); - - return ( - <StretchContent direction="horizontal"> - <Row justifyContent="center" alignItems="center" gutterX={5}> - {sideNavProps?.navItems?.map((anchor, index) => ( - <Col key={index} width="auto"> - <Anchor color="text-color" as={sideNavProps.linkAs} {...anchor} icon={undefined}> - {anchor.children} - </Anchor> - </Col> - ))} - </Row> - </StretchContent> - ); -}; - -export default HeaderNavigation; diff --git a/libs/react-components/src/community/components/layout/header/components/header-navigation/readme.md b/libs/react-components/src/community/components/layout/header/components/header-navigation/readme.md deleted file mode 100644 index cb4cf5c92..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-navigation/readme.md +++ /dev/null @@ -1,2 +0,0 @@ -HeaderNavigation is only used for inner Public type Header logic. -When no sidenav is shown with public header, then sidenav links are shown as links in header with HeaderNavigation component. diff --git a/libs/react-components/src/community/components/layout/header/components/header-notification/header-notification.module.scss b/libs/react-components/src/community/components/layout/header/components/header-notification/header-notification.module.scss deleted file mode 100644 index f7fc96642..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-notification/header-notification.module.scss +++ /dev/null @@ -1,3 +0,0 @@ -.header-notification { - z-index: var(--z-index-header); -} diff --git a/libs/react-components/src/community/components/layout/header/components/header-notification/header-notification.stories.tsx b/libs/react-components/src/community/components/layout/header/components/header-notification/header-notification.stories.tsx deleted file mode 100644 index 7090dfba7..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-notification/header-notification.stories.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import Text from '../../../../typography/text/text'; -import HeaderNotification from './header-notification'; - -/** - * HeaderNotification can be used to display important system-wide messages to user. - */ -const meta: Meta<typeof HeaderNotification> = { - component: HeaderNotification, - title: 'Community/Layout/Header/HeaderNotification', -}; - -export default meta; -type Story = StoryObj<typeof HeaderNotification>; - -export const Default: Story = { - args: { - children: ( - <> - <Text element="span" modifiers="bold"> - Attention! - </Text>{' '} - There are issues with "health" menu links. We are aware and are already working the problem. - </> - ), - }, -}; - -export const CustomIcon: Story = { - args: { - ...Default.args, - icon: 'key', - }, -}; - -export const CustomColor: Story = { - args: { - ...Default.args, - background: 'warning-highlight', - }, -}; diff --git a/libs/react-components/src/community/components/layout/header/components/header-notification/header-notification.tsx b/libs/react-components/src/community/components/layout/header/components/header-notification/header-notification.tsx deleted file mode 100644 index eb480dd9e..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-notification/header-notification.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react'; - -import { Col, Row } from '../../../../../../tedi/components/layout/grid'; -import Print from '../../../../../../tedi/components/misc/print/print'; -import { Card, CardContent, CardProps } from '../../../../card'; -import Icon from '../../../../icon/icon'; -import styles from './header-notification.module.scss'; - -export interface HeaderNotificationProps { - /** - * Content of the notification - */ - children?: React.ReactNode; - /** - * Name of material symbols icon - * https://fonts.google.com/icons?icon.set=Material+Symbols - * @default info - */ - icon?: string; - /** - * Background color of card content - * @default primary-highlight - */ - background?: CardProps['background']; -} - -export const HeaderNotification = (props: HeaderNotificationProps) => { - const { children, icon = 'info', background = 'primary-highlight' } = props; - - return ( - <Print visibility="hide"> - <Card borderless background={background} borderRadius={false} className={styles['header-notification']}> - <CardContent> - <Row justifyContent="between" alignItems="center" gap={1} gutter={0}> - <Col width="auto"> - <Icon name={icon} /> - </Col> - <Col>{children}</Col> - </Row> - </CardContent> - </Card> - </Print> - ); -}; - -export default HeaderNotification; diff --git a/libs/react-components/src/community/components/layout/header/components/header-role/header-role.module.scss b/libs/react-components/src/community/components/layout/header/components/header-role/header-role.module.scss deleted file mode 100644 index a7d9ef3b9..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-role/header-role.module.scss +++ /dev/null @@ -1,12 +0,0 @@ -.header-role-collapse [data-name='collapse-trigger'] { - padding: 1rem; - margin-bottom: 0; -} - -.header-role-wrapper { - max-height: 25rem; -} - -.header-role-children { - padding: 1rem; -} diff --git a/libs/react-components/src/community/components/layout/header/components/header-role/header-role.stories.tsx b/libs/react-components/src/community/components/layout/header/components/header-role/header-role.stories.tsx deleted file mode 100644 index 89bedfd1b..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-role/header-role.stories.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Col, Row } from '../../../../../../tedi/components/layout/grid'; -import { useLayout } from '../../../../../helpers/hooks/use-layout'; -import Button from '../../../../button/button'; -import RoleSelection from './header-role'; - -/** - * HeaderRole is predefined component to handle showing user role and allow to change it. <br /> - * **Note**: This component is not meant to be used outside of Header. - */ -const meta: Meta<typeof RoleSelection> = { - component: RoleSelection, - title: 'Community/Layout/Header/HeaderRole', -}; - -export default meta; -type Story = StoryObj<typeof RoleSelection>; - -const Template: StoryFn<typeof RoleSelection> = (args) => { - const renderModal = useLayout(['mobile']); - return <RoleSelection {...args} renderModal={renderModal} />; -}; - -export const Default: Story = { - render: Template, - args: { - children: 'Any content', - primaryInfo: 'Kristo Käärmann', - }, -}; - -export const WithSecondaryInfo: Story = { - render: Template, - args: { - children: 'Any content', - primaryInfo: 'Ida-Tallinna Keskhaigla', - secondaryInfo: 'Family physician', - label: 'Kristo Käärmann', - }, -}; - -export const WithoutOptions: Story = { - render: Template, - args: { - primaryInfo: 'Tartu Linnavalitsus', - label: 'Kristo Käärmann', - children: undefined, - }, -}; - -export const WithLongContent: Story = { - render: Template, - args: { - primaryInfo: 'Tartu Linnavalitsus', - label: 'Kristo Käärmann', - children: ({ onToggle }) => { - const renderButton = (label: string) => ( - <Col> - <Button visualType="link" onClick={() => onToggle(false)}> - {label} - </Button> - </Col> - ); - - return ( - <Row direction="column" gap={3}> - {renderButton('Role 1')} - {renderButton('Role 2')} - {renderButton('Role 3')} - {renderButton('Role 4')} - {renderButton('Role 5')} - {renderButton('Role 6')} - {renderButton('Role 7')} - {renderButton('Role 8')} - {renderButton('Role 9')} - {renderButton('Role 10')} - {renderButton('Role 11')} - </Row> - ); - }, - }, -}; diff --git a/libs/react-components/src/community/components/layout/header/components/header-role/header-role.tsx b/libs/react-components/src/community/components/layout/header/components/header-role/header-role.tsx deleted file mode 100644 index 0edb378b8..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-role/header-role.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import React from 'react'; - -import ScrollFade from '../../../../../../tedi/components/misc/scroll-fade/scroll-fade'; -import { useLabels } from '../../../../../../tedi/providers/label-provider'; -import { Card, CardContent } from '../../../../card'; -import Collapse from '../../../../collapse/collapse'; -import Tag from '../../../../tag/tag'; -import { Text } from '../../../../typography/text/text'; -import { HeaderDropdown } from '../header-dropdown/header-dropdown'; -import styles from './header-role.module.scss'; - -export interface HeaderRoleProps { - /** - * Primary info of user - */ - primaryInfo: string; - /** - * Secondary info of user - */ - secondaryInfo?: string; - /** - * Override roleSelection label from LabelProvider - */ - label?: string; - /** - * Content of HeaderDropdown if user can open dropdown. - * When using a function you have access to onToggle callback that can be used to close the menu - */ - children?: ((props: { onToggle: (open: boolean) => void }) => React.ReactNode) | React.ReactNode; - /** - * Pass true when HeaderRole is used in HeaderSettings modal - * @default false - */ - renderModal?: boolean; -} - -export const HeaderRole: React.FC<HeaderRoleProps> = (props) => { - const { renderModal = false, ...rest } = props; - const [isOpen, setIsOpen] = React.useState(false); - - return renderModal ? ( - <HeaderRoleModal {...rest} open={isOpen} onToggle={setIsOpen} /> - ) : ( - <HeaderRoleDropdown {...rest} open={isOpen} onToggle={setIsOpen} /> - ); -}; - -HeaderRole.displayName = 'HeaderRole'; - -type HeaderRoleComponentProps = Omit<HeaderRoleProps, 'renderModal'> & { - /** - * Should the Tooltip be open or closed. - * Use to handle state outside of component, should use with onToggle prop. - */ - open: boolean; - /** - * Callback when Tooltip is toggled. - * Use to handle state outside of component, should use with open prop. - */ - onToggle: (open: boolean) => void; -}; - -const HeaderRoleDropdown = (props: HeaderRoleComponentProps) => { - const { getLabel } = useLabels(); - const { children, open, onToggle, primaryInfo, secondaryInfo, label = getLabel('header.role-label') } = props; - - const getLabelText = () => { - if (label === getLabel('header.role-label')) { - return ( - <div> - <Tag color="primary" type="secondary"> - {label} - </Tag> - </div> - ); - } - return ( - <Text color="muted" modifiers={['bold', 'small']}> - {label} - {!!secondaryInfo && ( - <> - {' '} - <Text element="span" modifiers={['small', 'normal']}> - <span style={{ color: 'var(--color-border-default)' }}>|</span> {secondaryInfo} - </Text> - </> - )} - </Text> - ); - }; - - const getChildren = typeof children === 'function' ? children({ onToggle }) : children; - - const dropdown = ( - <HeaderDropdown - shouldAnimate={true} - open={open} - onToggle={onToggle} - tooltipProps={{ cardProps: { padding: 0 }, maxWidth: 'medium' }} - triggerProps={{ - children: primaryInfo, - 'aria-label': `${label ?? ''} ${secondaryInfo ?? ''} ${primaryInfo ?? ''}`, - visualType: 'link', - iconRight: { name: 'expand_more', color: 'primary', size: 24 }, - }} - > - <div className={styles['header-role-wrapper']}> - <ScrollFade fadeSize={0}> - <div className={styles['header-role-children']}>{getChildren}</div> - </ScrollFade> - </div> - </HeaderDropdown> - ); - - return ( - <div> - {getLabelText()} - {getChildren ? dropdown : primaryInfo} - </div> - ); -}; - -const HeaderRoleModal = (props: HeaderRoleComponentProps) => { - const { getLabel } = useLabels(); - const { children, open, onToggle, primaryInfo, secondaryInfo, label = getLabel('header.role-label') } = props; - - const title = ( - <Text element="span" color="muted" modifiers="bold"> - {label} {primaryInfo} - {secondaryInfo && ( - <Text element="span" modifiers="normal"> - {` | ${secondaryInfo}`} - </Text> - )} - </Text> - ); - - const getChildren = typeof children === 'function' ? children({ onToggle }) : children; - - return ( - <Card background="bg-muted" borderRadius={false} borderless={true}> - <CardContent padding={0}> - {getChildren ? ( - <Collapse - id="role-collapse" - open={open} - onToggle={onToggle} - className={styles['header-role-collapse']} - hideCollapseText - title={title} - > - <div className={styles['header-role-wrapper']}> - <ScrollFade fadeSize={0}> - <div className={styles['header-role-children']}>{getChildren}</div> - </ScrollFade> - </div> - </Collapse> - ) : ( - <div className={styles['header-role-children']}>{title}</div> - )} - </CardContent> - </Card> - ); -}; - -export default HeaderRole; diff --git a/libs/react-components/src/community/components/layout/header/components/header-settings/header-settings.stories.tsx b/libs/react-components/src/community/components/layout/header/components/header-settings/header-settings.stories.tsx deleted file mode 100644 index 1537df5e4..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-settings/header-settings.stories.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import { VerticalSpacing } from '../../../../../../tedi/components/layout/vertical-spacing'; -import Separator from '../../../../../../tedi/components/misc/separator/separator'; -import { useLayout } from '../../../../../helpers/hooks/use-layout'; -import Anchor from '../../../../anchor/anchor'; -import { Card, CardContent } from '../../../../card'; -import HeaderRole, { HeaderRoleProps } from '../header-role/header-role'; -import { WithSecondaryInfo as HeaderRoleDefault } from '../header-role/header-role.stories'; -import HeaderSettings from './header-settings'; - -/** - * HeaderSettings is wrapper around HeaderDropdown to allow passing it to Header as direct children and automatically position - * it. That allows to pass custom content to settings dropdown. <br /> - * HeaderSettings also automatically adds logout or login buttons to header. <br /> - * When headerType from Layout properties is set to **'public'**, HeaderSettings renders only login button. <br /> When headerType - * from Layout properties is set to **'system'**, HeaderSettings renders logout button after children, if no children presents - * renders only logout button. <br /> - * **Note**: This component is not meant to be used outside of Header. - */ -const meta: Meta<typeof HeaderSettings> = { - component: HeaderSettings, - title: 'Community/Layout/Header/HeaderSettings', -}; - -export default meta; -type Story = StoryObj<typeof HeaderSettings>; - -const DefaultContent = ({ onToggle }: { onToggle?: (open: boolean) => void }) => { - const isMobile = useLayout(['mobile']); - const renderAnchor = (label: string) => ( - <Anchor href="#" onClick={() => onToggle?.(false)}> - {label} - </Anchor> - ); - - return ( - <VerticalSpacing> - {isMobile && ( - <> - {renderAnchor('Custom Content')} - <Separator isStretched /> - </> - )} - {renderAnchor('My data')} - <Separator isStretched /> - {renderAnchor('Representation rights')} - <Separator isStretched /> - {renderAnchor('Access to health data')} - <Separator isStretched /> - {renderAnchor('Statements of intention')} - <Separator isStretched /> - {renderAnchor('Contacts')} - </VerticalSpacing> - ); -}; - -const ModalContent = ({ onToggle }: { onToggle?: (open: boolean) => void }) => ( - <> - <HeaderRole - {...(HeaderRoleDefault.args as HeaderRoleProps)} - label={`${HeaderRoleDefault.args?.label}:`} - renderModal={true} - /> - <Card border="top-info-main"> - <CardContent> - <DefaultContent onToggle={onToggle} /> - </CardContent> - </Card> - </> -); - -const Content = ({ onToggle }: { onToggle?: (open: boolean) => void }) => { - const isMobileTablet = useLayout(['mobile', 'tablet']); - - return isMobileTablet ? <ModalContent onToggle={onToggle} /> : <DefaultContent onToggle={onToggle} />; -}; - -export const Default: Story = { - args: { - children: ({ onToggle }) => <Content onToggle={onToggle} />, - onActionClick: () => console.log('Logout'), - }, -}; - -export const OnlyLogout: Story = { - args: { - onActionClick: () => console.log('Logout'), - }, -}; diff --git a/libs/react-components/src/community/components/layout/header/components/header-settings/header-settings.tsx b/libs/react-components/src/community/components/layout/header/components/header-settings/header-settings.tsx deleted file mode 100644 index 6df00b334..000000000 --- a/libs/react-components/src/community/components/layout/header/components/header-settings/header-settings.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import React from 'react'; - -import { VerticalSpacing } from '../../../../../../tedi/components/layout/vertical-spacing'; -import Separator from '../../../../../../tedi/components/misc/separator/separator'; -import { useLabels } from '../../../../../../tedi/providers/label-provider'; -import { useLayout } from '../../../../../helpers/hooks/use-layout'; -import Button, { ButtonProps } from '../../../../button/button'; -import { Card, CardContent } from '../../../../card'; -import { Heading } from '../../../../typography/heading/heading'; -import { LayoutContext } from '../../../layout-context'; -import HeaderDropdown from '../header-dropdown/header-dropdown'; -import HeaderModal from '../header-modal/header-modal'; - -export interface HeaderSettingsProps { - /** - * Called on different actions depending on type of the Header. - * - On system header it is called on logout button click. - * - On public header it is called on login button click. - */ - onActionClick: () => void; - /** - * Content of HeaderDropdown - * When using a function you have access to onToggle callback that can be used to close the menu - */ - children?: ((props: { onToggle: (open: boolean) => void }) => React.ReactNode) | React.ReactNode; - /** - * Allow to change icon name - */ - iconName?: string; - /** - * Close menu on login/logout click - * @default true - */ - closeOnAction?: boolean; -} - -export const HeaderSettings: React.FC<HeaderSettingsProps> = (props) => { - const { children, onActionClick, closeOnAction = true, iconName } = props; - const [isOpen, setIsOpen] = React.useState(false); - const isDesktop = useLayout(['desktop']); - const isMobile = useLayout(['mobile']); - const { getLabel } = useLabels(); - const { headerType } = React.useContext(LayoutContext); - - const triggerProps: ButtonProps = { - children: getLabel('header.settings'), - visualType: 'tertiary', - icon: { name: iconName || 'account_circle', color: 'primary', size: 36 }, - }; - - if (headerType === 'public') { - return ( - <Button - icon={isMobile ? { name: 'login', color: 'primary', size: 24 } : undefined} - visualType={isMobile ? 'tertiary' : 'primary'} - onClick={onActionClick} - > - {getLabel('header.login')} - </Button> - ); - } - - const getChildren = typeof children === 'function' ? children({ onToggle: setIsOpen }) : children; - - // If there is no children, render a simple logout button - if (!getChildren) { - return ( - <Button icon={{ name: 'logout', color: 'primary', size: 24 }} visualType="tertiary" onClick={onActionClick}> - {getLabel('header.logout')} - </Button> - ); - } - - const LogOutAnchor = () => ( - <Button - onClick={() => { - onActionClick(); - closeOnAction && setIsOpen(false); - }} - iconLeft="logout" - visualType="link" - > - {getLabel('header.logout')} - </Button> - ); - - const dropdown = ( - <HeaderDropdown - open={isOpen} - onToggle={setIsOpen} - tooltipProps={{ cardProps: { padding: 1 } }} - triggerProps={triggerProps} - > - <VerticalSpacing size={1}> - {getChildren} - <Separator isStretched /> - <LogOutAnchor /> - </VerticalSpacing> - </HeaderDropdown> - ); - - const modal = ( - <HeaderModal - open={isOpen} - onToggle={setIsOpen} - ariaLabelledby="header-settings-modal-label" - triggerProps={triggerProps} - > - <Heading id="header-settings-modal-label" className="sr-only"> - {getLabel('header.settings')} - </Heading> - {getChildren} - <Separator isStretched /> - <Card borderless> - <CardContent> - <LogOutAnchor /> - </CardContent> - </Card> - <Separator isStretched /> - </HeaderModal> - ); - - return isDesktop ? dropdown : modal; -}; - -HeaderSettings.displayName = 'HeaderSettings'; - -export default HeaderSettings; diff --git a/libs/react-components/src/community/components/layout/header/components/logo/logo.module.scss b/libs/react-components/src/community/components/layout/header/components/logo/logo.module.scss deleted file mode 100644 index 89e11fa42..000000000 --- a/libs/react-components/src/community/components/layout/header/components/logo/logo.module.scss +++ /dev/null @@ -1,24 +0,0 @@ -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -.header__logo { - display: flex; - flex: 0 1 1px; - align-items: center; - margin-right: 0; - margin-left: 0.5rem; - - @include breakpoints.media-breakpoint-up(lg) { - margin-right: 2rem; - margin-left: 0; - } -} - -.header__logo-image { - display: block; - max-width: none; - height: 2rem; - - @include breakpoints.media-breakpoint-up(lg) { - height: 3rem; - } -} diff --git a/libs/react-components/src/community/components/layout/header/components/logo/logo.tsx b/libs/react-components/src/community/components/layout/header/components/logo/logo.tsx deleted file mode 100644 index eaf2dd42e..000000000 --- a/libs/react-components/src/community/components/layout/header/components/logo/logo.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react'; - -import { useLabels } from '../../../../../../tedi/providers/label-provider'; -import Anchor, { AnchorProps } from '../../../../anchor/anchor'; -import styles from './logo.module.scss'; - -export interface LogoProps<H extends React.ElementType = 'a'> { - /** - * Url to logo - * @default /logo.svg - */ - imageUrl?: string; - /** - * Wrap logo with Anchor. Children are ignored. - */ - anchorProps?: Partial<AnchorProps<H>>; -} - -export const Logo = <H extends React.ElementType = 'a'>(props: LogoProps<H>) => { - const { imageUrl = 'logo.svg', anchorProps } = props; - const { getLabel } = useLabels(); - - const LogoWrapper = anchorProps ? Anchor : React.Fragment; - - return ( - <div className={styles['header__logo']}> - <LogoWrapper {...(anchorProps as AnchorProps<H>)}> - <img src={imageUrl} alt={getLabel('header.logo')} className={styles['header__logo-image']} /> - </LogoWrapper> - </div> - ); -}; - -export default Logo; diff --git a/libs/react-components/src/community/components/layout/header/components/sidenav-toggle/sidenav-toggle.module.scss b/libs/react-components/src/community/components/layout/header/components/sidenav-toggle/sidenav-toggle.module.scss deleted file mode 100644 index d21ddab8d..000000000 --- a/libs/react-components/src/community/components/layout/header/components/sidenav-toggle/sidenav-toggle.module.scss +++ /dev/null @@ -1,29 +0,0 @@ -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -.sidenav-toggle { - --global-outline-offset: -3px; - --global-outline-color: var(--color-primary-highlight); - - width: 3.5rem; - height: 3.5rem; - margin: 0; - border-radius: 0; - - @include breakpoints.media-breakpoint-up(lg) { - display: none; - } - - .header &--open { - background-color: var(--color-primary-active); - border-color: var(--color-primary-active); - } - - .header &:focus { - border-radius: 0; - } - - .sidenav-toggle__icon { - width: 1.5rem; - font-size: 1.5rem; - } -} diff --git a/libs/react-components/src/community/components/layout/header/components/sidenav-toggle/sidenav-toggle.tsx b/libs/react-components/src/community/components/layout/header/components/sidenav-toggle/sidenav-toggle.tsx deleted file mode 100644 index 87b763d5d..000000000 --- a/libs/react-components/src/community/components/layout/header/components/sidenav-toggle/sidenav-toggle.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { useLabels } from '../../../../../../tedi/providers/label-provider'; -import Button from '../../../../button/button'; -import { LayoutContext } from '../../../layout-context'; -import styles from './sidenav-toggle.module.scss'; - -export const SidenavToggle = () => { - const { menuOpen, toggleMenu, reference, getReferenceProps, sideNavProps, onHeaderSidenavToggle } = - React.useContext(LayoutContext); - const { getLabel } = useLabels(); - const toggleLabel = getLabel('header.toggle', menuOpen); - - const BEM = cn(styles['sidenav-toggle'], { [styles['sidenav-toggle--open']]: menuOpen }); - - if (!sideNavProps?.navItems.length && !onHeaderSidenavToggle) { - return null; - } - - const buttonProps = onHeaderSidenavToggle ? { onClick: toggleMenu } : { ...getReferenceProps(), ref: reference }; - - return ( - <Button - {...buttonProps} - icon={{ - name: menuOpen ? 'close' : 'menu', - className: styles['sidenav-toggle__icon'], - }} - visualType="primary" - className={BEM} - > - {toggleLabel} - </Button> - ); -}; - -export default SidenavToggle; diff --git a/libs/react-components/src/community/components/layout/header/components/skip-links/skip-links.module.scss b/libs/react-components/src/community/components/layout/header/components/skip-links/skip-links.module.scss deleted file mode 100644 index aacdbcbe2..000000000 --- a/libs/react-components/src/community/components/layout/header/components/skip-links/skip-links.module.scss +++ /dev/null @@ -1,18 +0,0 @@ -.skip-links { - height: 0; - padding: 0; - overflow: hidden; - - &:focus-within { - height: auto; - padding: 0.5rem 1.5rem; - overflow: auto; - background-color: var(--color-bg-default); - border-bottom: 1px solid var(--color-border-default); - } - - & ul { - margin: 0; - list-style: none; - } -} diff --git a/libs/react-components/src/community/components/layout/header/components/skip-links/skip-links.stories.tsx b/libs/react-components/src/community/components/layout/header/components/skip-links/skip-links.stories.tsx deleted file mode 100644 index 840206cd2..000000000 --- a/libs/react-components/src/community/components/layout/header/components/skip-links/skip-links.stories.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import SkipLinks from './skip-links'; - -const meta: Meta<typeof SkipLinks> = { - component: SkipLinks, - title: 'Community/Layout/Header/SkipLinks', -}; - -export default meta; -type Story = StoryObj<typeof SkipLinks>; - -export const Default: Story = { - args: { - links: [{ children: 'Skip to main content', href: '#main-content' }], - }, -}; diff --git a/libs/react-components/src/community/components/layout/header/components/skip-links/skip-links.tsx b/libs/react-components/src/community/components/layout/header/components/skip-links/skip-links.tsx deleted file mode 100644 index f1ec8ed14..000000000 --- a/libs/react-components/src/community/components/layout/header/components/skip-links/skip-links.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { AllowedHTMLTags } from '../../../../../helpers/polymorphic/types'; -import { IntentionalAny } from '../../../../../types'; -import Anchor, { AnchorProps } from '../../../../anchor/anchor'; -import styles from './skip-links.module.scss'; - -type ConditionalTypes<C extends React.ElementType = 'a'> = - | { - /** - * Render all links as this component<br /> - * See [Anchor/CustomComponent](/?path=/docs/components-anchor--custom-component) for an example - */ - linkAs: AllowedHTMLTags<C, 'a' | React.ComponentType<IntentionalAny>>; - /** - * Category links - */ - links: AnchorProps<C>[]; - } - | { - linkAs?: never; - links: AnchorProps<IntentionalAny>[]; - }; - -export type SkipLinksProps<C extends React.ElementType = 'a'> = ConditionalTypes<C>; - -export const SkipLinks = <C extends React.ElementType = 'a'>(props: SkipLinksProps<C>): JSX.Element => { - const { links, linkAs } = props; - return ( - <div data-name="skip-links" className={styles['skip-links']}> - <ul> - {links.map((link, index) => ( - <li key={index}> - <Anchor as={linkAs} {...link} /> - </li> - ))} - </ul> - </div> - ); -}; - -export default SkipLinks; diff --git a/libs/react-components/src/community/components/layout/header/header.stories.tsx b/libs/react-components/src/community/components/layout/header/header.stories.tsx deleted file mode 100644 index cf63b2d84..000000000 --- a/libs/react-components/src/community/components/layout/header/header.stories.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Col, Row } from '../../../../tedi/components/layout/grid'; -import { StretchContent } from '../../../../tedi/components/misc/stretch-content/stretch-content'; -import Anchor from '../../anchor/anchor'; -import { Notice as BottomContentNotice } from './components/header-bottom-content/header-bottom-content.stories'; -import HeaderContent from './components/header-content/header-content'; -import HeaderLanguage, { HeaderLanguageProps } from './components/header-language/header-language'; -import { Default as HeaderLanguageDefault } from './components/header-language/header-language.stories'; -import { Default as HeaderNotificationDefault } from './components/header-notification/header-notification.stories'; -import HeaderRole, { HeaderRoleProps } from './components/header-role/header-role'; -import { Default as HeaderRoleDefault, WithLongContent } from './components/header-role/header-role.stories'; -import HeaderSettings, { HeaderSettingsProps } from './components/header-settings/header-settings'; -import { Default as HeaderSettingsDefault } from './components/header-settings/header-settings.stories'; -import Header, { HeaderProps } from './header/header'; - -export default { - component: Header, - title: 'Community/Layout/Header', -} as Meta; -type Story = StoryObj<typeof Header>; - -const Template: StoryFn<HeaderProps<'a'>> = (args) => <Header {...args} />; - -export const Default: Story = { - render: Template, - args: { - logo: { - imageUrl: 'logo.svg', - anchorProps: { - href: '#', - }, - }, - skipLinks: { - links: [{ children: 'Skip to main content', href: '#main-content' }], - }, - children: ( - <> - <HeaderSettings {...(HeaderSettingsDefault.args as HeaderSettingsProps)} /> - <HeaderLanguage {...(HeaderLanguageDefault.args as HeaderLanguageProps)} /> - <HeaderRole {...(HeaderRoleDefault.args as HeaderRoleProps)} /> - <HeaderContent> - <StretchContent> - <Row justifyContent="center" alignItems="center"> - <Col width="auto">Custom content</Col> - </Row> - </StretchContent> - </HeaderContent> - <Anchor href="#">Accessibilty</Anchor> - </> - ), - minimalSettingsArea: ['mobile', 'tablet'], - }, - - parameters: { - layout: 'fullscreen', - }, -}; - -/** - * Public header depends on LayoutContext to determine if the header is `public`. To see how public header works, please check the `Layout` component examples. - */ -export const Public: Story = { - render: Template, - args: { - ...Default.args, - children: ( - <> - <HeaderSettings {...(HeaderSettingsDefault.args as HeaderSettingsProps)} /> - <HeaderLanguage {...(HeaderLanguageDefault.args as HeaderLanguageProps)} /> - </> - ), - }, - - parameters: { - layout: 'fullscreen', - }, -}; - -/** - * Public header with custom content. Public header depends on LayoutContext to determine if the header is `public`. To see how public header works, please check the `Layout` component examples. - */ -export const PublicWithCustomContent: Story = { - render: Template, - args: { - ...Public.args, - enablePublicCustomContent: true, - children: ( - <> - <HeaderSettings {...(HeaderSettingsDefault.args as HeaderSettingsProps)} /> - <HeaderLanguage {...(HeaderLanguageDefault.args as HeaderLanguageProps)} /> - <HeaderContent> - <StretchContent> - <Row justifyContent="center" alignItems="center"> - <Col width="auto">Custom content</Col> - </Row> - </StretchContent> - </HeaderContent> - </> - ), - }, - - parameters: { - layout: 'fullscreen', - }, -}; - -export const HeaderWithNotification: Story = { - render: Template, - args: { - ...Default.args, - notification: { - ...HeaderNotificationDefault.args, - }, - }, - parameters: { - layout: 'fullscreen', - }, -}; - -export const BottomContent: Story = { - render: Template, - args: { - ...Default.args, - bottomContent: BottomContentNotice.args, - }, - - parameters: { - layout: 'fullscreen', - }, -}; - -export const HeaderWithLongRoleList: Story = { - render: Template, - args: { - ...Default.args, - children: ( - <> - <HeaderSettings {...(HeaderSettingsDefault.args as HeaderSettingsProps)} /> - <HeaderLanguage {...(HeaderLanguageDefault.args as HeaderLanguageProps)} /> - <HeaderRole {...(WithLongContent.args as HeaderRoleProps)} /> - <HeaderContent> - <StretchContent> - <Row justifyContent="center" alignItems="center"> - <Col width="auto">Custom content</Col> - </Row> - </StretchContent> - </HeaderContent> - <Anchor href="#">Accessibilty</Anchor> - </> - ), - }, - parameters: { - layout: 'fullscreen', - }, -}; diff --git a/libs/react-components/src/community/components/layout/header/header/header.module.scss b/libs/react-components/src/community/components/layout/header/header/header.module.scss deleted file mode 100644 index ffbe147f2..000000000 --- a/libs/react-components/src/community/components/layout/header/header/header.module.scss +++ /dev/null @@ -1,76 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -$header-min-height: 3.5rem; - -.header { - position: relative; - z-index: var(--z-index-header); - display: flex; - align-items: center; - min-height: $header-min-height; - padding-right: 1rem; - background: var(--color-bg-default); - box-shadow: 0 1px 2px rgb(0 0 0 / 14%); - - @include breakpoints.media-breakpoint-up(lg) { - min-height: 5rem; - padding: 1rem 1.5rem; - } - - @include mixins.print-grayscale; - - &--with-bottom-content { - box-shadow: none; - } -} - -.header__content { - display: flex; - flex-grow: 1; - flex-wrap: nowrap; - justify-content: space-between; -} - -.header__affix { - z-index: var(--z-index-bottom-header); -} - -.header__content-left { - display: flex; - flex-grow: 1; - align-items: center; - margin-right: 1rem; - - @include breakpoints.media-breakpoint-up(lg) { - margin-right: 2rem; - } -} - -.header__content-right { - position: relative; -} - -.header__content-item:not(:first-of-type)::before { - position: absolute; - top: 50%; - min-height: $header-min-height; - margin-left: -0.75rem; - content: ''; - border-left: 1px solid var(--color-border-default); - translate: 0 -50%; - - @include breakpoints.media-breakpoint-up(lg) { - height: 100%; - } - - @include breakpoints.media-breakpoint-up(xl) { - margin-left: -1.5rem; - } -} - -.header-modal { - &__close { - display: inline-flex; - } -} diff --git a/libs/react-components/src/community/components/layout/header/header/header.tsx b/libs/react-components/src/community/components/layout/header/header/header.tsx deleted file mode 100644 index e48c4ef77..000000000 --- a/libs/react-components/src/community/components/layout/header/header/header.tsx +++ /dev/null @@ -1,202 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Col, Row } from '../../../../../tedi/components/layout/grid'; -import { Affix } from '../../../../../tedi/components/misc/affix/affix'; -import Print from '../../../../../tedi/components/misc/print/print'; -import { Layouts, useLayout } from '../../../../helpers'; -import { IntentionalAny } from '../../../../types'; -import Anchor from '../../../anchor/anchor'; -import { LayoutContext } from '../../layout-context'; -import { useSidenavRendered } from '../../sidenav/utility'; -import HeaderBottomContent, { - HeaderBottomContentProps, -} from '../components/header-bottom-content/header-bottom-content'; -import HeaderContent from '../components/header-content/header-content'; -import HeaderLanguage from '../components/header-language/header-language'; -import HeaderNavigation from '../components/header-navigation/header-navigation'; -import HeaderNotification, { HeaderNotificationProps } from '../components/header-notification/header-notification'; -import HeaderRole from '../components/header-role/header-role'; -import HeaderSettings from '../components/header-settings/header-settings'; -import Logo, { LogoProps } from '../components/logo/logo'; -import SidenavToggle from '../components/sidenav-toggle/sidenav-toggle'; -import SkipLinks, { SkipLinksProps } from '../components/skip-links/skip-links'; -import styles from './header.module.scss'; - -export interface HeaderProps<H extends React.ElementType> { - /** - * Custom content of header - */ - children?: React.ReactNode[] | React.ReactNode; - /** - * Skiplinks properties. See more @skip-links - */ - skipLinks: SkipLinksProps; - /** - * Logo properties see more @logo - */ - logo: LogoProps<H>; - /** - * Props of HeaderBottomContent - */ - bottomContent?: HeaderBottomContentProps; - /** - * In which breakpoints header should render minimal settings module. - * That means in those breakpoints only HeaderSettings and HeaderLanguage are rendered. - * RoleSelection and custom Anchors are not rendered. They should move to HeaderSettings dropdown/modal - * @default ['mobile'] - */ - minimalSettingsArea?: Layouts; - /** - * @deprecated Use showCustomContent instead - */ - showSystemCustomContent?: Layouts; - /** - * In which breakpoints header should render custom content. - * That means in those breakpoints only HeaderContent children is rendered. - * @default ['desktop', 'tablet'] - */ - showCustomContent?: Layouts; - /** - * Whether the header should render public custom content. - * Only affects public header type. - * @default false - */ - enablePublicCustomContent?: boolean; - /** - * Props of notification bar above the header. - */ - notification?: HeaderNotificationProps; -} - -export const Header = <H extends React.ElementType = 'a'>(props: HeaderProps<H>) => { - const { - skipLinks, - logo, - children, - bottomContent, - notification, - minimalSettingsArea = ['mobile'], - showCustomContent, - showSystemCustomContent, - enablePublicCustomContent = false, - ...rest - } = props; - // Use showSystemCustomContent as fallback if showCustomContent is not provided - const effectiveCustomContent = showCustomContent ?? showSystemCustomContent ?? ['desktop', 'tablet']; - const renderCustomContent = useLayout(effectiveCustomContent); - const renderMinimalSettingsArea = useLayout(minimalSettingsArea); - const { headerType, sideNavProps, headerElement } = React.useContext(LayoutContext); - const { shouldBreakToBottomContent, shouldBreakToHeader } = useSidenavRendered(headerType, sideNavProps); - - // Different Header area accepted components and their order - const SettingsAreaComponentOrder = [ - (Anchor as React.FC).displayName, - HeaderRole.displayName, - HeaderLanguage.displayName, - HeaderSettings.displayName, - ]; - const SettingsAreaMinimalComponentOrder = [HeaderLanguage.displayName, HeaderSettings.displayName]; - const ContentAreaComponentOrder = [HeaderContent.displayName]; - - const getComponentDisplayName = (element: React.ReactElement<unknown, IntentionalAny>) => { - return element.type.displayName; - }; - - const getSettingsAreaComponents = (children: React.ReactNode[] | React.ReactNode): React.ReactNode[] => { - const acceptedChildren = renderMinimalSettingsArea ? SettingsAreaMinimalComponentOrder : SettingsAreaComponentOrder; - return reorderHeaderDirectChildren(filterHeaderDirectChildren(children, acceptedChildren)); - }; - - const filterHeaderDirectChildren = ( - children: React.ReactNode[] | React.ReactNode, - acceptedArray = SettingsAreaComponentOrder - ): React.ReactNode[] => { - const filteredChildren: React.ReactNode[] = []; - - React.Children.forEach(children, (child) => { - if (React.isValidElement(child)) { - const displayName = getComponentDisplayName(child); - if (acceptedArray.includes(displayName)) { - filteredChildren.push(child); - } else if (child.type === React.Fragment) { - filteredChildren.push(...filterHeaderDirectChildren(child.props.children, acceptedArray)); - } - } - }); - - return filteredChildren; - }; - - const reorderHeaderDirectChildren = ( - children: React.ReactNode[] | React.ReactNode, - orderArray = SettingsAreaComponentOrder - ): React.ReactNode[] => { - const orderedChildren: React.ReactNode[] = []; - - // Add children in the order specified by the `orderArray` array - orderArray.forEach((componentName) => { - React.Children.forEach(children, (child) => { - if (React.isValidElement(child) && getComponentDisplayName(child) === componentName) { - orderedChildren.push(child); - } - }); - }); - - return orderedChildren; - }; - - const BEM = cn(styles['header'], { - [styles['header--with-bottom-content']]: shouldBreakToBottomContent || !!bottomContent, - }); - - return ( - <Print visibility="hide"> - {skipLinks && <SkipLinks {...skipLinks} />} - {notification && <HeaderNotification {...notification} />} - <header data-name="header" {...rest} ref={headerElement} className={BEM}> - <SidenavToggle /> - <Logo {...logo} /> - <div className={styles['header__content']}> - <div className={styles['header__content-left']}> - {(headerType === 'system' || (enablePublicCustomContent && !shouldBreakToHeader)) && - renderCustomContent && - filterHeaderDirectChildren(children, ContentAreaComponentOrder)} - {shouldBreakToHeader && <HeaderNavigation />} - </div> - <Row - className={styles['header__content-right']} - wrap="nowrap" - alignItems="center" - gutterX={4} - xl={{ gutterX: 5 }} - > - {getSettingsAreaComponents(children).map((child: React.ReactNode, index: number) => ( - <Col width="auto" key={index} className={styles['header__content-item']}> - {child} - </Col> - ))} - </Row> - </div> - </header> - {bottomContent && !shouldBreakToBottomContent && ( - <Affix position="sticky" top={0} relative="window" className={styles['header__affix']}> - <HeaderBottomContent {...bottomContent} /> - </Affix> - )} - {shouldBreakToBottomContent && ( - <HeaderBottomContent - cardProps={{ - border: 'top-border-default', - padding: 0.75, - borderRadius: false, - }} - > - <HeaderNavigation /> - </HeaderBottomContent> - )} - </Print> - ); -}; - -export default Header; diff --git a/libs/react-components/src/community/components/layout/header/headerDocumentation.mdx b/libs/react-components/src/community/components/layout/header/headerDocumentation.mdx deleted file mode 100644 index efb563be0..000000000 --- a/libs/react-components/src/community/components/layout/header/headerDocumentation.mdx +++ /dev/null @@ -1,107 +0,0 @@ -import { Meta } from '@storybook/blocks'; - -<Meta name="Header overview" title="Community/Layout/Header/Header overview" /> - -# Header overview - -Currently we support two main header types: `public` and `system`. -Public header is used for public (landing) pages and system header is used for pages that require authentication. -Both headers are using the same markup and styling, but system header has additional functionality like user menu, notifications etc. <br/> - -## Header areas - -Header is divided into 3 main areas: `Logo`, `Content` and `Settings`. <br /> - -<img alt="Illustrative example for areas with possible components inside" src="layout/header-areas.svg" /> -### Logo - -Inside logo area, logo of the application & SidenavToggle is rendered. Logo is always rendered in every breakpoint. SidenavToggle is only rendered on mobile breakpoint and when sidenav is present. <br /> - -### Content - -Inside Content area custom features of application is rendered. It can be used to render links, search, secondary role selection etc. Content area takes all the remaining space of the header. -And can be aligned every way Grid supports it (left, right, center, space-between etc). <br /> - -### Settings - -Inside Settings area predefined functionality is rendered. It can be used to render HeaderLanguage, HeaderSettings, RoleSelection & Custom Anchors. <br /> -**Note:** When custom Anchor component wrapper is used inside application, then there should be displayName set to tehik-components Anchor displayName to use it as direct children of Header. <br /> - -```tsx -import { Anchor } from '@tehik-ee/tedi-design-system'; - -const AppAnchor = (props) => { - ... -}; - -AppAnchor.displayName = Anchor.displayName -``` - -**Note-2:** Pass those components directly as Header children to render them inside Settings area. They will be reordered to certain order. <br /> -**Note-3:** In mobile breakpoints only HeaderLanguage and HeaderSettings are rendered. Other components should be rendered inside HeaderSettings dropdown/modal. <br /> -**In-future**: We are planning to add more predefined components to Settings area. (notifications etc.) <br /> - -## Main components of header - -Tehik Header main goal is be as Modular as possible. But also provide users consistent and familiar UI/UX.<br /> -Using this approach we can provide a lot of flexibility for teams to create their own header designs, but also provide some basic functionality out of the box & be easy to use. <br /> - -To achieve this we have created a few main components that are used to build the header: - -- [SkipLinks](/docs/components-layout-header-components-skip-links--docs) -- [HeaderBottomContent](/docs/components-layout-header-components-header-bottom-content--docs) -- [HeaderContent](/docs/components-layout-header-components-header-content--docs) -- [HeaderLanguage](/docs/components-layout-header-components-header-language--docs) -- [HeaderSettings](/docs/components-layout-header-components-header-settings--docs) -- [HeaderRole](/docs/components-layout-header-components-header-role--docs) - -And also exported custom design [Tooltip/Dropdown](/docs/components-layout-header-components-header-dropdown--docs) and [Modal](/docs/components-layout-header-components-header-modal--docs) for header. -Which can be used to create custom header components inside custom content of `system` header. - -### SkipLinks - -SkipLinks is a component that is used to provide users with a way to skip to main content of the page. -It is used to improve accessibility of the page and provide end-users with a way to navigate faster to main content of the page. Mainly for end-users with screen readers. <br /> -SkipLinks are **mandatory** to force teams to use them and improve accessibility of the page. <br /> - -**Note:** Use SkipLinks by passing its properties to Header component as a prop. - -### HeaderBottomContent - -HeaderBottomContent is a component that is used to provide users with a way to add custom content to the bottom of the header. -It can be used to provide important information to users, like maintenance information, notices etc. <br /> -Visual look of ButtomContent is up to the team that is using it. It can be customised by passing different Card properties to it.<br /> -**Note:** Use HeaderBottomContent by passing its properties to Header component as a prop. <br /> -**Note-2:** `Public` header does not support `HeaderBottomContent` component, when navigation is rendered there. - -### HeaderContent - -HeaderContent is a component that is used to provide teams with a way to add custom content to the header depending on the needs of application. -It can be used to provide users with a way to navigate to different pages, search functionality, secondary role selection etc. <br /> -HeaderContent can take all the remaining space of other Header areas (Settings & Logo), so it can be aligned every way Grid supports it. <br /> -**Note:** Use HeaderContent by passing it as direct children of Header. <br /> -**Note-2:** Order of Header children does not count, Header orders and filters children in itself. <br /> -**Note-3:** Bear in mind that HeaderContent is not rendered in every breakpoint. By default it's not rendered in mobile breakpoints. Those breakpoints can be customized by passing other value to `showCustomContent` property in Header (previously known as `showSystemCustomContent`). -**Note-4:** Public HeaderContent is not rendered when `Header.enablePublicCustomContent` is false (default). -And application should handle passing same functionality to HeaderSettings in mobile breakpoints. Look Layout examples to inspiration. <br /> - -### HeaderLanguage - -HeaderLanguage is a component that is used to provide end-users with a way to change language of the application. HeaderLanguge is positioned inside Settings area and will be rendered in every breakpoint for accessibility reasons. <br /> -**Note:** Use HeaderLanguage by passing it as direct children of Header. <br /> - -### HeaderRole - -HeaderRole is a pre-defined component that is used to provide end-users with a way to change and show their role in the application. HeaderRole is positioned inside Settings area and will be rendered in HeaderSettings modal inside mobile breakpoints (Application needs to handle it itself). <br /> -**Note:** Use RoleSelection by passing it as direct children of Header. <br /> - -### HeaderSettings - -HeaderSettings includes buttons for logging end-user out and in. It also accepts custom children to add custom functionality to the HeaderSettingsDropdown. If no children is passed only login/out buttons are rendered. <br /> -When Application has custom HeaderContent, HeaderSettings is usually the place this functionality is rendered in mobile breakpoints. <br /> -HeaderSettings is positioned inside Settings area and will be rendered in every breakpoint. -**Note:** Use HeaderSettings by passing it as direct children of Header. <br /> - -## System - -## Public diff --git a/libs/react-components/src/community/components/layout/header/index.ts b/libs/react-components/src/community/components/layout/header/index.ts deleted file mode 100644 index 4af0514bd..000000000 --- a/libs/react-components/src/community/components/layout/header/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from './header/header'; -export * from './components/header-bottom-content/header-bottom-content'; -export * from './components/header-content/header-content'; -export * from './components/header-dropdown/header-dropdown'; -export * from './components/header-language/header-language'; -export * from './components/header-modal/header-modal'; -export * from './components/header-role/header-role'; -export * from './components/header-settings/header-settings'; -export * from './components/skip-links/skip-links'; diff --git a/libs/react-components/src/community/components/layout/index.ts b/libs/react-components/src/community/components/layout/index.ts deleted file mode 100644 index b4c5efc30..000000000 --- a/libs/react-components/src/community/components/layout/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './breadcrumbs/breadcrumbs'; -export * from './footer/footer'; -export * from './header'; -export * from './layout/layout'; -export * from './layout-context'; -export * from './sidenav/sidenav'; diff --git a/libs/react-components/src/community/components/layout/layout-context.ts b/libs/react-components/src/community/components/layout/layout-context.ts deleted file mode 100644 index c7925651f..000000000 --- a/libs/react-components/src/community/components/layout/layout-context.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { FloatingContext, ReferenceType } from '@floating-ui/react'; -import React from 'react'; - -import { IntentionalAny } from '../../types'; -import { SideNavProps } from './sidenav/sidenav'; - -export interface ILayoutContext { - menuOpen: boolean; - toggleMenu: () => void; - /** - * Type of the Header - * - System header is meant for logged in system - * - Public is meant for public pages where user is not yet signed in, usually also does not have sidenav on desktop - * @default 'system' - */ - headerType: 'system' | 'public'; - reference: (node: ReferenceType | null) => void; - floating: (node: HTMLElement | null) => void; - getReferenceProps: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown>; - getFloatingProps: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown>; - context: FloatingContext<ReferenceType>; - sideNavProps?: SideNavProps<IntentionalAny>; - y: number | null; - /** - * reference to header element to position HeaderDropdown aligned with bottom of header. - */ - headerElement: React.RefObject<HTMLElement> | null; - /** - * reference to header bottom element to position affixes relative to it. - */ - headerBottomElement: React.RefObject<HTMLDivElement> | null; - headerBottomSize?: DOMRect; - /** - * Custom toggle function for mobile menu - * @param menuOpen - The current state of the menu (true if open, false if closed) - * @default undefined - */ - onHeaderSidenavToggle?: (menuOpen: boolean) => void; -} - -export const LayoutContext = React.createContext<ILayoutContext>({ - menuOpen: false, - toggleMenu: () => null, - headerType: 'system', - reference: () => null, - floating: () => null, - getReferenceProps: () => ({}), - getFloatingProps: () => ({}), - context: {} as FloatingContext<ReferenceType>, - y: null, - headerElement: null, - headerBottomElement: null, - headerBottomSize: undefined, - onHeaderSidenavToggle: undefined, -}); diff --git a/libs/react-components/src/community/components/layout/layout/layout.module.scss b/libs/react-components/src/community/components/layout/layout/layout.module.scss deleted file mode 100644 index 9455e5bfa..000000000 --- a/libs/react-components/src/community/components/layout/layout/layout.module.scss +++ /dev/null @@ -1,66 +0,0 @@ -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -.container-wrapper { - display: flex; - flex-direction: column; - min-height: 100vh; -} - -.container { - position: relative; - display: flex; - flex-grow: 1; - - // This is required due to a bug in FF. - // If an element is a descendant of flexbox layout and is pre-paginated with break-inside: avoid, - // it will extend out of the flexbox area. - // This prevents the overflow from happening, but also causes break-inside: avoid; from having any effect in FF. - // Using this hack allows us to still have the benefits of break-inside: avoid; in Chrome and Edge - // TODO track progress of these bugs - // https://bugzilla.mozilla.org/show_bug.cgi?id=1807406 - // https://bugzilla.mozilla.org/show_bug.cgi?id=1695475 - // https://bugzilla.mozilla.org/show_bug.cgi?id=939897 - @media print { - overflow: auto; - } -} - -.main { - position: relative; - flex: 1; - max-width: 100%; // 100% is width without scrollbar, vw is with the scrollbar -} - -@media not print { - .main--with-sidenav { - @include breakpoints.media-breakpoint-up(lg) { - max-width: calc(100% - 15rem); // 100% - sidenav width - } - } -} - -.main__breadcrumbs { - margin: 0 0 1.5rem; -} - -.main__content { - max-width: 95rem; - height: 100%; - padding: 1.5rem 0; - margin: 0 auto; - - .main--grow & { - max-width: none; - padding: 0; - } - - @media print { - height: auto; - } -} - -.main__logos { - position: absolute; - top: 0.125rem; - right: 0; -} diff --git a/libs/react-components/src/community/components/layout/layout/layout.stories.tsx b/libs/react-components/src/community/components/layout/layout/layout.stories.tsx deleted file mode 100644 index d1aa67336..000000000 --- a/libs/react-components/src/community/components/layout/layout/layout.stories.tsx +++ /dev/null @@ -1,214 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import { useState } from 'react'; - -import { Section } from '../../../../tedi/components/content/section/section'; -import { VerticalSpacing } from '../../../../tedi/components/layout/vertical-spacing'; -import { StretchContent } from '../../../../tedi/components/misc/stretch-content/stretch-content'; -import useLayout from '../../../helpers/hooks/use-layout'; -import Button from '../../button/button'; -import Heading from '../../typography/heading/heading'; -import Breadcrumbs, { BreadcrumbsProps } from '../breadcrumbs/breadcrumbs'; -import { Default as BreadcrumbsDefault } from '../breadcrumbs/breadcrumbs.stories'; -import Footer, { FooterProps } from '../footer/footer'; -import { Default as FooterDefault } from '../footer/footer.stories'; -import { Header, HeaderProps } from '../header'; -import { Default as HeaderNotificationDefault } from '../header/components/header-notification/header-notification.stories'; -import { - BottomContent as HeaderBottomContent, - Default as HeaderDefault, - Public as HeaderPublic, - PublicWithCustomContent as HeaderPublicWithCustomContent, -} from '../header/header.stories'; -import SideNav, { SideNavProps } from '../sidenav/sidenav'; -import { Default as SidenavDefault, Public as SidenavPublic } from '../sidenav/sidenav.stories'; -import { Layout } from './layout'; - -const defaultContent = ( - <Section> - <VerticalSpacing> - <Heading>Page title & content</Heading> - <Button>Focusable item</Button> - </VerticalSpacing> - </Section> -); - -const meta: Meta<typeof Layout> = { - component: Layout, - title: 'Community/Layout', - subcomponents: { - Header, - SideNav, - Footer, - Breadcrumbs, - } as never, - argTypes: { - children: { - control: { - type: 'text', - defaultValue: '-', - }, - table: { - type: { summary: '-' }, - }, - }, - }, - parameters: { - docs: { - story: { - inline: false, - iframeHeight: 700, - }, - }, - layout: 'fullscreen', - backgrounds: { default: 'subtle' }, - }, -}; - -export default meta; -type Story = StoryObj<typeof Layout>; - -const Template: StoryFn<typeof Layout> = (args) => { - const isSmallLayout = useLayout(['mobile', 'tablet']); - - const footerLogo: FooterProps['logo'] = { - src: isSmallLayout ? 'sf_logod.jpg' : 'sf_logod_vertikaalne.jpg', - alt: 'logo', - style: isSmallLayout - ? { width: '9rem', height: '5.25rem', borderRadius: '0.25rem' } - : { width: '3.75rem', height: '7rem', borderRadius: '0.25rem' }, - }; - - const footerProps = { ...args.footer, logo: footerLogo } as FooterProps; - - return ( - <Layout {...args} footer={footerProps}> - {args.children} - </Layout> - ); -}; - -export const Default: Story = { - render: Template, - - args: { - children: defaultContent, - header: HeaderDefault.args as HeaderProps<'a'>, - sideNav: SidenavDefault.args as SideNavProps, - footer: FooterDefault.args as FooterProps, - breadcrumbsProps: BreadcrumbsDefault.args as BreadcrumbsProps, - mainLogo: { - src: 'sf_logod.jpg', - alt: 'European structure and investing logo', - style: { width: '6.625rem', height: '4rem', borderRadius: '0.25rem' }, - }, - }, -}; - -/** - * Layout with a public header. Public header is simpler, it supports custom content when `Header.enablePublicCustomContent` is true (default false). - * It would render navigation to `Header` on larger screens based on breakpoints in `SideNav.breakToHeader` prop. When `SideNav.breakToHeader` breakpoint is met, custom content is not rendered. - * <br/> - * It can be used for public pages. - */ -export const Public: Story = { - render: Template, - - args: { - ...Default.args, - header: HeaderPublic.args as HeaderProps<'a'>, - sideNav: SidenavPublic.args as SideNavProps, - headerType: 'public', - breadcrumbsProps: undefined, - }, -}; - -/** - * Layout with a public header and custom content enabled: `Header.enablePublicCustomContent` set to true (default false). - * It would render navigation to `Header` on larger screens based on breakpoints in `SideNav.breakToHeader` prop. - * <br/> - * When `SideNav.breakToHeader` breakpoint is met, custom content is not rendered. - */ -export const PublicWithCustomContent: Story = { - render: Template, - args: { - ...Public.args, - header: HeaderPublicWithCustomContent.args as HeaderProps<'a'>, - }, -}; - -/** - * Layout with a notification. Notification is rendered HeaderNotification. It can be used to display important system-wide messages to user. - */ -export const WithNotification: Story = { - render: Template, - - args: { - ...Default.args, - header: { - ...(HeaderDefault.args as HeaderProps<'a'>), - notification: { - ...HeaderNotificationDefault.args, - }, - }, - }, -}; - -/** - * Layout with a notice. Notice is rendered BottomContent and passed Card props to style the notice.<br/> - * It can be used to display important information to user. - */ -export const WithNotice: Story = { - render: Template, - - args: { - ...Default.args, - header: HeaderBottomContent.args as HeaderProps<'a'>, - }, -}; - -/** - * When we need to have the main content take all available space. For example a 404 page with illustration. - */ -export const MainGrow: Story = { - render: Template, - - args: { - ...Default.args, - growMainContent: true, - sideNav: undefined, - breadcrumbsProps: undefined, - mainLogo: undefined, - children: ( - <> - {/* NB! This is only an example. Illustrations responsiveness must be implemented in app. */} - <StretchContent className="not-found"> - <img alt="404 Page" src="404.svg" className="not-found__image" /> - </StretchContent> - </> - ), - }, -}; - -/** - * Layout with a custom menu. The custom menu can be toggled using the header's sidenav toggle. - */ -export const WithCustomMenu: Story = { - render: (args) => { - const [isMenuShown, setIsMenuShown] = useState(false); - return ( - <Layout - {...args} - header={HeaderDefault.args as HeaderProps<'a'>} - onHeaderSidenavToggle={() => setIsMenuShown(!isMenuShown)} - > - {/* NB! This is only an example. Custom menu implementation is not included. */} - <div>Custom menu status: {isMenuShown ? 'Opened' : 'Closed'}</div> - </Layout> - ); - }, - args: { - ...Default.args, - breadcrumbsProps: undefined, - sideNav: undefined, - }, -}; diff --git a/libs/react-components/src/community/components/layout/layout/layout.tsx b/libs/react-components/src/community/components/layout/layout/layout.tsx deleted file mode 100644 index e8ab085c8..000000000 --- a/libs/react-components/src/community/components/layout/layout/layout.tsx +++ /dev/null @@ -1,187 +0,0 @@ -import { autoUpdate, useClick, useDismiss, useFloating, useInteractions, useRole } from '@floating-ui/react'; -import cn from 'classnames'; -import React from 'react'; - -import { Section } from '../../../../tedi/components/content/section/section'; -import { useElementSize } from '../../../../tedi/helpers/hooks/use-element-size'; -import { AccessibilityProvider } from '../../../../tedi/providers/accessibility-provider/accessibility-provider'; -import Breadcrumbs, { BreadcrumbsProps } from '../breadcrumbs/breadcrumbs'; -import { Footer, FooterProps } from '../footer/footer'; -import { Header, HeaderProps } from '../header'; -import { LayoutContext } from '../layout-context'; -import SideNav, { SideNavProps } from '../sidenav/sidenav'; -import { useSidenavRendered } from '../sidenav/utility'; -import styles from './layout.module.scss'; - -export interface ILayoutProps< - B extends React.ElementType = 'a', - S extends React.ElementType = 'a', - H extends React.ElementType = 'a' -> { - /** - * Main content of the application - */ - children: React.ReactElement; - /** - * Header props passed to Header component - */ - header: HeaderProps<H>; - /** - * SideNav props passed to SideNav component - */ - sideNav?: SideNavProps<S>; - /** - * Main content id, used to navigate from skip-links - * @default main-content - */ - mainContentId?: string; - /** - * Main content className - */ - mainContentClassName?: string; - /** - * Footer props passed to Footer component - */ - footer?: FooterProps; - /** - * Remove max-width and padding from main. Allows the content to take all available space. - */ - growMainContent?: boolean; - /** - * Breadcrumbs props passed to Breadcrumbs component - */ - breadcrumbsProps?: BreadcrumbsProps<B>; - /** - * Logo shown on top-right of the main content area - */ - mainLogo?: { - src: string; - alt: string; - style: React.CSSProperties; - }; - /** - * Type of the Header - * - System header is meant for logged in system - * - Public is meant for public pages where user is not yet signed in, usually also does not have sidenav on desktop - * @default 'system' - */ - headerType?: 'system' | 'public'; - /** - * Custom toggle function for mobile menu - * If provided, SidenavToggle will be shown and this function will be called when toggled - * @param menuOpen - The current state of the menu (true if open, false if closed) - * @default undefined - */ - onHeaderSidenavToggle?: (menuOpen: boolean) => void; -} - -export const Layout = < - B extends React.ElementType = 'a', - S extends React.ElementType = 'a', - H extends React.ElementType = 'a' ->( - props: ILayoutProps<B, S, H> -): JSX.Element => { - const { - children, - header, - sideNav, - breadcrumbsProps, - footer, - mainContentId = 'main-content', - mainContentClassName, - mainLogo, - growMainContent, - headerType = 'system', - onHeaderSidenavToggle, - ...rest - } = props; - const headerElement = React.useRef<HTMLElement>(null); - const headerBottomElement = React.useRef<HTMLDivElement>(null); - const [menuOpen, setMenuOpen] = React.useState(false); - const prevMenuOpenRef = React.useRef<boolean>(menuOpen); - const { hasSidenav } = useSidenavRendered(headerType, sideNav); - const useFloatingInteractions = Boolean(sideNav?.navItems?.length); - const { y, refs, context } = useFloating({ - placement: 'bottom-start', - open: menuOpen, - onOpenChange: useFloatingInteractions ? setMenuOpen : undefined, - whileElementsMounted: (...args) => autoUpdate(...args, { ancestorScroll: false }), - }); - const headerBottomSize = useElementSize(headerBottomElement); - - const click = useClick(context); - const role = useRole(context, { role: 'dialog' }); - const dismiss = useDismiss(context); - const { getReferenceProps, getFloatingProps } = useInteractions( - useFloatingInteractions ? [click, role, dismiss] : [] - ); - - const mainBem = cn(styles['main'], { - [styles['main--with-sidenav']]: hasSidenav, - [styles['main--grow']]: growMainContent, - }); - - React.useEffect(() => { - if (document && headerBottomSize) { - document.documentElement.style.setProperty('--header-bottom-height', `${headerBottomSize?.height ?? 0}px`); - } - - return () => { - document.documentElement.style.removeProperty('--header-bottom-height'); - }; - }, [headerBottomSize]); - - React.useEffect(() => { - if (prevMenuOpenRef.current !== menuOpen && onHeaderSidenavToggle) { - onHeaderSidenavToggle(menuOpen); - } - prevMenuOpenRef.current = menuOpen; - }, [menuOpen, onHeaderSidenavToggle]); - - return ( - <LayoutContext.Provider - value={{ - y, - menuOpen, - toggleMenu: () => setMenuOpen((o) => !o), - headerType, - reference: refs.setReference, - floating: refs.setFloating, - context, - getReferenceProps, - getFloatingProps, - sideNavProps: sideNav, - headerElement, - headerBottomElement, - headerBottomSize, - onHeaderSidenavToggle, - }} - > - <AccessibilityProvider> - <div data-name="layout" {...rest} className={styles['container-wrapper']}> - <Header {...header} /> - <div className={cn(styles['container'], { [styles['container--menu-open']]: menuOpen })}> - {sideNav && <SideNav {...sideNav} />} - <div className={mainBem}> - {mainLogo && ( - <img className={styles['main__logos']} src={mainLogo.src} alt={mainLogo.alt} style={mainLogo.style} /> - )} - <main className={cn(styles['main__content'], mainContentClassName)} id={mainContentId} tabIndex={-1}> - {breadcrumbsProps && ( - <Section> - <Breadcrumbs className={styles['main__breadcrumbs']} {...breadcrumbsProps} /> - </Section> - )} - {children} - </main> - </div> - </div> - {footer && <Footer {...footer} />} - </div> - </AccessibilityProvider> - </LayoutContext.Provider> - ); -}; - -export default Layout; diff --git a/libs/react-components/src/community/components/layout/layoutDocumentation.mdx b/libs/react-components/src/community/components/layout/layoutDocumentation.mdx deleted file mode 100644 index 04e46220c..000000000 --- a/libs/react-components/src/community/components/layout/layoutDocumentation.mdx +++ /dev/null @@ -1,48 +0,0 @@ -import { Meta } from '@storybook/blocks'; - -<Meta name="Layout overview" title="Community/Layout/Layout overview" /> - -# Layout overview - -Layout is main wrapper around all components. It is responsible for positioning and sizing general layout components like: - -- [Header](/docs/components-layout-header--docs) -- [Sidenav](/docs/components-layout-sidenav--docs) -- [Footer](/docs/components-layout-footer--docs) -- [Breadcrumbs](/docs/components-breadcrumbs-header--docs) -- Main content area - -To check out different examples how all those components work togheter under different circumstances, check out [Layout examples](/docs/components-layout-layout--docs) - -## Header - -Header is **mandatory** in layout. - -Currently we support two main header types: `public` and `system`. -Public header is used for public (landing)pages and system header is used for pages that require authentication. -Both headers are using the same markup and styling, but system header has additional functionality like user menu, notifications, etc. <br/> - -Read more about [Header](/docs/components-layout-header--docs). - -## Sidenav - -Sidenav is used for navigation between pages. It is always visible on desktop and hidden on mobile devices. <br/> -Layout that is meant for public pages can have sidenav on mobile, but on desktop renders navigation to Header. <br /> - -Read more about [Sidenav](/docs/components-layout-sidenav--docs) - -## Footer - -Footer is used for displaying additional information about the page. <br/> - -Read more about [Footer](/docs/components-layout-footer--docs) - -## Breadcrumbs - -Breadcrumbs are used for displaying current page location in the application. <br/> - -Read more about [Breadcrumbs](/docs/components-breadcrumbs-header--docs) - -## Main content area - -Main content area is used for displaying main content of the Application. <br/> diff --git a/libs/react-components/src/community/components/layout/sidenav/sidenav.module.scss b/libs/react-components/src/community/components/layout/sidenav/sidenav.module.scss deleted file mode 100644 index 91098abef..000000000 --- a/libs/react-components/src/community/components/layout/sidenav/sidenav.module.scss +++ /dev/null @@ -1,208 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -.sidenav { - z-index: var(--z-index-sidenav); - display: flex; - flex-direction: column; - width: 70vw; - min-width: 20rem; // 320px - max-width: 25rem; // 400px - min-height: 100%; - margin: 0; - font-size: 0.875rem; - background: var(--color-primary-main); - - --global-outline-color: var(--color-primary-highlight); - --global-outline-offset: -2px; - - @include mixins.print-grayscale; - - @include breakpoints.media-breakpoint-up(md) { - font-size: 1rem; - } - - @include breakpoints.media-breakpoint-up(lg) { - width: 15rem; // 240px - min-width: 0; - max-width: none; - min-height: auto; - } -} - -.sidenav__overlay { - z-index: calc(var(--z-index-header) - 1); - background: rgb(0 0 0 / 25%); -} - -.sidenav__list { - margin: 0; - list-style: none; - - .sidenav__list { - margin: 0; - background: var(--color-primary-highlight); - } -} - -.sidenav__item { - display: flex; - flex-direction: row; - - .sidenav--has-dividers & { - border-top: 1px solid var(--color-primary-active); - - &:last-of-type { - border-bottom: 1px solid var(--color-primary-active); - } - } - - & [data-name='collapse'] { - width: 100%; - } - - & [data-name='collapse-content'] { - margin: 0; - } - - & [data-name='collapse-trigger'] { - border-radius: 0; - transition: 200ms ease; - transition-property: background-color, color; - - &[aria-expanded='true'], - &:hover, - &.sidenav__item--current { - --global-outline-color: var(--color-primary-highlight); - - background-color: var(--color-primary-active); - } - - [class^='sidenav__link'] { - padding-right: 0; - } - - [data-name='icon'] { - color: var(--color-text-inverted); - transition: 200ms ease; - transition-property: color; - } - } - - & div[class^='collapse__content'] { - margin: 0; - } - - & span[class^='row'] { - margin-right: 0; - margin-left: 0; - - & span[class^='col']:first-child { - padding-right: 0; - padding-left: 0; - } - - & span[class^='col']:last-child { - padding-left: 0; - } - } -} - -.sidenav__item .sidenav__item { - --global-outline-color: var(--color-primary-active); - - .sidenav--hide-subitem-icons & { - .sidenav__link [data-name='icon'] { - display: none; - } - } - - [data-name='collapse-trigger'] { - span.sidenav__link, - [data-name='icon'] { - color: var(--color-primary-active); - } - - &[aria-expanded='true'], - &:hover, - &.sidenav__item--current { - background-color: var(--color-primary-active-subtle); - - span.sidenav__link, - [data-name='icon'] { - color: var(--color-text-inverted); - } - } - } -} - -span.sidenav__link, -a.sidenav__link { - display: flex; - flex-grow: 1; - gap: 1rem; - align-items: center; - min-height: 3.5rem; - padding: 0.75rem 1rem; - font: inherit; - color: var(--color-text-inverted); - text-decoration: none; - word-break: break-word; - border-radius: 0; - transition: 200ms ease; - transition-property: background-color, color; - - @include breakpoints.media-breakpoint-up(md) { - min-height: 4.5rem; - } - - .sidenav__item .sidenav__item & { - & .sidenav__title:first-child { - margin-left: calc(24px + 1rem); - } - - .sidenav--hide-subitem-icons & .sidenav__title { - margin-left: calc(14px + 1rem); - } - } - - .sidenav__item .sidenav__item .sidenav__item & { - & .sidenav__title:first-child { - margin-left: calc(44px + 1rem); - } - - .sidenav--hide-subitem-icons & .sidenav__title { - margin-left: calc(34px + 1rem); - } - - & [data-name='icon']:first-child { - margin-left: 20px; - } - } -} - -a.sidenav__link { - &:hover, - .sidenav__item--current > & { - color: var(--color-text-inverted); - background-color: var(--color-primary-active); - } - - .sidenav__item .sidenav__item & { - color: var(--color-primary-active); - - --global-outline-color: var(--color-primary-active); - - &:hover { - color: var(--color-text-inverted); - background-color: var(--color-primary-active-subtle); - } - } - - .sidenav__item .sidenav__item.sidenav__item--current > & { - color: var(--color-text-inverted); - background-color: var(--color-primary-active-subtle); - - --global-outline-color: var(--color-primary-highlight); - } -} diff --git a/libs/react-components/src/community/components/layout/sidenav/sidenav.spec.tsx b/libs/react-components/src/community/components/layout/sidenav/sidenav.spec.tsx deleted file mode 100644 index f2692cbd6..000000000 --- a/libs/react-components/src/community/components/layout/sidenav/sidenav.spec.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { render } from '@testing-library/react'; - -import SideNav from './sidenav'; - -describe('Sidenav', () => { - it('should render successfully', () => { - const { baseElement } = render(<SideNav ariaLabel="Menu" navItems={[]} />); - expect(baseElement).toBeTruthy(); - }); -}); diff --git a/libs/react-components/src/community/components/layout/sidenav/sidenav.stories.tsx b/libs/react-components/src/community/components/layout/sidenav/sidenav.stories.tsx deleted file mode 100644 index e4830d4d1..000000000 --- a/libs/react-components/src/community/components/layout/sidenav/sidenav.stories.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import Sidenav, { SideNavItem } from './sidenav'; - -const meta: Meta<typeof Sidenav> = { - component: Sidenav, - title: 'Community/Layout/Sidenav', - parameters: { - layout: 'fullscreen', - }, -}; - -export default meta; -type Story = StoryObj<typeof Sidenav>; - -const exampleNavItems: SideNavItem[] = [ - { href: '#', children: 'Home', icon: 'home' }, - { href: '#', children: 'Clients', icon: 'account_box' }, - { href: '/', children: 'Children', icon: 'child_care', isActive: true }, - { href: '#', children: 'Some very long text that doest fit anything and wraps', icon: 'assignment' }, - { href: '#', children: 'Assignments', icon: 'assignment' }, - { href: '#', children: 'Assignment that is a long text', icon: 'assignment' }, - { href: '#', children: 'Assignments', icon: 'assignment' }, -]; - -const exampleNavItemsPublic: SideNavItem[] = [ - { href: '#', children: 'Home', icon: 'dashboard', isActive: true }, - { href: '#', children: 'Health info', icon: 'health_metrics' }, - { href: '/', children: 'Portal services', icon: 'medical_services' }, - { href: '#', children: 'News', icon: 'science' }, - { href: '#', children: 'Contact and FAQ', icon: 'quiz' }, -]; - -const exampleNavCollapsibleItems: SideNavItem[] = [ - { href: '#', children: 'Dashboard', icon: 'dashboard' }, - { href: '#', children: 'Patient Records', icon: 'people' }, - { - href: '#', - children: 'Clinical Management', - icon: 'medical_services', - subItems: [ - { href: '#', children: 'Vital Signs' }, - { href: '#', children: 'Assessments' }, - { - href: '#', - children: 'Treatments', - subItems: [ - { href: '#', children: 'Active Treatments' }, - { href: '#', children: 'Treatment History' }, - { href: '#', children: 'Treatment Plans' }, - { href: '#', children: 'Clinical Protocols' }, - ], - }, - { - href: '#', - children: 'Documentation', - subItems: [ - { href: '#', children: 'Clinical Notes' }, - { href: '#', children: 'Medical Forms' }, - { href: '#', children: 'Consent Forms' }, - { href: '#', children: 'Reports' }, - ], - }, - ], - }, - { - href: '#', - children: 'Administration', - icon: 'admin_panel_settings', - subItems: [ - { href: '#', children: 'Staff Management' }, - { href: '#', children: 'Scheduling' }, - { - href: '#', - children: 'System Settings', - subItems: [ - { href: '#', children: 'General Settings' }, - { href: '#', children: 'User Management' }, - { href: '#', children: 'Permissions' }, - { href: '#', children: 'Integrations' }, - ], - }, - { - href: '#', - children: 'Reports & Analytics', - subItems: [ - { href: '#', children: 'Operational Reports' }, - { href: '#', children: 'Financial Reports' }, - { href: '#', children: 'Quality Metrics' }, - { href: '#', children: 'Custom Reports' }, - ], - }, - ], - }, - { href: '#', children: 'Inventory Management', icon: 'inventory' }, - { href: '#', children: 'Billing & Finance', icon: 'payments' }, -]; - -export const Default: Story = { - args: { - navItems: exampleNavItems, - ariaLabel: 'Menu title', - }, -}; - -export const Public: Story = { - args: { - navItems: exampleNavItemsPublic, - ariaLabel: 'Menu title', - breakToBottomContent: ['lg', 'xl'], - breakToHeader: ['xxl'], - }, -}; - -export const Collapsible: Story = { - args: { - navItems: exampleNavCollapsibleItems, - ariaLabel: 'Menu title', - showDividers: false, - }, -}; diff --git a/libs/react-components/src/community/components/layout/sidenav/sidenav.tsx b/libs/react-components/src/community/components/layout/sidenav/sidenav.tsx deleted file mode 100644 index 202bc74a0..000000000 --- a/libs/react-components/src/community/components/layout/sidenav/sidenav.tsx +++ /dev/null @@ -1,230 +0,0 @@ -import { FloatingFocusManager, FloatingOverlay } from '@floating-ui/react'; -import cn from 'classnames'; -import React from 'react'; - -import Print from '../../../../tedi/components/misc/print/print'; -import useLayout, { Layouts } from '../../../helpers/hooks/use-layout'; -import { AllowedHTMLTags } from '../../../helpers/polymorphic/types'; -import { IntentionalAny } from '../../../types'; -import Anchor, { AnchorProps } from '../../anchor/anchor'; -import Collapse from '../../collapse/collapse'; -import Icon, { IconProps } from '../../icon/icon'; -import { LayoutContext } from '../layout-context'; -import styles from './sidenav.module.scss'; -import { useSidenavRendered } from './utility'; - -type ConditionalTypes<C extends React.ElementType = 'a'> = - | { - /** - * Render all anchors (except logoLink and skipLink) as this component<br /> - * See [Anchor/CustomComponent](/?path=/docs/components-anchor--custom-component) for an example - */ - linkAs: AllowedHTMLTags<C, 'a' | React.ComponentType<IntentionalAny>>; - /** - * Level 1 menu links - */ - navItems: SideNavItem<C>[]; - } - | { - linkAs?: never; - navItems: SideNavItem<IntentionalAny>[]; - }; - -export type SideNavProps<C extends React.ElementType = 'a'> = ConditionalTypes<C> & { - /** - * SideNav menu aria-label used for - */ - ariaLabel: string; - /** - * Id of the navigation - */ - id?: string; - /** - * Breakpoint at which the SideNav will be rendered inside BottomContent. - * Only works for public type Header, system type header should have always a sidenav - */ - breakToBottomContent?: Layouts; - /** - * Breakpoint at which the SideNav will be rendered inside HeaderContent - * Only works for public type Header, system type header should have always a sidenav - */ - breakToHeader?: Layouts; - /** - * Show dividers between navigation items - * @default true - */ - showDividers?: boolean; - /** - * Hide submenu icons - * @default false - */ - hideSubItemIcons?: boolean; - /** - * Additional class names for the sidenav component - */ - className?: string; -}; - -export type SideNavItem<C extends React.ElementType = 'a'> = AnchorProps<C> & { - /** - * Icon of the item - */ - icon?: string | IconProps; - /** - * Submenu items - */ - subItems?: SideNavItem<C>[]; -}; - -// tiny helper to defer closing to the next frame (prevents ghost click on touch) -const defer = (fn: () => void) => requestAnimationFrame(fn); - -export const SideNav = <C extends React.ElementType = 'a'>(props: SideNavProps<C>) => { - const { - navItems, - ariaLabel, - linkAs, - breakToBottomContent, - breakToHeader, - showDividers = true, - hideSubItemIcons = false, - className, - ...rest - } = props; - const isSmallLayout = useLayout(['mobile', 'tablet']); - const { menuOpen, context, getFloatingProps, floating, headerType, y } = React.useContext(LayoutContext); - const { hasSidenav } = useSidenavRendered(headerType, props); - - // If the sidenav is rendered in the header or not passed, we don't need to render it - if (!hasSidenav) { - return null; - } - - const BEM = cn(styles['sidenav'], className, { - [styles['sidenav--has-dividers']]: showDividers, - [styles['sidenav--hide-subitem-icons']]: hideSubItemIcons, - }); - - const renderSidebar = ( - <Print visibility="hide"> - <nav data-name="sidenav" {...rest} className={BEM} aria-label={ariaLabel}> - <ul className={styles['sidenav__list']} role="menubar" aria-label={ariaLabel}> - {navItems.map((item, key) => ( - <SideNavItem as={linkAs} {...item} key={key} /> - ))} - </ul> - </nav> - </Print> - ); - - return !isSmallLayout ? ( - renderSidebar - ) : menuOpen ? ( - <FloatingOverlay lockScroll className={styles['sidenav__overlay']}> - <FloatingFocusManager context={context} order={['reference', 'content']}> - <div - {...getFloatingProps({ - style: { - paddingTop: y ?? 0, - }, - className: styles['sidenav'], - 'aria-label': ariaLabel, - })} - ref={floating} - > - {renderSidebar} - </div> - </FloatingFocusManager> - </FloatingOverlay> - ) : null; -}; - -const SideNavItem = <C extends React.ElementType = 'a'>(props: SideNavItem<C>) => { - const { icon, children, isActive, onClick, subItems, as, ...rest } = props; - - // we need access to onHeaderSidenavToggle to infer external control - const { toggleMenu, onHeaderSidenavToggle } = React.useContext(LayoutContext); - const isSmallLayout = useLayout(['mobile', 'tablet']); - - const SideNavItemBEM = cn(styles['sidenav__item'], { [styles['sidenav__item--current']]: isActive }); - const collapseId = React.useId(); - - const getIcon = (icon: string | IconProps) => { - const iconBEM = cn(styles['sidenav__icon']); - const defaultIconProps: Partial<IconProps> = { className: iconBEM }; - const iconProps: IconProps = - typeof icon === 'string' - ? { ...defaultIconProps, name: icon } - : { ...defaultIconProps, ...icon, className: cn(defaultIconProps.className, icon?.className) }; - - return <Icon {...iconProps} />; - }; - - // robust click handler - // - calls consumer onClick (e.g., React Router navigate) - // - stops propagation so overlay/outside handlers don't see this - // - if we own the menu state (no external toggle callback), close the menu - // and DEFER the close on small layouts so the synthetic click can't "escape" - const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => { - onClick?.(e); - e.stopPropagation(); - - const isExternallyControlled = typeof onHeaderSidenavToggle === 'function'; // ADDED - - if (!isExternallyControlled) { - if (isSmallLayout) { - defer(() => toggleMenu()); - } else { - toggleMenu(); - } - } - }; - - return ( - <li data-name="sidenav-item" className={SideNavItemBEM} role="presentation"> - {subItems ? ( - <Collapse - id={collapseId} - hideCollapseText - open={isActive} - title={ - <span - {...(({ _href, ...spanRest }) => spanRest)(rest)} - className={styles['sidenav__link']} - noStyle={true} - role="menuitem" - aria-current={isActive ? 'page' : undefined} - > - {icon && getIcon(icon)} - <span className={styles['sidenav__title']}>{children}</span> - </span> - } - > - <ul className={styles['sidenav__list']} role="menubar"> - {subItems.map((item, key) => ( - <SideNavItem as={as} {...item} key={key} /> - ))} - </ul> - </Collapse> - ) : ( - // // TODO: Remove ts-ignore - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - <Anchor - {...rest} - as={as} - onClick={handleClick} - className={styles['sidenav__link']} - noStyle={true} - role="menuitem" - aria-current={isActive ? 'page' : undefined} - > - {icon && getIcon(icon)} - <span className={styles['sidenav__title']}>{children}</span> - </Anchor> - )} - </li> - ); -}; - -export default SideNav; diff --git a/libs/react-components/src/community/components/layout/sidenav/utility.ts b/libs/react-components/src/community/components/layout/sidenav/utility.ts deleted file mode 100644 index 46d79e308..000000000 --- a/libs/react-components/src/community/components/layout/sidenav/utility.ts +++ /dev/null @@ -1,13 +0,0 @@ -import useLayout from '../../../helpers/hooks/use-layout'; -import { IntentionalAny } from '../../../types'; -import { ILayoutProps } from '../layout/layout'; -import { SideNavProps } from './sidenav'; - -export const useSidenavRendered = (headerType: ILayoutProps['headerType'], props?: SideNavProps<IntentionalAny>) => { - const { breakToBottomContent, breakToHeader } = props || { breakToBottomContent: [], breakToHeader: [] }; - const shouldBreakToBottomContent = useLayout(breakToBottomContent || []) && headerType === 'public'; - const shouldBreakToHeader = useLayout(breakToHeader || []) && headerType === 'public'; - const hasSidenav = !!props && !(headerType === 'public' && (shouldBreakToBottomContent || shouldBreakToHeader)); - - return { shouldBreakToBottomContent, shouldBreakToHeader, hasSidenav }; -}; diff --git a/libs/react-components/src/community/components/map-components/base-map-selection/base-map-selection.module.scss b/libs/react-components/src/community/components/map-components/base-map-selection/base-map-selection.module.scss deleted file mode 100644 index 1c20bceb1..000000000 --- a/libs/react-components/src/community/components/map-components/base-map-selection/base-map-selection.module.scss +++ /dev/null @@ -1,253 +0,0 @@ -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -.tedi-base-map-selection { - &__wrapper { - position: relative; - display: inline-flex; - border: 1px solid var(--general-border-primary); - border-radius: var(--borders-04); - - &:hover { - cursor: pointer; - } - } - - &__content { - width: 100%; - height: 100%; - overflow: hidden; - border-radius: var(--borders-04); - - & > * { - width: 100%; - height: 100%; - object-fit: cover; - border-radius: var(--borders-04); - } - } -} - -.tedi-base-map-selection--historical { - &.tedi-base-map-selection__wrapper { - max-width: 144px; - height: 80px; - - &:hover { - border-color: var(--general-border-brand); - - .tedi-base-map-selection__title { - font-weight: 700; - color: var(--map-historical-text-hover); - } - } - - &:focus-visible { - border-color: var(--general-border-brand); - outline: var(--borders-02) solid var(--general-border-brand); - outline-offset: 1px; - - .tedi-map-selection__title { - font-weight: 700; - color: var(--general-text-brand); - } - } - - &.tedi-base-map-selection--selected { - border: 2px solid var(--general-border-white); - outline: var(--borders-02) solid var(--general-border-brand); - - .tedi-base-map-selection__title { - font-weight: 700; - color: var(--map-historical-text-selected); - background-color: var(--map-historical-text-background-selected); - } - - &:hover { - .tedi-base-map-selection__title { - color: var(--map-historical-text-selected); - } - } - } - - .tedi-base-map-selection__title { - padding: 4px; - background-color: var(--map-historical-text-background-default); - } - - @include breakpoints.media-breakpoint-down(md) { - width: 112px; - height: 56px; - } - } -} - -.tedi-base-map-selection__title { - position: absolute; - bottom: 0; - left: 0; - width: 100%; - padding: 2px; - overflow: hidden; - font-size: var(--size-00); - line-height: var(--size-00); - text-align: center; - text-overflow: ellipsis; - white-space: nowrap; - border-radius: 0 0 4px 4px; -} - -.tedi-base-map-selection--button { - width: 80px; - height: 80px; - - .tedi-base-map-selection__title { - color: var(--general-text-white); - background: linear-gradient(180deg, rgb(217 217 217 / 0%) 0%, rgb(0 0 0 / 70%) 100%); - } - - &:hover { - border-color: var(--neutral-100); - outline: var(--borders-01) solid var(--primary-500); - } - - &:focus-visible { - border-color: var(--general-border-white); - outline: var(--borders-02) solid var(--primary-500); - } - - @include breakpoints.media-breakpoint-down(md) { - width: 56px; - height: 56px; - - .tedi-base-map-selection__title { - display: none; - } - } -} - -.tedi-base-map-selection--selection { - flex-direction: column; - border: 0; - - .tedi-base-map-selection__title { - position: relative; - margin-top: 4px; - - @include breakpoints.media-breakpoint-down(md) { - display: none; - } - } - - &:hover, - &:focus-visible { - font-weight: 700; - color: var(--general-border-brand); - border: 0; - } - - .tedi-base-map-selection__content { - position: relative; - display: grid; - place-items: center; - width: 76px; - height: 76px; - border: 1px solid var(--general-border-primary); - - @include breakpoints.media-breakpoint-down(md) { - width: 56px; - height: 56px; - } - } - - &:not(.tedi-base-map-selection--multiple) { - &:hover, - &:focus-visible { - .tedi-base-map-selection__content { - border-color: var(--general-border-brand); - outline: var(--borders-02) solid var(--primary-500); - outline-offset: 1px; - } - } - } -} - -.tedi-base-map-selection--multiple { - &:not(.tedi-base-map-selection--selection) { - &::after { - position: absolute; - top: 4px; - left: 4px; - z-index: -1; - width: 100%; - height: 100%; - content: ''; - background-color: var(--neutral-900); - border: 1px solid var(--neutral-900); - border-radius: 4px; - opacity: 0.7; - } - - &:active, - &:hover { - &::after { - border: 1px solid var(--neutral-100); - outline: var(--borders-01) solid var(--primary-500); - } - } - - &:focus-visible { - &::after { - background-color: var(--neutral-100); - border: 1px solid var(--neutral-100); - outline: var(--borders-02) solid var(--primary-500); - } - } - } - - &.tedi-base-map-selection--selection { - .tedi-base-map-selection__content { - width: 76px; - height: 76px; - overflow: visible; - - &::after { - position: absolute; - top: 2px; - left: 2px; - z-index: -1; - width: 76px; - height: 76px; - content: ''; - background-color: var(--neutral-900); - border: 1px solid var(--neutral-900); - border-radius: 4px; - opacity: 0.7; - } - } - - &:hover { - > .tedi-base-map-selection__content { - border: 1px solid var(--neutral-100); - outline: var(--borders-01) solid var(--primary-500); - - &::after { - border: 1px solid var(--neutral-100); - outline: var(--borders-01) solid var(--primary-500); - } - } - } - - &:focus-visible { - > .tedi-base-map-selection__content { - border: 1px solid var(--general-border-white); - outline: var(--borders-02) solid var(--primary-500); - - &::after { - background-color: var(--neutral-100); - border: 1px solid var(--neutral-100); - outline: var(--borders-02) solid var(--primary-500); - } - } - } - } -} diff --git a/libs/react-components/src/community/components/map-components/base-map-selection/base-map-selection.stories.tsx b/libs/react-components/src/community/components/map-components/base-map-selection/base-map-selection.stories.tsx deleted file mode 100644 index fd4290825..000000000 --- a/libs/react-components/src/community/components/map-components/base-map-selection/base-map-selection.stories.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Col, Row, Text, TextProps, VerticalSpacing } from '../../../../tedi'; -import BaseMapSelection, { BaseMapSelectionProps } from './base-map-selection'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=179-24836&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof BaseMapSelection> = { - component: BaseMapSelection, - title: 'Community/Map components/BaseMapSelection', -}; - -export default meta; -type Story = StoryObj<typeof BaseMapSelection>; - -const baseMapSelectionStateArray = ['Default', 'Hover', 'Focus', 'Selected']; -type TemplateMultipleProps<Type = typeof baseMapSelectionStateArray> = BaseMapSelectionProps & { - array: Type; - titleColor: TextProps['color']; -}; - -const TemplateColumn: StoryFn<TemplateMultipleProps> = (args) => { - const { array, titleColor } = args; - - return ( - <> - <VerticalSpacing size={0.5}> - {array.map((value, key) => ( - <Row key={key}> - <Col md={1} className="display-flex align-items-center"> - <Text color={titleColor} modifiers="bold"> - {value} - </Text> - </Col> - <Col className="display-flex align-items-center gap-3"> - <BaseMapSelection selected={value === 'Selected'} id={value} {...args} /> - </Col> - </Row> - ))} - </VerticalSpacing> - </> - ); -}; - -export const Default: Story = { - args: { - title: 'Text', - content: <img src="https://snazzy-maps-cdn.azureedge.net/assets/72543-assassins-creed-iv.png" alt="Base map" />, - }, -}; - -export const BaseMapStates: StoryObj<TemplateMultipleProps> = { - render: TemplateColumn, - args: { - array: ['Default', 'Hover', 'Focus'], - type: 'button', - title: 'Aluskaardid', - content: <img src="https://snazzy-maps-cdn.azureedge.net/assets/72543-assassins-creed-iv.png" alt="Base map" />, - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focusVisible: '#Focus', - }, - }, -}; - -export const Stack: StoryObj<TemplateMultipleProps> = { - render: TemplateColumn, - args: { - array: ['Default', 'Hover', 'Focus'], - type: 'button', - title: 'Aluskaardid', - content: <img src="https://snazzy-maps-cdn.azureedge.net/assets/72543-assassins-creed-iv.png" alt="Base map" />, - multiple: true, - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focusVisible: '#Focus', - }, - }, -}; - -export const Selection: StoryObj<TemplateMultipleProps> = { - render: TemplateColumn, - args: { - array: ['Default', 'Hover', 'Focus'], - type: 'selection', - title: 'Aluskaardid', - content: <img src="https://snazzy-maps-cdn.azureedge.net/assets/72543-assassins-creed-iv.png" alt="Base map" />, - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focusVisible: '#Focus', - }, - }, -}; - -export const Historical: Story = { - args: { - title: 'Text', - content: <img src="https://snazzy-maps-cdn.azureedge.net/assets/8097-wy.png" alt="Historical map" />, - type: 'historical', - }, -}; - -export const HistoricalMapStates: StoryObj<TemplateMultipleProps> = { - render: TemplateColumn, - args: { - array: ['Default', 'Hover', 'Focus', 'Selected'], - type: 'historical', - title: 'Ajalooline kaart', - content: <img src="https://snazzy-maps-cdn.azureedge.net/assets/8097-wy.png" alt="Historical map" />, - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focusVisible: '#Focus', - }, - }, -}; diff --git a/libs/react-components/src/community/components/map-components/base-map-selection/base-map-selection.tsx b/libs/react-components/src/community/components/map-components/base-map-selection/base-map-selection.tsx deleted file mode 100644 index fd6823992..000000000 --- a/libs/react-components/src/community/components/map-components/base-map-selection/base-map-selection.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import classNames from 'classnames'; -import { JSX } from 'react'; - -import styles from './base-map-selection.module.scss'; - -type BaseMapSelectionType = 'button' | 'historical' | 'selection'; - -export interface BaseMapSelectionProps { - /** - * The title displayed within the component. - */ - title: string; - /** - * The main content of the selection card. Can be any valid React node. - */ - content: React.ReactNode; - /** - * Indicates whether the current item is selected. - * Used to apply specific visual styles. - */ - selected?: boolean; - /** - * Callback function triggered when the selection is clicked - * or activated via keyboard (Enter or Space). - */ - onSelect?: () => void; - /** - * The type of the selection, which controls styling. - * - `'button'`: default interactive selection - * - `'historical'`: styled for historical context - * - `'selection'`: styled for multi-selection context - */ - type: BaseMapSelectionType; - /** - * Optional custom class name to apply additional styles. - */ - className?: string; - /** - * Optional HTML `id` attribute to identify the element. - */ - id?: string; - /** - * When `true`, indicates that multiple selections are allowed. - * Affects the visual style. - */ - multiple?: boolean; -} - -export const BaseMapSelection = (props: BaseMapSelectionProps): JSX.Element => { - const { title, content, selected, onSelect, type = 'button', className, id, multiple } = props; - const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => { - if (e.key === 'Enter' || e.key === ' ') { - e.preventDefault(); - onSelect?.(); - } - }; - - const mapSelectionBEM = classNames( - styles['tedi-base-map-selection__wrapper'], - selected && styles['tedi-base-map-selection--selected'], - type && styles[`tedi-base-map-selection--${type}`], - multiple && styles['tedi-base-map-selection--multiple'], - className - ); - - return ( - <div role="button" tabIndex={0} onClick={onSelect} onKeyDown={handleKeyDown} className={mapSelectionBEM} id={id}> - <div className={styles['tedi-base-map-selection__content']}>{content}</div> - <div className={styles['tedi-base-map-selection__title']}>{title}</div> - </div> - ); -}; - -export default BaseMapSelection; diff --git a/libs/react-components/src/community/components/map-components/button-group/button-group.module.scss b/libs/react-components/src/community/components/map-components/button-group/button-group.module.scss deleted file mode 100644 index 7ec6fe60f..000000000 --- a/libs/react-components/src/community/components/map-components/button-group/button-group.module.scss +++ /dev/null @@ -1,130 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -.tedi-button-group { - display: flex; - gap: 0; - overflow: hidden; - - &--horizontal { - flex-direction: row; - - .tedi-button-group__item { - &:first-child { - @include mixins.responsive-styles(border-top-left-radius, button-radius-sm); - @include mixins.responsive-styles(border-bottom-left-radius, button-radius-sm); - } - - &:not(:last-child) { - border-right-color: var(--alpha-01); - - &:active, - &:hover { - border-right-color: var(--button-primary-border-hover); - } - } - - &:last-child { - @include mixins.responsive-styles(border-top-right-radius, button-radius-sm); - @include mixins.responsive-styles(border-bottom-right-radius, button-radius-sm); - } - } - - .tedi-button-group__suffix { - @include mixins.responsive-styles(border-bottom-right-radius, button-radius-sm); - @include mixins.responsive-styles(border-top-right-radius, button-radius-sm); - } - - .tedi-button-group__prefix { - border-right: 0; - - @include mixins.responsive-styles(border-bottom-left-radius, button-radius-sm); - @include mixins.responsive-styles(border-bottom-right-radius, button-radius-sm); - } - } - - &--vertical { - flex-direction: column; - - .tedi-button-group__item { - &:first-child { - @include mixins.responsive-styles(border-top-left-radius, button-radius-sm); - @include mixins.responsive-styles(border-top-right-radius, button-radius-sm); - } - - &:not(:last-child) { - border-bottom-color: var(--alpha-01); - - &:active, - &:hover { - border-bottom-color: var(--button-primary-border-hover); - } - } - - &:last-child { - @include mixins.responsive-styles(border-bottom-left-radius, button-radius-sm); - @include mixins.responsive-styles(border-bottom-right-radius, button-radius-sm); - } - } - - .tedi-button-group__suffix, - .tedi-button-group__prefix { - width: var(--dimensions-16); - - > span { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - } - - .tedi-button-group__suffix { - @include mixins.responsive-styles(border-bottom-right-radius, button-radius-sm); - @include mixins.responsive-styles(border-bottom-left-radius, button-radius-sm); - } - - .tedi-button-group__prefix { - border-bottom: 0; - - @include mixins.responsive-styles(border-top-right-radius, button-radius-sm); - @include mixins.responsive-styles(border-top-left-radius, button-radius-sm); - } - } - - .tedi-button-group__item { - display: flex; - align-items: center; - justify-content: center; - padding-top: calc(var(--padding-top) - 1px); - padding-bottom: calc(var(--padding-bottom) - 1px); - text-align: center; - cursor: pointer; - border-radius: 0; - - @include mixins.responsive-styles(--padding-top, button-md-padding-y); - @include mixins.responsive-styles(--padding-bottom, button-md-padding-y); - @include mixins.responsive-styles(padding-left, button-md-padding-x); - @include mixins.responsive-styles(padding-right, button-md-padding-x); - - @include breakpoints.media-breakpoint-down(md) { - flex: 1; - } - } - - &--stretch { - .tedi-button-group__item { - flex: 1; - } - } - - &__prefix, - &__suffix { - display: flex; - align-items: center; - justify-content: center; - padding: 0 0.5rem; - font-weight: 700; - background: var(--general-surface-tertiary); - border: 1px solid var(--button-primary-border-default); - } -} diff --git a/libs/react-components/src/community/components/map-components/button-group/button-group.tsx b/libs/react-components/src/community/components/map-components/button-group/button-group.tsx deleted file mode 100644 index 6b637da67..000000000 --- a/libs/react-components/src/community/components/map-components/button-group/button-group.tsx +++ /dev/null @@ -1,118 +0,0 @@ -import cn from 'classnames'; -import { Children, cloneElement, isValidElement, JSX, ReactNode } from 'react'; - -import MapButton, { MapButtonProps } from '../map-button/map-button'; -import styles from './button-group.module.scss'; - -export type ButtonGroupProps = { - /** - * The child components to render inside the ButtonGroup. - * Typically, these should be `<Button>` components. - */ - children: ReactNode; - /** - * The layout direction of the ButtonGroup. - * @default horizontal - */ - direction?: 'horizontal' | 'vertical'; - /** - * Callback function triggered when the selected button changes. - * Receives the `id` of the selected button as an argument. - */ - onSelectionChange?: (id: string) => void; - /** - * Whether all buttons in the group should have equal width and stretched inside their parent element. - * If `true`, all buttons will take up equal space. - * If `false`, the button widths will be determined by their content. - * @default true - */ - stretch?: boolean; - /** - * A label for the button group, used for accessibility. - * Required if the group does not have a visible label. - */ - ariaLabel?: string; - /** - * Additional custom CSS classes to apply to the ButtonGroup container - */ - className?: string; - /** - * Content to display before the buttons (prefix) - */ - prefix?: string; - /** - * Content to display after the buttons (suffix) - */ - suffix?: string; - /** - * CSS class for the prefix element - */ - prefixClassName?: string; - /** - * CSS class for the suffix element - */ - suffixClassName?: string; -}; - -export const ButtonGroup = (props: ButtonGroupProps): JSX.Element => { - const { - children, - className, - direction = 'horizontal', - onSelectionChange, - stretch = false, - ariaLabel, - prefix, - suffix, - prefixClassName, - suffixClassName, - } = props; - - return ( - <div - className={cn( - styles['tedi-button-group'], - styles[`tedi-button-group--${direction}`], - { - [styles['tedi-button-group--stretch']]: stretch, - }, - className - )} - role="group" - aria-label={ariaLabel} - > - {prefix && ( - <div className={cn(styles['tedi-button-group__prefix'], prefixClassName)}> - <span>{prefix}</span> - </div> - )} - - {Children.map(children, (child) => { - if (isValidElement(child) && child.type === MapButton) { - const typedChild = child as React.ReactElement<MapButtonProps>; - return cloneElement(typedChild, { - className: cn(styles['tedi-button-group__item'], { - [styles['tedi-button-group__item--active']]: typedChild.props.isActive, - [styles['tedi-button-group__item--disabled']]: typedChild.props.disabled, - }), - onClick: (event: React.MouseEvent<HTMLButtonElement>) => { - if (!typedChild.props.disabled) { - typedChild.props.onClick?.(event); - onSelectionChange?.(typedChild.props.id as string); - } - }, - }); - } - return child; - })} - - {suffix && ( - <div className={cn(styles['tedi-button-group__suffix'], suffixClassName)}> - <span>{suffix}</span> - </div> - )} - </div> - ); -}; - -export default ButtonGroup; diff --git a/libs/react-components/src/community/components/map-components/carousel/carousel.module.scss b/libs/react-components/src/community/components/map-components/carousel/carousel.module.scss deleted file mode 100644 index 51579f099..000000000 --- a/libs/react-components/src/community/components/map-components/carousel/carousel.module.scss +++ /dev/null @@ -1,40 +0,0 @@ -.tedi-carousel__wrapper { - position: relative; - width: 100%; - height: auto; - overflow: hidden; -} - -.tedi-carousel__navigation-button { - position: absolute; - top: 50%; - z-index: 10; - transform: translateY(-50%); -} - -.tedi-carousel__prev { - position: absolute !important; - left: 0; -} - -.tedi-carousel__next { - position: absolute !important; - right: 0; -} - -.tedi-carousel__viewport { - position: relative; - width: 100%; - overflow: hidden; -} - -.tedi-carousel__carousel-track { - display: flex; - gap: 10px; - transition: transform 0.3s ease; - will-change: transform; -} - -.tedi-carousel__item { - flex-shrink: 0; -} diff --git a/libs/react-components/src/community/components/map-components/carousel/carousel.stories.tsx b/libs/react-components/src/community/components/map-components/carousel/carousel.stories.tsx deleted file mode 100644 index aad43bb79..000000000 --- a/libs/react-components/src/community/components/map-components/carousel/carousel.stories.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import BaseMapSelection from '../base-map-selection/base-map-selection'; -import { Carousel } from './carousel'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=1137-88336&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof Carousel> = { - component: Carousel, - title: 'Community/Map components/Carousel', -}; - -export default meta; -type Story = StoryObj<typeof Carousel>; - -const mockChildren = Array.from({ length: 10 }, (_, i) => ( - <BaseMapSelection - key={i} - id={`map-${i}`} - type="historical" - title="Ajalooline kaart" - content={<img src="https://snazzy-maps-cdn.azureedge.net/assets/72543-assassins-creed-iv.png" alt="" />} - /> -)); - -export const Default: Story = { - args: { - itemCountShown: 6, - children: mockChildren, - }, - render: (args) => <Carousel {...args} />, -}; diff --git a/libs/react-components/src/community/components/map-components/carousel/carousel.tsx b/libs/react-components/src/community/components/map-components/carousel/carousel.tsx deleted file mode 100644 index c9bc259a3..000000000 --- a/libs/react-components/src/community/components/map-components/carousel/carousel.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import classNames from 'classnames'; -import React, { useState } from 'react'; - -import { FloatingButton } from '../../../../tedi'; -import styles from './carousel.module.scss'; - -export interface CarouselProps { - /** - * Number of items visible at once in the carousel viewport. - * Determines the width of each item and how many are shown side by side. - */ - itemCountShown: number; - /** - * React children elements to be rendered inside the carousel. - * Typically a list of identical or similar components like cards or items. - */ - children: React.ReactNode; - /** - * Optional class name to apply custom styling to the outermost carousel wrapper. - */ - className?: string; -} - -export const Carousel = (props: CarouselProps): JSX.Element => { - const { itemCountShown, children, className } = props; - const [scrollIndex, setScrollIndex] = useState(0); - const items = React.Children.toArray(children); - const totalItems = items.length; - - const handleNext = () => { - if (scrollIndex + itemCountShown < totalItems) { - setScrollIndex((prev) => prev + 1); - } - }; - - const handlePrev = () => { - if (scrollIndex > 0) { - setScrollIndex((prev) => prev - 1); - } - }; - - const translateX = `translateX(-${(100 / itemCountShown) * scrollIndex}%)`; - - return ( - <div className={`${styles['tedi-carousel__wrapper']} ${className ?? ''}`}> - <FloatingButton - className={classNames(styles['tedi-carousel__navigation-button'], styles['tedi-carousel__prev'])} - onClick={handlePrev} - visualType="secondary" - disabled={scrollIndex === 0} - icon="west" - > - Prev - </FloatingButton> - - <div className={styles['tedi-carousel__viewport']}> - <div className={styles['tedi-carousel__carousel-track']} style={{ transform: translateX }}> - {items.map((child, index) => ( - <div key={index} className={styles['tedi-carousel__item']} style={{ flex: `0 0 ${100 / itemCountShown}%` }}> - {child} - </div> - ))} - </div> - </div> - - <FloatingButton - className={classNames(styles['tedi-carousel__navigation-button'], styles['tedi-carousel__next'])} - onClick={handleNext} - visualType="secondary" - disabled={scrollIndex + itemCountShown >= totalItems} - icon="east" - > - Next - </FloatingButton> - </div> - ); -}; - -export default Carousel; diff --git a/libs/react-components/src/community/components/map-components/color-and-icon-picker/color-and-icon-picker.module.scss b/libs/react-components/src/community/components/map-components/color-and-icon-picker/color-and-icon-picker.module.scss deleted file mode 100644 index 66e52697d..000000000 --- a/libs/react-components/src/community/components/map-components/color-and-icon-picker/color-and-icon-picker.module.scss +++ /dev/null @@ -1,124 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -:root { - --selected-option-width: 36px; - --selected-option-height: 20px; -} - -.tedi-color-and-icon-picker { - display: flex; - align-items: center; - background: var(--form-input-background-default); - border: 1px solid var(--form-input-border-default); - - @include mixins.responsive-styles(border-radius, form-field-radius); - @include mixins.responsive-styles(height, form-field-height); - @include mixins.responsive-styles(padding, form-field-padding-y-md-default); - - & [data-name='icon'] { - color: var(--general-icon-secondary); - } - - &__items { - display: flex; - } - - &__wrapper { - flex-wrap: wrap; - max-width: 220px; - - @include mixins.responsive-styles(gap, form-field-inner-spacing); - @include mixins.responsive-styles(padding-top, dropdown-body-padding-y); - @include mixins.responsive-styles(padding-bottom, dropdown-body-padding-y); - @include mixins.responsive-styles(padding-left, dropdown-body-padding-x); - @include mixins.responsive-styles(padding-right, dropdown-body-padding-x); - - > button { - padding: 0; - background: none; - } - } - - &:hover { - border-color: var(--card-border-selected); - } - - &:focus-visible { - border-color: var(--card-border-selected); - outline: var(--borders-02) solid var(--primary-500); - outline-offset: 1px; - } - - &__inline { - display: flex; - gap: 5px; - width: 100%; - padding: 0; - } -} - -.tedi-visual-option__icon { - color: inherit; -} - -.tedi-color-and-icon-picker__dropdown-item { - display: flex; - gap: 10px; - align-items: center; - cursor: pointer; -} - -.tedi-color-and-icon-picker__visual { - line-height: 1; - - @include mixins.responsive-styles(border-radius, card-radius-rounded); - @include mixins.responsive-styles(width, form-radio-selection-size); - @include mixins.responsive-styles(height, form-radio-selection-size); - - &--icon { - line-height: 0.5; - border: 1px solid var(--alpha-white-20); - } - - &--color { - border: 1px solid var(--form-input-border-default); - } - - &--selected { - width: var(--selected-option-width); - height: var(--selected-option-height); - border-color: var(--neutral-100); - border-radius: 3px; - } - - &--none { - position: relative; - overflow: hidden; - background: var(--neutral-100); - background-color: var(--alpha-01); - border: 1px solid var(--form-input-border-default); - - &::before { - position: absolute; - top: 50%; - left: 0; - width: 100%; - height: 2px; - content: ''; - background-color: var(--red-700); - transform: rotate(45deg); - transform-origin: center; - } - } - - &:hover, - &--active { - cursor: pointer; - outline: 2px solid var(--card-border-selected); - outline-offset: 1px; - - & [data-name='icon'] { - color: var(--general-icon-brand); - } - } -} diff --git a/libs/react-components/src/community/components/map-components/color-and-icon-picker/color-and-icon-picker.stories.tsx b/libs/react-components/src/community/components/map-components/color-and-icon-picker/color-and-icon-picker.stories.tsx deleted file mode 100644 index 309daa728..000000000 --- a/libs/react-components/src/community/components/map-components/color-and-icon-picker/color-and-icon-picker.stories.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; -import { useState } from 'react'; - -import ColorAndIconPicker from './color-and-icon-picker'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=109-25209&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof ColorAndIconPicker> = { - component: ColorAndIconPicker, - title: 'Community/Map components/ColorAndIconPicker', -}; - -export default meta; -type Story = StoryObj<typeof ColorAndIconPicker>; - -const InteractiveTemplate = (args: React.ComponentProps<typeof ColorAndIconPicker>) => { - const [selectedValue, setSelectedValue] = useState(args.options[0].value); - - return ( - <> - <ColorAndIconPicker {...args} selectedValue={selectedValue} onSelect={setSelectedValue} /> - </> - ); -}; - -export const ColorSelector: Story = { - render: (args) => <InteractiveTemplate {...args} />, - args: { - type: 'color', - label: { children: 'Värv' }, - name: 'color-selector', - options: [ - { value: 'red', color: '#ef4444', label: 'Red' }, - { value: 'orange', color: '#f97316', label: 'Orange' }, - { value: 'amber', color: '#f59e0b', label: 'Amber' }, - { value: 'yellow', color: '#eab308', label: 'Yellow' }, - { value: 'lime', color: '#84cc16', label: 'Lime' }, - { value: 'green', color: '#10b981', label: 'Green' }, - { value: 'teal', color: '#14b8a6', label: 'Teal' }, - { value: 'blue', color: '#3b82f6', label: 'Blue' }, - { value: 'indigo', color: '#6366f1', label: 'Indigo' }, - { value: 'violet', color: '#8b5cf6', label: 'Violet' }, - { value: 'pink', color: '#ec4899', label: 'Pink' }, - { value: 'none', label: 'transparent' }, - ], - }, -}; - -export const IconSelector: Story = { - render: (args) => <InteractiveTemplate {...args} />, - args: { - type: 'icon', - label: { children: 'Ikoon', required: true }, - name: 'color-selector', - options: [ - { value: 'home', icon: 'home', label: 'Home' }, - { value: 'home1', icon: 'cottage', label: 'Home' }, - { value: 'home2', icon: 'foundation', label: 'Home' }, - { value: 'home3', icon: 'location_home', label: 'Home' }, - { value: 'home4', icon: 'cabin', label: 'Home' }, - { value: 'home5', icon: 'nest_multi_room', label: 'Home' }, - { value: 'home6', icon: 'home', label: 'Home' }, - { value: 'home7', icon: 'cottage', label: 'Home' }, - { value: 'home8', icon: 'foundation', label: 'Home' }, - { value: 'home9', icon: 'location_home', label: 'Home' }, - { value: 'home10', icon: 'cabin', label: 'Home' }, - { value: 'home111', icon: 'nest_multi_room', label: 'Home' }, - ], - }, -}; - -export const IconSelectorWithDescriptors: Story = { - render: (args) => <InteractiveTemplate {...args} />, - args: { - type: 'icon', - label: { children: 'Tüüp' }, - name: 'icon-selector', - layout: 'column', - showLabels: true, - options: [ - { value: 'punkt', icon: 'location_on', label: 'Punkt' }, - { value: 'joon', icon: 'show_chart', label: 'Joon' }, - { value: 'ala', icon: 'polyline', label: 'Ala' }, - ], - }, -}; diff --git a/libs/react-components/src/community/components/map-components/color-and-icon-picker/color-and-icon-picker.tsx b/libs/react-components/src/community/components/map-components/color-and-icon-picker/color-and-icon-picker.tsx deleted file mode 100644 index 4fdd3e4d1..000000000 --- a/libs/react-components/src/community/components/map-components/color-and-icon-picker/color-and-icon-picker.tsx +++ /dev/null @@ -1,183 +0,0 @@ -import classNames from 'classnames'; - -import { Button, Icon, Label, LabelProps } from '../../../../tedi'; -import MapDropdown, { MapDropdownItem } from '../map-dropdown/map-dropdown'; -import styles from './color-and-icon-picker.module.scss'; - -interface VisualOption { - /** - * Unique identifier for the option. Used as the value submitted in forms and selected tracking. - */ - value: string; - /** - * Optional human-readable label for the option. - */ - label?: string; - /** - * Optional color value (hex, rgb, etc.), used only when type is `'color'`. - */ - color?: string; - /** - * Optional icon name (from icon system), used only when type is `'icon'`. - */ - icon?: string; -} - -export interface ColorAndIconPickerProps { - /** - * Array of visual options to display in the selector. - * Each option may include a value, label, color (for color type), or icon (for icon type). - */ - options: VisualOption[]; - /** - * Currently selected option's value. - * This value is matched against the `options` array to determine which option is active. - */ - selectedValue: string; - /** - * Callback function that is triggered when an option is selected. - * Receives the selected option's value as a parameter. - */ - onSelect: (value: string) => void; - /** - * Type of visual representation to render. - * Can be either `'color'` (displays color swatches) or `'icon'` (displays icons). - */ - type: 'color' | 'icon'; - /** - * Optional custom class name to apply to the root element for additional styling. - */ - className?: string; - /** - * Optional props passed to the label component. - * Includes common label options like `children`, `required`, or `bold`. - */ - label?: LabelProps; - /** - * Name for the hidden input field, used for form submission. - * Also used to associate the label with the component. - */ - name: string; - layout?: 'row' | 'column'; - showLabels?: boolean; - showInline?: boolean; -} - -export const ColorAndIconPicker = (props: ColorAndIconPickerProps): JSX.Element => { - const { - options, - selectedValue, - onSelect, - type, - label, - name, - layout = 'row', - showLabels = false, - showInline = false, - } = props; - const selectedOption = options.find((opt) => opt.value === selectedValue) || options[0]; - - const renderSelectedVisual = (option: VisualOption) => ( - <div - className={classNames(styles['tedi-color-and-icon-picker__visual--selected'], { - [styles['tedi-color-and-icon-picker__visual--none']]: option.value === 'none', - })} - style={type === 'color' ? { backgroundColor: option.color } : {}} - > - {type === 'icon' && option.icon && <Icon name={option.icon} />} - </div> - ); - - const renderDropdownVisual = (option: VisualOption) => { - return ( - <div - className={styles['tedi-color-and-icon-picker__dropdown-item']} - role="option" - aria-selected={option.value === selectedValue} - > - <> - {showLabels ? ( - <div className={styles['tedi-color-and-icon-picker__dropdown-item']}> - {type === 'icon' && option.icon && ( - <Icon name={option.icon} className={styles['tedi-visual-option__icon']} /> - )} - {option.label ?? option.value} - </div> - ) : ( - <div - className={classNames(styles['tedi-color-and-icon-picker__visual'], { - [styles['tedi-color-and-icon-picker__visual--active']]: option.value === selectedValue, - [styles['tedi-color-and-icon-picker__visual--none']]: option.value === 'none', - [styles[`tedi-color-and-icon-picker__visual--${type}`]]: type, - })} - style={option.value !== 'none' && type === 'color' ? { backgroundColor: option.color } : {}} - > - {type === 'icon' && option.icon && <Icon name={option.icon} color="secondary" />} - </div> - )} - </> - </div> - ); - }; - - const dropdownItems: MapDropdownItem[] = options.map((option) => ({ - children: renderDropdownVisual(option), - onClick: () => onSelect(option.value), - isActive: option.value === selectedValue, - })); - - return ( - <> - <Label htmlFor={name} {...label} /> - {showInline ? ( - <div - className={classNames( - styles['tedi-color-and-icon-picker__wrapper'], - styles['tedi-color-and-icon-picker__inline'], - styles[`tedi-color-and-icon-picker__layout--${layout}`] - )} - role="listbox" - aria-labelledby={name} - > - {options.map((option) => ( - <button - key={option.value} - type="button" - className={classNames(styles['tedi-color-and-icon-picker__visual'], { - [styles['tedi-color-and-icon-picker__visual--active']]: option.value === selectedValue, - [styles['tedi-color-and-icon-picker__visual--none']]: option.value === 'none', - [styles[`tedi-color-and-icon-picker__visual--${type}`]]: type, - })} - style={option.value !== 'none' && type === 'color' ? { backgroundColor: option.color } : {}} - onClick={() => onSelect(option.value)} - aria-selected={option.value === selectedValue} - role="option" - > - {type === 'icon' && option.icon && ( - <Icon name={option.icon} className={styles['tedi-visual-option__icon']} /> - )} - </button> - ))} - </div> - ) : ( - <MapDropdown className={!showLabels ? styles['tedi-color-and-icon-picker__wrapper'] : ''} layout={layout}> - <MapDropdown.Trigger> - <Button - className={styles['tedi-color-and-icon-picker']} - aria-haspopup="listbox" - aria-expanded="false" - noStyle - > - {renderSelectedVisual(selectedOption)} - <Icon name="arrow_drop_down" /> - </Button> - </MapDropdown.Trigger> - <MapDropdown.Content items={dropdownItems} /> - </MapDropdown> - )} - {name && <input type="hidden" name={name} value={selectedValue} />} - </> - ); -}; - -export default ColorAndIconPicker; diff --git a/libs/react-components/src/community/components/map-components/comparison/comparison.module.scss b/libs/react-components/src/community/components/map-components/comparison/comparison.module.scss deleted file mode 100644 index 28fd5b8d7..000000000 --- a/libs/react-components/src/community/components/map-components/comparison/comparison.module.scss +++ /dev/null @@ -1,129 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -.tedi-comparison { - &__wrapper { - user-select: none; - - &--relative { - position: relative; - } - - &--absolute { - position: absolute; - } - - &--fixed { - position: fixed; - } - - &--static { - position: static; - } - } - - &__layer { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - overflow: hidden; - pointer-events: none; - object-fit: cover; - } - - &__drag-indicator { - position: absolute; - top: 0; - bottom: 0; - z-index: 50; - pointer-events: none; - - @include breakpoints.media-breakpoint-down(md) { - inset: auto 0; - z-index: 100; - width: 100%; - height: auto; - } - } - - &__primary { - outline: 4px solid var(--drag-indicator-accent); - outline-offset: -4px; - } - - &__drag-line { - position: absolute; - top: 0; - bottom: 0; - z-index: 10; - background-color: var(--drag-indicator-accent); - transform: translateX(-2px); - - @include mixins.responsive-styles(width, drag-indicator-vertical-width); - - @include breakpoints.media-breakpoint-down(md) { - top: auto; - right: 0; - left: 0; - width: 100%; - transform: translateY(0); - - @include mixins.responsive-styles(height, drag-indicator-vertical-width); - } - } - - &__drag-handle { - position: absolute; - top: 50%; - z-index: 12; - display: flex; - align-items: center; - justify-content: center; - margin-right: calc((var(--button-sm-icon-size) / 2) * -1); - color: var(--button-floating-secondary-text-default); - background-color: var(--button-floating-secondary-background-default); - box-shadow: 0 4px 10px 0 var(--alpha-14); - transform: translate(-50%, -50%); - - @include mixins.responsive-styles(--handle-button-size, button-sm-icon-size); - @include mixins.responsive-styles(width, button-sm-icon-size); - @include mixins.responsive-styles(height, button-sm-icon-size); - @include mixins.responsive-styles(border-radius, button-radius-default); - - &__icon { - color: var(--general-text-brand); - - @include breakpoints.media-breakpoint-down(md) { - transform: rotate(90deg); - } - } - - > span { - width: 100%; - } - - @include breakpoints.media-breakpoint-down(md) { - top: auto; - left: 50%; - margin-right: 0; - margin-bottom: calc((var(--button-icon-size) / 2) * -1); - - @include mixins.responsive-styles(--button-icon-size, button-sm-icon-size); - } - } - - &__close-button { - position: fixed; - top: 20%; - z-index: 200; - flex-shrink: 0; - margin-left: -1.25rem; - - @include breakpoints.media-breakpoint-down(md) { - top: auto; - bottom: 20%; - } - } -} diff --git a/libs/react-components/src/community/components/map-components/comparison/comparison.stories.tsx b/libs/react-components/src/community/components/map-components/comparison/comparison.stories.tsx deleted file mode 100644 index ba74979e9..000000000 --- a/libs/react-components/src/community/components/map-components/comparison/comparison.stories.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import type { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import Comparison, { ComparisonProps } from './comparison'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=347-72393&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof Comparison> = { - component: Comparison, - title: 'Community/Map components/Comparison', -}; - -export default meta; -type Story = StoryObj<typeof Comparison>; - -const TemplateColumn: StoryFn<ComparisonProps> = (args) => { - return ( - <div style={{ width: '800px', height: '500px' }}> - <Comparison - {...args} - left={ - <img - src="https://snazzy-maps-cdn.azureedge.net/assets/8097-wy.png" - style={{ width: '100%', height: '100%', objectFit: 'cover' }} - alt="Layer A" - /> - } - right={ - <img - src="https://snazzy-maps-cdn.azureedge.net/assets/72543-assassins-creed-iv.png" - style={{ width: '100%', height: '100%', objectFit: 'cover' }} - alt="Layer B" - /> - } - /> - </div> - ); -}; - -export const Default: Story = { - render: TemplateColumn, -}; - -export const WithPrimaryLeft: Story = { - render: TemplateColumn, - args: { - primary: 'left', - }, -}; - -export const WithPrimaryRight: Story = { - render: TemplateColumn, - args: { - primary: 'right', - }, -}; - -export const WithCustomDimensions: Story = { - args: { - left: ( - <img - src="https://snazzy-maps-cdn.azureedge.net/assets/8097-wy.png" - style={{ width: '100%', height: '100%', objectFit: 'cover' }} - alt="Layer A" - /> - ), - right: ( - <img - src="https://snazzy-maps-cdn.azureedge.net/assets/72543-assassins-creed-iv.png" - style={{ width: '100%', height: '100%', objectFit: 'cover' }} - alt="Layer B" - /> - ), - width: '300px', - height: '200px', - }, -}; - -export const WithCloseButton: Story = { - render: TemplateColumn, - args: { - primary: 'right', - onClose: () => { - console.log('hello world'); - }, - }, -}; diff --git a/libs/react-components/src/community/components/map-components/comparison/comparison.tsx b/libs/react-components/src/community/components/map-components/comparison/comparison.tsx deleted file mode 100644 index ce2f07346..000000000 --- a/libs/react-components/src/community/components/map-components/comparison/comparison.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import classNames from 'classnames'; -import React, { JSX, useRef, useState } from 'react'; - -import { Button, Icon, isBreakpointBelow, useBreakpoint, useLabels } from '../../../../tedi'; -import styles from './comparison.module.scss'; - -export interface ComparisonProps { - /** - * React node rendered on the left side of the comparison view. - */ - left: React.ReactNode; - /** - * React node rendered on the right side of the comparison view. - */ - right: React.ReactNode; - /** - * Which side is treated as the primary content. - * This may influence styling or overlay behavior. - * Defaults to 'left' if not specified. - */ - primary?: 'left' | 'right'; - /** - * Width of the comparison container. - * Accepts string (e.g., "100%", "400px") or number (pixels). - */ - width?: string | number; - /** - * Height of the comparison container. - * Accepts string or number, similar to width. - */ - height?: string | number; - /** - * CSS position property for the container. - * Determines how the component is positioned in the layout. - * Defaults to 'relative'. - */ - position?: 'relative' | 'absolute' | 'fixed' | 'static'; - /** - * Optional close handler. When provided, a close button is displayed, - * and the handler is called when the button is clicked. - */ - onClose?: () => void; -} - -export const Comparison = (props: ComparisonProps): JSX.Element => { - const { left, right, primary, width, height, position = 'relative', onClose } = props; - const containerRef = useRef<HTMLDivElement>(null); - const currentBreakpoint = useBreakpoint(); - const [sliderPercent, setSliderPercent] = useState(50); - const isMobile = isBreakpointBelow(currentBreakpoint, 'md'); - const { getLabel } = useLabels(); - - const calculateSliderPercent = (x: number, y: number) => { - if (!containerRef.current) return; - const rect = containerRef.current.getBoundingClientRect(); - - const newPercent = isMobile ? ((y - rect.top) / rect.height) * 100 : ((x - rect.left) / rect.width) * 100; - - setSliderPercent(Math.max(0, Math.min(newPercent, 100))); - }; - - const handleMouseMove = (e: React.MouseEvent) => { - if (e.buttons !== 1) return; - calculateSliderPercent(e.clientX, e.clientY); - }; - - const handleMouseDown = (e: React.MouseEvent) => { - calculateSliderPercent(e.clientX, e.clientY); - }; - - const handleTouchMove = (e: React.TouchEvent) => { - const touch = e.touches[0]; - if (!touch) return; - calculateSliderPercent(touch.clientX, touch.clientY); - }; - - const handleTouchStart = (e: React.TouchEvent) => { - const touch = e.touches[0]; - if (!touch) return; - calculateSliderPercent(touch.clientX, touch.clientY); - }; - - const clipPathStyle = isMobile ? `inset(0 0 ${100 - sliderPercent}% 0)` : `inset(0 ${100 - sliderPercent}% 0 0)`; - - return ( - <div - className={classNames(styles['tedi-comparison__wrapper'], styles[`tedi-comparison__wrapper--${position}`])} - ref={containerRef} - onMouseMove={handleMouseMove} - onMouseDown={handleMouseDown} - onTouchMove={handleTouchMove} - onTouchStart={handleTouchStart} - style={{ - width: typeof width === 'number' ? `${width}px` : width ?? '100%', - height: typeof height === 'number' ? `${height}px` : height ?? '100%', - position, - overflow: 'hidden', - touchAction: 'none', - }} - > - <div - className={classNames(styles['tedi-comparison__layer'], { - [styles['tedi-comparison__primary']]: primary === 'right', - })} - > - {right} - </div> - - <div - className={classNames(styles['tedi-comparison__layer'], { - [styles['tedi-comparison__primary']]: primary === 'left', - })} - style={{ - clipPath: clipPathStyle, - WebkitClipPath: clipPathStyle, - }} - > - {left} - </div> - - <div - className={styles['tedi-comparison__drag-indicator']} - style={{ - left: isMobile ? undefined : `${sliderPercent}%`, - top: isMobile ? `${sliderPercent}%` : undefined, - }} - > - <div className={styles['tedi-comparison__drag-line']} /> - <div className={styles['tedi-comparison__drag-handle']}> - <Icon name="code" size={18} className={styles['tedi-comparison__drag-handle__icon']} /> - </div> - {onClose && ( - <Button - visualType="secondary" - className={styles['tedi-comparison__close-button']} - onClick={onClose} - icon="close" - > - {getLabel('close')} - </Button> - )} - </div> - </div> - ); -}; - -export default Comparison; diff --git a/libs/react-components/src/community/components/map-components/directions/direction-item.tsx b/libs/react-components/src/community/components/map-components/directions/direction-item.tsx deleted file mode 100644 index 6ce1b16a3..000000000 --- a/libs/react-components/src/community/components/map-components/directions/direction-item.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import { useSortable } from '@dnd-kit/sortable'; -import { CSS } from '@dnd-kit/utilities'; -import { JSX } from 'react'; - -import { ClosingButton, Icon, useLabels } from '../../../../tedi'; -import styles from './directions.module.scss'; - -export type DirectionItemProps = { - /** - * Unique identifier for the direction item, used by the drag-and-drop system. - */ - id: string; - /** - * Callback triggered when the item's remove (delete) button is clicked. - */ - onDelete?: () => void; - /** - * Children nodes to be rendered inside the item. - */ - children: React.ReactNode; - /** - * Indicates whether the item is currently being dragged. - */ - isDragging?: boolean; - /** - * If true, show a visual indicator above the item during drag operations. - */ - showAboveIndicator?: boolean; - /** - * If true, show a visual indicator below the item during drag operations. - */ - showBelowIndicator?: boolean; -}; - -export const DirectionItem = (props: DirectionItemProps): JSX.Element => { - const { id, children, onDelete, isDragging = false, showAboveIndicator = false, showBelowIndicator = false } = props; - const { getLabel } = useLabels(); - const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ id }); - - const style = { - transform: CSS.Transform.toString(transform), - transition, - }; - - return ( - <div - ref={setNodeRef} - className={`${styles['tedi-directions__item']} ${isDragging ? styles['tedi-directions__item--dragging'] : ''}`} - style={style} - > - <div className={styles['tedi-directions__content']}> - {showAboveIndicator && <div className={styles['tedi-directions__drop-indicator']} />} - {children} - <div className={styles['tedi-directions__drag-icon']} {...attributes} {...listeners}> - <Icon name="drag_indicator" size={12} background="brand-secondary" /> - </div> - {showBelowIndicator && <div className={styles['tedi-directions__drop-indicator']} />} - </div> - {onDelete && ( - <ClosingButton - className={styles['tedi-directions__remove']} - onClick={onDelete} - aria-label={getLabel('remove')} - /> - )} - </div> - ); -}; - -export default DirectionItem; diff --git a/libs/react-components/src/community/components/map-components/directions/directions.module.scss b/libs/react-components/src/community/components/map-components/directions/directions.module.scss deleted file mode 100644 index 2a79cdf41..000000000 --- a/libs/react-components/src/community/components/map-components/directions/directions.module.scss +++ /dev/null @@ -1,140 +0,0 @@ -:root { - --stepper-step-selected-border: #004277; - --stepper-item-vertical-line: #d2d3d8; - --stepper-step-default-bg: #fff; -} - -.tedi-directions__item { - position: relative; - display: flex; - gap: 12px; - align-items: center; - padding: 10px 0; - padding-left: 18px; - - .tedi-directions__remove { - z-index: 1; - pointer-events: none; - opacity: 0; - } - - &:hover, - &:active { - cursor: grabbing; - } - - &--dragging { - z-index: 100; - - .tedi-directions__content { - box-shadow: 0 4px 10px 0 var(--alpha-14); - } - } - - &:hover { - .tedi-directions__drag-icon { - opacity: 1; - } - - .tedi-directions__remove { - pointer-events: auto; - opacity: 1; - } - } -} - -.tedi-directions__items { - width: 100%; -} - -.tedi-directions__item-wrapper { - position: relative; - flex: 1; - - &::before { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 1px; - content: ''; - background-color: var(--stepper-item-vertical-line); - } - - &::after { - position: absolute; - top: 0; - bottom: 0; - left: -4px; - width: 9px; - height: 9px; - margin: auto; - content: ''; - background-color: var(--stepper-step-default-bg); - border: 1px solid var(--stepper-item-vertical-line); - border-radius: 50%; - outline: 2px solid var(--stepper-step-default-bg); - } - - &:last-child::before { - bottom: 50%; - } - - &:last-child::after { - left: -7px; - width: 1rem; - height: 1rem; - border: 4px solid var(--stepper-step-selected-border); - } - - &:first-child { - &::before { - top: 50%; - } - } -} - -.tedi-route { - position: relative; - display: flex; - align-items: center; - - &__items { - flex: 1; - } -} - -.tedi-directions__content { - position: relative; - z-index: 10; - flex: 1; -} - -.tedi-directions__drag-icon { - position: absolute; - top: 50%; - right: -12px; - z-index: 2; - border-radius: 100%; - opacity: 0; - transform: translateY(-50%); -} - -.tedi-route__drag-overlay { - z-index: 5; - pointer-events: none; -} - -.tedi-directions__drop-indicator { - position: relative; - display: block; - width: 100%; - height: 2px; - margin: 0.5rem 0; - background-color: var(--general-border-accent); -} - -.tedi-directions { - display: flex; - align-items: center; -} diff --git a/libs/react-components/src/community/components/map-components/directions/directions.stories.tsx b/libs/react-components/src/community/components/map-components/directions/directions.stories.tsx deleted file mode 100644 index 32a85bc6f..000000000 --- a/libs/react-components/src/community/components/map-components/directions/directions.stories.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import React, { useState } from 'react'; - -import { Link, TextField, VerticalSpacing } from '../../../../tedi'; -import DirectionItem from './direction-item'; -import { Directions } from './directions'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Map-Design-System?node-id=868-96921&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof Directions> = { - component: Directions, - title: 'Community/Map components/Directions', - subcomponents: { - 'Direction.Item': Directions.Item, - }, -}; - -export default meta; -type Story = StoryObj<typeof Directions>; - -const Template: StoryFn = () => { - const [items, setItems] = useState<Array<{ id: string; element: React.ReactNode }>>([ - { id: '1', element: <TextField label="Teie asukoht" id="1" placeholder="Teie asukoht" hideLabel /> }, - { id: '2', element: <TextField label="Sihtpunkt" id="2" placeholder="Sihtpunkt" hideLabel /> }, - ]); - - const handleAddItem = () => { - const newId = String(Date.now()); - setItems([ - ...items, - { - id: newId, - element: <TextField label="Lisa punkt" id={newId} placeholder="Lisa punkt" hideLabel />, - }, - ]); - }; - - return ( - <> - <Directions onChange={setItems}> - {items.map((item) => ( - <DirectionItem key={item.id} id={item.id}> - {item.element} - </DirectionItem> - ))} - </Directions> - <Link onClick={handleAddItem} iconLeft="add"> - Lisa veel üks punkt - </Link> - </> - ); -}; - -export const Default: Story = { - render: Template, -}; - -export const WithInitialItems: Story = { - render: () => { - const [items, setItems] = useState<Array<{ id: string; element: React.ReactNode }>>([ - { id: '1', element: <TextField label="Teie asukoht" id="1" placeholder="Teie asukoht" hideLabel /> }, - { id: '2', element: <TextField label="Sihtpunkt" id="2" placeholder="Sihtpunkt" hideLabel /> }, - { id: '3', element: <TextField label="Vahepunkt" id="3" placeholder="Vahepunkt" hideLabel /> }, - ]); - - return ( - <Directions onChange={setItems}> - {items.map((item) => ( - <DirectionItem key={item.id} id={item.id}> - {item.element} - </DirectionItem> - ))} - </Directions> - ); - }, -}; - -export const Empty: Story = { - render: () => { - const [items, setItems] = useState<{ id: string; element: React.ReactNode }[]>([]); - const [counter, setCounter] = useState(1); - - const handleAddItem = () => { - const newId = String(Date.now()); - setItems([ - ...items, - { - id: newId, - element: <TextField label={`Punkt ${counter}`} id={newId} placeholder={`Punkt ${counter}`} hideLabel />, - }, - ]); - setCounter(counter + 1); - }; - - return ( - <VerticalSpacing> - <Directions onChange={setItems}> - {items.map((item) => ( - <DirectionItem key={item.id} id={item.id}> - {item.element} - </DirectionItem> - ))} - </Directions> - <Link onClick={handleAddItem} iconLeft="add"> - {items.length === 0 ? 'Lisa esimene punkt' : 'Lisa veel üks punkt'} - </Link> - </VerticalSpacing> - ); - }, -}; diff --git a/libs/react-components/src/community/components/map-components/directions/directions.tsx b/libs/react-components/src/community/components/map-components/directions/directions.tsx deleted file mode 100644 index 4259ac517..000000000 --- a/libs/react-components/src/community/components/map-components/directions/directions.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import { - closestCenter, - DndContext, - DragEndEvent, - DragOverEvent, - DragStartEvent, - PointerSensor, - useSensor, - useSensors, -} from '@dnd-kit/core'; -import { arrayMove, SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'; -import React, { Children, cloneElement, isValidElement, JSX, ReactNode } from 'react'; - -import { Button } from '../../../../tedi'; -import DirectionItem, { DirectionItemProps } from './direction-item'; -import styles from './directions.module.scss'; - -export type DirectionsProps = { - /** - * Children DirectionItem components to render and manage. - */ - children: ReactNode; - /** - * Callback fired when the list of direction items changes - * (e.g., due to adding, deleting, or reordering items). - */ - onChange: (items: { id: string; element: ReactNode }[]) => void; -}; - -export const DirectionsComponent = ({ children, onChange }: DirectionsProps): JSX.Element => { - const sensors = useSensors(useSensor(PointerSensor)); - const [activeId, setActiveId] = React.useState<string | null>(null); - const [overId, setOverId] = React.useState<string | null>(null); - - // Convert children to items array - const items = Children.toArray(children) - .filter((child) => isValidElement(child) && child.type === DirectionItem) - .map((child) => ({ - id: (child as React.ReactElement<DirectionItemProps>).props.id, - element: (child as React.ReactElement<DirectionItemProps>).props.children, - })); - - const handleDragStart = (event: DragStartEvent) => { - setActiveId(event.active.id as string); - }; - - const handleDragOver = (event: DragOverEvent) => { - setOverId((event.over?.id as string) || null); - }; - - const handleDragEnd = (event: DragEndEvent) => { - const { active, over } = event; - setActiveId(null); - setOverId(null); - if (over && active.id !== over.id) { - const oldIndex = items.findIndex((item) => item.id === active.id); - const newIndex = items.findIndex((item) => item.id === over.id); - const reordered = arrayMove(items, oldIndex, newIndex); - onChange(reordered); - } - }; - - const handleDelete = (id: string) => { - const updated = items.filter((item) => item.id !== id); - onChange(updated); - }; - - const handleSwap = () => { - if (items.length === 2) { - onChange([items[1], items[0]]); - } - }; - - return ( - <DndContext - sensors={sensors} - collisionDetection={closestCenter} - onDragStart={handleDragStart} - onDragEnd={handleDragEnd} - onDragOver={handleDragOver} - onDragCancel={() => { - setActiveId(null); - setOverId(null); - }} - > - <SortableContext items={items.map((i) => i.id)} strategy={verticalListSortingStrategy}> - <div className={styles['tedi-directions']}> - <div className={styles['tedi-directions__items']}> - {Children.map(children, (child) => { - if (!isValidElement(child) || child.type !== DirectionItem) { - return child; - } - - const itemProps = child.props as DirectionItemProps; - const isOverCurrent = overId === itemProps.id && activeId !== itemProps.id; - const activeIndex = items.findIndex((i) => i.id === activeId); - const overIndex = items.findIndex((i) => i.id === overId); - const showAboveIndicator = isOverCurrent && activeIndex > overIndex; - const showBelowIndicator = isOverCurrent && activeIndex < overIndex; - - return ( - <div className={styles['tedi-directions__item-wrapper']} key={itemProps.id}> - {cloneElement(child as React.ReactElement<DirectionItemProps>, { - onDelete: () => handleDelete(itemProps.id), - isDragging: activeId === itemProps.id, - showAboveIndicator, - showBelowIndicator, - })} - </div> - ); - })} - </div> - {items.length === 2 && ( - <div className={styles['tedi-directions__swap-container']}> - <Button - visualType="neutral" - onClick={handleSwap} - icon="swap_vert" - aria-label="Vaheta asukohad" - className={styles['tedi-directions__swap-button']} - > - Vaheta asukohad - </Button> - </div> - )} - </div> - </SortableContext> - </DndContext> - ); -}; - -DirectionsComponent.displayName = 'Directions'; - -export const Directions = Object.assign(DirectionsComponent, { - Item: DirectionItem, -}); - -export default Directions; diff --git a/libs/react-components/src/community/components/map-components/directions/index.ts b/libs/react-components/src/community/components/map-components/directions/index.ts deleted file mode 100644 index 84d64496c..000000000 --- a/libs/react-components/src/community/components/map-components/directions/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './directions'; -export * from './direction-item'; diff --git a/libs/react-components/src/community/components/map-components/edit-actions/editing-actions.module.scss b/libs/react-components/src/community/components/map-components/edit-actions/editing-actions.module.scss deleted file mode 100644 index 0571a91f7..000000000 --- a/libs/react-components/src/community/components/map-components/edit-actions/editing-actions.module.scss +++ /dev/null @@ -1,59 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -.tedi-editing-actions { - position: relative; - z-index: 10; - display: inline-flex; - align-items: center; - justify-content: center; - margin-top: 10px; - background-color: var(--general-surface-primary); - border: 1px solid var(--button-main-neutral-border-default); - box-shadow: 0 1px 5px 0 var(--alpha-20); - - @include breakpoints.media-breakpoint-down(xl) { - display: inline-block; - } - - @include breakpoints.media-breakpoint-down(md) { - display: flex; - justify-content: space-between; - width: 100%; - - @include mixins.responsive-styles(padding, card-padding-xs); - } - - @include mixins.responsive-styles(border-radius, card-radius-rounded); - - > * { - position: relative; - - &::after { - position: absolute; - top: 2px; - right: 0; - bottom: 2px; - width: 1px; - content: ''; - background-color: var(--general-border-primary); - } - - &:last-child { - &::after { - display: none; - } - } - - @include mixins.responsive-styles(padding-right, button-gutter-x); - @include mixins.responsive-styles(padding-left, button-gutter-x); - - @include breakpoints.media-breakpoint-down(md) { - padding: 0; - - &::after { - display: none; - } - } - } -} diff --git a/libs/react-components/src/community/components/map-components/edit-actions/editing-actions.tsx b/libs/react-components/src/community/components/map-components/edit-actions/editing-actions.tsx deleted file mode 100644 index c09622b08..000000000 --- a/libs/react-components/src/community/components/map-components/edit-actions/editing-actions.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { JSX } from 'react'; - -import styles from './editing-actions.module.scss'; - -interface EditingActionsProps { - children?: React.ReactNode | React.ReactNode[]; -} - -export const EditingActions = (props: EditingActionsProps): JSX.Element => { - const { children } = props; - return <div className={styles['tedi-editing-actions']}>{children}</div>; -}; - -export default EditingActions; diff --git a/libs/react-components/src/community/components/map-components/left-panel/left-panel-content.tsx b/libs/react-components/src/community/components/map-components/left-panel/left-panel-content.tsx deleted file mode 100644 index 941ecd8e0..000000000 --- a/libs/react-components/src/community/components/map-components/left-panel/left-panel-content.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { JSX } from 'react'; - -import { Alert, Button, ButtonGroup, VerticalSpacing } from '../../../../tedi'; -import { LeftPanelProps } from './left-panel'; -import styles from './left-panel.module.scss'; - -type LeftPanelContentProps = LeftPanelProps & { - children?: React.ReactNode; -}; - -const LeftPanelContent = ({ - showAlert = true, - show2D3DButtons = true, - children, -}: LeftPanelContentProps): JSX.Element => { - return ( - <div className={styles['tedi-left-panel__content-wrapper']}> - {showAlert || - (show2D3DButtons && ( - <div className={styles['tedi-left-panel__content']}> - {showAlert && ( - <Alert className={styles['tedi-left-panel__alert']}> - Kõikide sisselülitatud kihtide kuvamiseks tuleb sisse suumida. - </Alert> - )} - - <VerticalSpacing size={0.5}> - {show2D3DButtons && ( - <ButtonGroup type="primary" stretch={true}> - <Button id="1" isActive iconLeft="checked"> - 2D - </Button> - <Button id="2">3D</Button> - </ButtonGroup> - )} - </VerticalSpacing> - </div> - ))} - {children} - </div> - ); -}; - -export default LeftPanelContent; diff --git a/libs/react-components/src/community/components/map-components/left-panel/left-panel-footer.tsx b/libs/react-components/src/community/components/map-components/left-panel/left-panel-footer.tsx deleted file mode 100644 index 526f38fc9..000000000 --- a/libs/react-components/src/community/components/map-components/left-panel/left-panel-footer.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { Col, Link, Row, Separator, Text } from '../../../../tedi'; -import Toggle from '../../form/toggle/toggle'; -import styles from './left-panel.module.scss'; - -const LeftPanelFooter = () => { - return ( - <div className={styles['tedi-left-panel__footer']}> - <div className={styles['tedi-left-panel__footer__theme-switch']}> - <Toggle ariaLabel="Toggle dark mode" label={<Text>Tume režiim</Text>} /> - <Separator color="primary" topSpacing={1} /> - </div> - <Row> - <Col width="auto"> - <Text color="secondary" modifiers="small"> - Tehniline tugi - </Text> - </Col> - <Col> - <Link href="#" size="small"> - kaardirakendus@maaruum.ee - </Link> - </Col> - </Row> - <Row> - <Col width="auto"> - <Text color="secondary" modifiers="small"> - Telefon - </Text> - </Col> - <Col> - <Link href="#" size="small"> - 6 650 600 - </Link> - </Col> - </Row> - <Row> - <Col> - <Text color="secondary" modifiers="small"> - Maa- ja Ruumiamet. Kõik õigused kaitstud. - </Text> - </Col> - </Row> - </div> - ); -}; - -export default LeftPanelFooter; diff --git a/libs/react-components/src/community/components/map-components/left-panel/left-panel-header.tsx b/libs/react-components/src/community/components/map-components/left-panel/left-panel-header.tsx deleted file mode 100644 index 6012b55d0..000000000 --- a/libs/react-components/src/community/components/map-components/left-panel/left-panel-header.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { Button, Icon } from '../../../../tedi'; -import Dropdown from '../../dropdown/dropdown'; -import styles from './left-panel.module.scss'; - -const LeftPanelHeader = () => { - return ( - <> - <div className={styles['tedi-left-panel__header']}> - <img - src="logo.svg" - alt="logo" - style={{ filter: 'brightness(0) saturate(100%) invert(100%)', height: '40px' }} - /> - <Icon name="close" color="white" /> - </div> - <div className={styles['tedi-left-panel__header-controls']}> - <Button - onClick={() => { - console.log('Log in'); - }} - color="inverted" - iconLeft="logout" - visualType="neutral" - > - Logi sisse - </Button> - <Dropdown - button={{ - children: 'EST', - iconRight: 'expand_more', - visualType: 'link', - color: 'inverted', - }} - items={[ - { - children: 'EST', - onClick: function Ki() {}, - }, - { - children: 'ENG', - isActive: true, - onClick: function Ki() {}, - }, - { - children: 'RUS', - onClick: function Ki() {}, - }, - ]} - /> - </div> - </> - ); -}; - -export default LeftPanelHeader; diff --git a/libs/react-components/src/community/components/map-components/left-panel/left-panel.module.scss b/libs/react-components/src/community/components/map-components/left-panel/left-panel.module.scss deleted file mode 100644 index bdb1c2c12..000000000 --- a/libs/react-components/src/community/components/map-components/left-panel/left-panel.module.scss +++ /dev/null @@ -1,88 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -:root { - --alert-default-padding-x-sm: 8px; -} - -.tedi-left-panel { - position: relative; - display: flex; - flex-direction: column; - justify-content: space-between; - min-width: 330px; - height: 100vh; - overflow: hidden; - background-color: var(--sidepanel-background); - - &__alert { - padding: var(--alert-default-padding-x-sm); - - @include mixins.responsive-styles(margin-bottom, sidepanel-header-padding-y); - } -} - -.tedi-left-panel__header { - display: flex; - flex-shrink: 0; - align-items: center; - justify-content: space-between; - color: var(--button-main-neutral-inverted-text-default); - background-color: var(--sidepanel-header-background-default); - - @include mixins.responsive-styles(padding-top, sidepanel-header-padding-y); - @include mixins.responsive-styles(padding-bottom, sidepanel-header-padding-y); - @include mixins.responsive-styles(padding-left, sidepanel-item-padding-x); - @include mixins.responsive-styles(padding-right, sidepanel-item-padding-x); -} - -.tedi-left-panel__content { - @include mixins.responsive-styles(padding, sidepanel-item-padding-x); -} - -.tedi-left-panel__footer { - display: flex; - flex-direction: column; - flex-shrink: 0; - gap: var(--layout-grid-gutters-04); - align-items: flex-start; - align-self: stretch; - justify-content: center; - word-break: break-all; - background: var(--sidepanel-footer-background); - border-top: 1px solid var(--general-border-primary); - - @include mixins.responsive-styles(padding, sidepanel-item-padding-x); - @include mixins.responsive-styles(font-size, body-small-regular-size); - @include mixins.responsive-styles(line-height, body-small-regular-line-height); - - &__theme-switch { - width: 100%; - padding: 8px 0; - } -} - -.tedi-left-panel__header-controls { - display: flex; - align-items: center; - justify-content: space-between; - color: var(--button-main-neutral-inverted-text-default); - background-color: var(--sidepanel-header-background-default); - - @include mixins.responsive-styles(padding-left, sidepanel-item-padding-x); - @include mixins.responsive-styles(padding-right, sidepanel-item-padding-x); - @include mixins.responsive-styles(padding-bottom, layout-grid-gutters-04); - @include mixins.responsive-styles(border-bottom-left-radius, sidepanel-header-radius-bottom); - @include mixins.responsive-styles(border-bottom-right-radius, sidepanel-header-radius-bottom); - @include mixins.responsive-styles(gap, layout-grid-gutters-08); -} - -.tedi-accordion { - [data-name='accordion-item-header'] { - border-radius: 0; - } -} - -.tedi-left-panel__content-wrapper { - flex: 1 1 auto; - overflow: hidden auto; -} diff --git a/libs/react-components/src/community/components/map-components/left-panel/left-panel.stories.tsx b/libs/react-components/src/community/components/map-components/left-panel/left-panel.stories.tsx deleted file mode 100644 index 3c1ca4f19..000000000 --- a/libs/react-components/src/community/components/map-components/left-panel/left-panel.stories.tsx +++ /dev/null @@ -1,207 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import { Card, Col, Icon, Row, Text } from '../../../../tedi'; -import Toggle from '../../form/toggle/toggle'; -import MapAccordion from '../map-accordion/map-accordion'; -import MapAccordionItem from '../map-accordion/map-accordion-item'; -import MapAccordionItemContent from '../map-accordion/map-accordion-item-content'; -import MapAccordionItemHeader from '../map-accordion/map-accordion-item-header'; -import MapLayer, { LayerOption } from '../map-layer/map-layer'; -import Select from '../map-select/map-select'; -import LeftPanel from './left-panel'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=427-91631&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof LeftPanel> = { - component: LeftPanel, - title: 'Community/Map components/LeftPanel', -}; - -export default meta; -type Story = StoryObj<typeof LeftPanel>; - -const mapOptions = [ - { value: 'maainfo', label: 'Maainfo' }, - { value: 'mahekaart', label: 'Mahekaart' }, - { value: 'merekaart', label: 'Merekaart' }, - { value: 'murakaart', label: 'Mürakaart' }, - { value: 'ajaloolised kaardid', label: 'Ajaloolised kaardid' }, - { value: 'aluskaardid', label: 'Aluskaardid' }, -]; - -const mapLayers = [ - { id: 'katastrikaart', label: <Toggle ariaLabel="Lorem ipsum" label={<Text>Katastrikaart</Text>} /> }, - { id: 'maakorralduskavad', label: <Toggle ariaLabel="Lorem ipsum" label={<Text>Maakorralduskavad</Text>} /> }, - { - id: 'hinna-ja-viljakutsoonid', - label: <Toggle ariaLabel="Lorem ipsum" label={<Text>Hinna- ja viljakustsoonid</Text>} />, - }, - { id: 'koordinaatvõrgud', label: <Toggle ariaLabel="Lorem ipsum" label={<Text>Koordinaatvõrgud</Text>} /> }, - { id: 'kaardilehtede-jaotus', label: <Toggle ariaLabel="Lorem ipsum" label={<Text>Kaardilehtede jaotus</Text>} /> }, - { id: 'korgusandmed', label: <Toggle ariaLabel="Lorem ipsum" label={<Text>Kõrgusandmed</Text>} /> }, - { id: 'huvipunktid', label: <Toggle ariaLabel="Lorem ipsum" label={<Text>Huvipunktid</Text>} /> }, - { - id: 'haldus-ja-asustuspiirid', - label: <Toggle ariaLabel="Lorem ipsum" label={<Text>Haldus- ja asustuspiirid</Text>} />, - }, - { - id: 'eesti-topograafia-andmekogu', - label: <Toggle ariaLabel="Lorem ipsum" label={<Text>Eesti topograafia andmekogu</Text>} />, - }, -]; - -const LayerPanelItems: LayerOption[] = [ - { - defaultChecked: true, - id: 'boundary', - label: 'KÜ piiripunktid', - name: 'boundary', - type: 'checkbox' as const, - value: 'boundary', - }, - { - children: [ - { - defaultValue: { - label: 'Tunnus', - value: 'tunnus', - }, - id: 'select-tunnus', - label: '', - options: [ - { - label: 'Tunnus', - value: 'tunnus', - }, - { - label: 'Koordinaat', - value: 'koordinaat', - }, - { - label: 'Piir', - value: 'piir', - }, - ], - placeholder: 'Tunnus', - type: 'select', - }, - ], - id: 'show-on-map', - label: 'Kuva kaardil', - name: 'show-on-map', - type: 'checkbox', - value: 'show-on-map', - }, - { - defaultChecked: true, - id: 'ownership', - label: 'KÜ omandivorm', - name: 'ownership', - type: 'checkbox', - value: 'ownership', - }, - { - id: 'purpose', - label: 'KÜ sihtotstarbe järgi', - name: 'purpose', - type: 'checkbox', - value: 'purpose', - }, -]; - -const dropdownContent = [ - { - children: ( - <> - <Icon name="add" display="inline" size={24} /> Lisa kiht - </> - ), - onClick: () => console.log('Lisa kiht'), - }, - { - children: ( - <> - <Icon name="folder" display="inline" size={24} /> Lisa grupp - </> - ), - onClick: () => console.log('Lisa grupp'), - }, - { - children: ( - <> - <Icon name="my_location" display="inline" size={24} /> Jälgi teekonda - </> - ), - onClick: () => console.log('Jälgi teekonda'), - }, - { - children: ( - <> - <Icon name="download" display="inline" size={24} /> Laadi alla - </> - ), - onClick: () => console.log('Laadi alla'), - }, -]; - -export const Default: Story = { - render: () => ( - <LeftPanel show2D3DButtons={false} showAlert={false}> - <Card borderless> - <Card.Content padding={0.5}> - <Row gutterY={2}> - <Col> - <Text color="secondary">Teemakaardid</Text> - <Select options={mapOptions} id="" label="" defaultValue={{ label: 'Maainfo', value: 'maainfo' }} /> - </Col> - </Row> - </Card.Content> - </Card> - - <MapAccordion defaultOpenItem={['first']}> - <MapAccordionItem id="first"> - <MapAccordionItemHeader - title="Maainfo" - dropdownContent={[ - { children: 'Lisa pöördumine', onClick: () => console.log('Lisa pöördumine') }, - { children: 'Lisa toetus', onClick: () => console.log('Lisa toetus') }, - ]} - actions={ - <div className="flex align-items-center gap-2"> - <Icon name="history" color="white" size={18} /> - <Text modifiers={['small']}>Taasta algseis</Text> - </div> - } - /> - <MapAccordionItemContent> - <MapAccordion> - {mapLayers.map(({ id, label }) => ( - <MapAccordionItem key={id} id={id}> - <MapAccordionItemHeader backgroundColor="secondary" hasSeparator title={label} /> - <MapAccordionItemContent padding={0}> - <Card borderRadius={false} borderless> - <Card.Content padding={0}> - <MapLayer items={LayerPanelItems} /> - </Card.Content> - </Card> - </MapAccordionItemContent> - </MapAccordionItem> - ))} - </MapAccordion> - </MapAccordionItemContent> - </MapAccordionItem> - - <MapAccordionItem id="second"> - <MapAccordionItemHeader title="Minu kihid" dropdownContent={dropdownContent} /> - <MapAccordionItemContent> - <Card borderRadius={false} borderless> - <Card.Content padding={1}>Lorem ipsum</Card.Content> - </Card> - </MapAccordionItemContent> - </MapAccordionItem> - </MapAccordion> - </LeftPanel> - ), -}; diff --git a/libs/react-components/src/community/components/map-components/left-panel/left-panel.tsx b/libs/react-components/src/community/components/map-components/left-panel/left-panel.tsx deleted file mode 100644 index 428141c8b..000000000 --- a/libs/react-components/src/community/components/map-components/left-panel/left-panel.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { JSX } from 'react'; - -import Resizer from '../resizer/resizer'; -import styles from './left-panel.module.scss'; -import LeftPanelContent from './left-panel-content'; -import LeftPanelFooter from './left-panel-footer'; -import LeftPanelHeader from './left-panel-header'; - -export interface LeftPanelProps { - showAlert?: boolean; - show2D3DButtons?: boolean; - children?: React.ReactNode | React.ReactNode[]; -} - -export const LeftPanel = (props: LeftPanelProps): JSX.Element => { - return ( - <Resizer minWidth={350} initialWidth={350} maxWidth={600}> - <div className={styles['tedi-left-panel']}> - <div className={styles['tedi-left-panel__actions']}> - <LeftPanelHeader /> - <LeftPanelContent {...props}>{props.children}</LeftPanelContent> - </div> - <LeftPanelFooter /> - </div> - </Resizer> - ); -}; - -export default LeftPanel; diff --git a/libs/react-components/src/community/components/map-components/legend/legend.module.scss b/libs/react-components/src/community/components/map-components/legend/legend.module.scss deleted file mode 100644 index 37aebb70c..000000000 --- a/libs/react-components/src/community/components/map-components/legend/legend.module.scss +++ /dev/null @@ -1,21 +0,0 @@ -.tedi-legend { - display: flex; - gap: 1rem; - align-items: center; - - &__label { - width: 40px; - height: 26px; - overflow: hidden; - font-size: 12px; - text-align: center; - text-wrap: wrap; - background-color: var(--general-surface-primary); - border: 1px solid var(--general-border-primary); - border-radius: var(--borders-04); - - > img { - height: 100%; - } - } -} diff --git a/libs/react-components/src/community/components/map-components/legend/legend.stories.tsx b/libs/react-components/src/community/components/map-components/legend/legend.stories.tsx deleted file mode 100644 index ea70161bd..000000000 --- a/libs/react-components/src/community/components/map-components/legend/legend.stories.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import Legend from './legend'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=155-22926&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof Legend> = { - component: Legend, - title: 'Community/Map components/Legend', -}; - -export default meta; -type Story = StoryObj<typeof Legend>; - -export const Default: Story = { - args: { - label: 'Pärnu', - description: 'Lorem ipsum', - }, -}; - -export const Color: Story = { - args: { - label: <div style={{ backgroundColor: 'var(--primary-600)', width: '40px', height: '26px' }}></div>, - description: 'Lorem ipsum', - }, -}; - -export const Image: Story = { - args: { - label: <img src="logo.svg" alt="logo" />, - description: 'Lorem ipsum', - }, -}; diff --git a/libs/react-components/src/community/components/map-components/legend/legend.tsx b/libs/react-components/src/community/components/map-components/legend/legend.tsx deleted file mode 100644 index 82051de4d..000000000 --- a/libs/react-components/src/community/components/map-components/legend/legend.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import cn from 'classnames'; -import { JSX } from 'react'; - -import { Text } from '../../../../tedi'; -import styles from './legend.module.scss'; - -export interface LegendProps { - /** - * Optional fixed width for the label section. Accepts a string (e.g., "100px", "10%") or a number (interpreted as pixels). - */ - labelWidth?: string | number; - /** - * The main label text or React node to be shown in the legend. - */ - label: React.ReactNode | string; - /** - * Optional icon to display alongside the label. - */ - icon?: React.ReactNode; - /** - * Descriptive text associated with the legend item. - */ - description: string; - /** - * Optional custom class name for styling the legend item. - */ - className?: string; -} - -export const Legend = (props: LegendProps): JSX.Element => { - const { label, labelWidth, description, className } = props; - - const legendBEM = cn(styles['tedi-legend'], className); - const labelWidthStyle = typeof labelWidth === 'number' ? `${labelWidth}%` : labelWidth; - - return ( - <dl className={legendBEM} style={{ '--label-width': labelWidthStyle } as React.CSSProperties}> - <dt className={cn(styles['tedi-legend__label'])}>{label}</dt> - <dd> - <Text modifiers="small">{description}</Text> - </dd> - </dl> - ); -}; - -export default Legend; diff --git a/libs/react-components/src/community/components/map-components/map-accordion/index.ts b/libs/react-components/src/community/components/map-components/map-accordion/index.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/react-components/src/community/components/map-components/map-accordion/map-accordion-item-content.tsx b/libs/react-components/src/community/components/map-components/map-accordion/map-accordion-item-content.tsx deleted file mode 100644 index 07e21d1fe..000000000 --- a/libs/react-components/src/community/components/map-components/map-accordion/map-accordion-item-content.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import cn from 'classnames'; -import React, { JSX } from 'react'; -import AnimateHeight from 'react-animate-height'; - -import { Card, CardContentProps, usePrint } from '../../../../tedi'; -import { MapAccordionContext } from './map-accordion'; -import styles from './map-accordion.module.scss'; -import { MapAccordionItemContext } from './map-accordion-item'; - -export type MapAccordionItemContentProps = CardContentProps; - -export const MapAccordionItemContent = (props: MapAccordionItemContentProps): JSX.Element => { - const { children, className, ...rest } = props; - const { isOpen } = React.useContext(MapAccordionContext); - const { id, disabled } = React.useContext(MapAccordionItemContext); - const isPrinting = usePrint(); - - const BEM = cn(styles['tedi-map-accordion__item-content'], className); - - const content = ( - <Card borderRadius={false} borderless> - <Card.Content data-name="map-accordion-item-content" {...rest} className={BEM} padding={0}> - {children} - </Card.Content> - </Card> - ); - - return isPrinting && !disabled ? ( - content - ) : ( - <AnimateHeight - duration={300} - height={isOpen(id) ? 'auto' : 0} - role="region" - aria-labelledby={id} - id={`${id}-content`} - > - {content} - </AnimateHeight> - ); -}; - -export default MapAccordionItemContent; diff --git a/libs/react-components/src/community/components/map-components/map-accordion/map-accordion-item-header.tsx b/libs/react-components/src/community/components/map-components/map-accordion/map-accordion-item-header.tsx deleted file mode 100644 index b714aeb89..000000000 --- a/libs/react-components/src/community/components/map-components/map-accordion/map-accordion-item-header.tsx +++ /dev/null @@ -1,187 +0,0 @@ -import cn from 'classnames'; -import React, { JSX } from 'react'; - -import { Button, useLabels } from '../../../../tedi'; -import MapDropdown, { MapDropdownItem } from '../map-dropdown/map-dropdown'; -import { MapAccordionContext } from './map-accordion'; -import styles from './map-accordion.module.scss'; -import { MapAccordionItemContext } from './map-accordion-item'; - -export interface MapAccordionItemHeaderProps { - /** - * React content to render in header - */ - children?: React.ReactNode; - /** - * Optional custom Popover element - */ - dropdownContent?: MapDropdownItem[]; - /** - * @default primary - * Background color for Accordion header - */ - backgroundColor?: 'primary' | 'secondary'; - hasSeparator?: boolean; - renderToggleButton?: boolean; - /** Optional icon override when item is open */ - openIcon?: string | JSX.Element; - /** Optional icon override when item is closed */ - closeIcon?: string | JSX.Element; - /** Title rendered before children in header */ - title?: string | React.ReactNode; - /** Optional custom content in action area (before dropdowns/buttons) */ - actions?: React.ReactNode; - className?: string; -} - -/** helper + props type used for cloneElement */ -type ClickableLike = { - onClick?: React.MouseEventHandler; - className?: string; -}; - -const mergeHandlers = - (a?: (e: React.MouseEvent) => void, b?: (e: React.MouseEvent) => void) => (e: React.MouseEvent) => { - a?.(e); - b?.(e); - }; - -export const MapAccordionItemHeader = (props: MapAccordionItemHeaderProps): JSX.Element => { - const { - className, - dropdownContent, - backgroundColor = 'primary', - hasSeparator = false, - renderToggleButton = true, - openIcon, - closeIcon, - title, - actions, - ...rest - } = props; - const { getLabel } = useLabels(); - const { onToggle, isOpen, renderCloseButton } = React.useContext(MapAccordionContext); - const { id, disabled } = React.useContext(MapAccordionItemContext); - - const handleClick = () => { - if (!disabled) onToggle(id); - }; - - const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => { - if ((e.code === 'Enter' || e.code === 'Space') && !e.repeat) { - e.preventDefault(); - handleClick(); - } - }; - - const handlePopoverClick = (e: React.MouseEvent) => { - e.stopPropagation(); - }; - - const headerClass = cn( - styles['tedi-map-accordion__item-header'], - styles[`tedi-map-accordion__item-header-${backgroundColor}`], - { - [styles['tedi-map-accordion__item-header-separator']]: hasSeparator, - }, - className - ); - - /** build a close node that always toggles the item as well, with proper typing */ - let closeNode: React.ReactNode = null; - if (renderCloseButton) { - const raw = renderCloseButton(id); - - if (React.isValidElement(raw)) { - // Narrow props so TS knows onClick/className exist - const element = raw as React.ReactElement<ClickableLike>; - closeNode = React.cloneElement<ClickableLike>(element, { - onClick: mergeHandlers(element.props.onClick, (e: React.MouseEvent) => { - e.stopPropagation(); - if (!disabled) onToggle(id); - }), - className: cn(element.props.className, styles['tedi-map-accordion__item-closer']), - }); - } else if (raw !== null) { - // Non-element (string/fragment): wrap so we can handle clicks/keyboard - closeNode = ( - <span - className={styles['tedi-map-accordion__item-closer']} - onClick={(e) => { - e.stopPropagation(); - if (!disabled) onToggle(id); - }} - role="button" - tabIndex={0} - onKeyDown={(e) => { - if ((e.key === 'Enter' || e.key === ' ') && !disabled) { - e.preventDefault(); - onToggle(id); - } - }} - > - {raw} - </span> - ); - } - } - - return ( - <div - data-name="map-accordion-item-header" - role="button" - tabIndex={disabled ? -1 : 0} - aria-disabled={disabled} - className={headerClass} - aria-expanded={isOpen(id)} - aria-controls={`${id}-content`} - {...rest} - > - <div className={styles['tedi-map-accordion__item-header-content']}> - {title && <div className={styles['tedi-map-accordion__item-header-title']}>{title}</div>} - </div> - - <div className={styles['tedi-map-accordion__item-header-actions']} onClick={handlePopoverClick}> - {actions} - {dropdownContent && ( - <MapDropdown> - <MapDropdown.Trigger> - <Button - size="small" - visualType="neutral" - color="inverted" - icon="more_vert" - className={styles['tedi-map-accordion__item-toggler']} - > - Show more - </Button> - </MapDropdown.Trigger> - <MapDropdown.Content items={dropdownContent} /> - </MapDropdown> - )} - {closeNode} - {renderToggleButton && ( - <Button - onClick={handleClick} - onKeyDown={handleKeyDown} - size="small" - visualType="neutral" - color="inverted" - icon={!openIcon && !closeIcon ? (isOpen(id) ? 'expand_more' : 'chevron_right') : undefined} - className={styles['tedi-map-accordion__item-toggler']} - > - {openIcon && closeIcon ? ( - <span className={styles['tedi-map-accordion__item-toggler-icon']}> - {isOpen(id) ? openIcon : closeIcon} - </span> - ) : ( - getLabel(isOpen(id) ? 'close' : 'open') - )} - </Button> - )} - </div> - </div> - ); -}; - -export default MapAccordionItemHeader; diff --git a/libs/react-components/src/community/components/map-components/map-accordion/map-accordion-item.tsx b/libs/react-components/src/community/components/map-components/map-accordion/map-accordion-item.tsx deleted file mode 100644 index 7ba907fe5..000000000 --- a/libs/react-components/src/community/components/map-components/map-accordion/map-accordion-item.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import cn from 'classnames'; -import React, { JSX } from 'react'; - -import { HashTrigger } from '../../../../tedi'; -import { MapAccordionContext } from './map-accordion'; -import styles from './map-accordion.module.scss'; -import { MapAccordionItemContentProps } from './map-accordion-item-content'; -import { MapAccordionItemHeaderProps } from './map-accordion-item-header'; - -export interface MapAccordionItemProps { - /** - * ID of the item - */ - id: string; - /** - * AccordionItemHeader and AccordionItemContent. - */ - children?: - | React.ReactElement<MapAccordionItemContentProps | MapAccordionItemHeaderProps> - | React.ReactElement<MapAccordionItemContentProps | MapAccordionItemHeaderProps>[] - | React.ReactNode; - /** - * Is the item disabled. - * @default false - */ - disabled?: boolean; - /** - * Adds visual styles and correct arias to show the item is selected. - * @default false - */ - selected?: boolean; - className?: string; -} - -export interface IAccordionItemContext { - disabled: boolean; - id: string; -} - -export const MapAccordionItemContext = React.createContext<IAccordionItemContext>({ - id: '', - disabled: false, -}); - -export const MapAccordionItem = (props: MapAccordionItemProps): JSX.Element => { - const { children, className, id, disabled = false, ...rest } = props; - const { onToggle, isOpen } = React.useContext(MapAccordionContext); - - const BEM = cn(styles['tedi-map-accordion__item'], className, { - [styles['tedi-map-accordion__item--disabled']]: disabled, - [styles['tedi-map-accordion__item--open']]: isOpen(id), - }); - - return ( - <MapAccordionItemContext.Provider value={{ id, disabled }}> - <HashTrigger - id={id} - onMatch={(id) => { - if (!disabled) { - onToggle(id); - } - }} - > - <div data-name="map-accordion-item" className={BEM} {...rest}> - {children} - </div> - </HashTrigger> - </MapAccordionItemContext.Provider> - ); -}; - -export default MapAccordionItem; diff --git a/libs/react-components/src/community/components/map-components/map-accordion/map-accordion.module.scss b/libs/react-components/src/community/components/map-components/map-accordion/map-accordion.module.scss deleted file mode 100644 index 443be7af0..000000000 --- a/libs/react-components/src/community/components/map-components/map-accordion/map-accordion.module.scss +++ /dev/null @@ -1,140 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -:root { - --accordion-item-padding-y: 4px; - --accordion-item-padding-x: 8px; - --accordion-item-min-height: 40px; -} - -.tedi-map-accordion__item-wrapping-heading { - z-index: 1; -} - -.tedi-map-accordion__item-header { - display: flex; - align-items: center; - justify-content: space-between; - min-height: var(--accordion-item-min-height); - padding: var(--accordion-item-padding-y) var(--accordion-item-padding-x); - color: var(--general-text-white); - border-radius: 0; - transition: 300ms ease; - - @include mixins.responsive-styles(gap, layout-grid-gutters-08); - - .tedi-map-accordion__item--disabled & { - color: var(--general-text-disabled); - background-color: var(--form-general-background-disabled); - } - - &-primary { - background-color: var(--sidepanel-header-background-default); - - :not(.tedi-map-accordion__item--open) & { - border-bottom: 1px solid var(--sidepanel-item-brand-border-bottom); - } - } - - &-secondary { - color: var(--general-text-primary); - background-color: var(--sidepanel-item-white-background-default); - - button.tedi-map-accordion__item-toggler { - color: var(--general-icon-tertiary); - } - } - - &-separator { - border-bottom: 1px solid var(--general-border-primary); - } -} - -.tedi-map-accordion__item { - &:last-child { - .tedi-map-accordion__item-header { - border-bottom: 0; - } - } -} - -.tedi-map-accordion__item--open { - .tedi-map-accordion__item-header { - &-primary { - background-color: var(--sidepanel-header-background-open); - - .tedi-map-accordion__item-header-title { - font-weight: 600; - } - } - } - - .tedi-map-accordion__item--open .tedi-map-accordion__item-header { - &-secondary { - .tedi-map-accordion__item-header-title { - font-weight: 600; - } - - button.tedi-map-accordion__item-toggler { - &:hover, - &:focus, - &:active { - color: var(--general-icon-brand); - } - } - } - } -} - -.tedi-map-accordion__item-header-content { - display: flex; - flex: 1 1 auto; - gap: 8px; - align-items: center; - min-width: 0; - overflow: hidden; -} - -.tedi-map-accordion__item-content { - border-bottom: 1px solid var(--general-border-primary); -} - -.tedi-map-accordion__collapsed { - display: flex; - align-items: center; - justify-content: space-between; - padding: 0.5rem; - color: var(--general-text-white); - background-color: var(--sidepanel-header-background-default); - border-radius: 0.25rem; -} - -.tedi-map-accordion__collapsed-header { - display: flex; - justify-content: space-between; - width: 100%; -} - -.tedi-map-accordion__expander-button { - display: flex; - justify-content: center; - width: 100%; - padding: var(--sidepanel-item-padding-y) var(--sidepanel-item-padding-x); - background: var(--button-expand-background-default); - border-top: 1px solid var(--button-primary-border-default); - border-top: 0; - border-radius: 0 0 4px 4px; -} - -.tedi-map-accordion__item-header-actions { - display: flex; - flex: 0 0 auto; - align-items: center; -} - -.tedi-map-accordion__item-header-title { - flex: 1 1 auto; - min-width: 0; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} diff --git a/libs/react-components/src/community/components/map-components/map-accordion/map-accordion.stories.tsx b/libs/react-components/src/community/components/map-components/map-accordion/map-accordion.stories.tsx deleted file mode 100644 index c93b91595..000000000 --- a/libs/react-components/src/community/components/map-components/map-accordion/map-accordion.stories.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { VerticalSpacing } from '../../../../tedi'; -import MapAccordion, { MapAccordionProps } from './map-accordion'; -import MapAccordionItem, { MapAccordionItemProps } from './map-accordion-item'; -import MapAccordionItemContent, { MapAccordionItemContentProps } from './map-accordion-item-content'; -import MapAccordionItemHeader, { MapAccordionItemHeaderProps } from './map-accordion-item-header'; - -/** - * <a href="?path=/docs/community-map-components-rightpanel--docs" target="_BLANK">Part of RightPanel component</a><br/> - * <a href="?path=/docs/community-map-components-leftpanel--docs" target="_BLANK">Part of LeftPanel component</a><br/> - */ - -const meta: Meta<typeof MapAccordion> = { - component: MapAccordion, - subcomponents: { - 'MapAccordion.Item': MapAccordion.Item, - 'MapAccordion.Header': MapAccordion.Header, - 'MapAccordion.Content': MapAccordion.Content, - }, - title: 'Community/Map components/MapAccordion', -}; - -const ACCORDION_ITEM_CONTENT = - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'; - -interface AccordionItemDto { - id: string; - header: string; - content: string; - disabled?: boolean; - itemProps?: Omit<MapAccordionItemProps, 'id'>; - headerProps?: MapAccordionItemHeaderProps; - contentProps?: MapAccordionItemContentProps; -} - -const accordionItems: AccordionItemDto[] = [ - { id: 'first', header: 'First', content: ACCORDION_ITEM_CONTENT }, - { id: 'second', header: 'Second', content: ACCORDION_ITEM_CONTENT }, - { id: 'disabled', header: 'Disabled', content: ACCORDION_ITEM_CONTENT, disabled: true }, - { id: 'fourth', header: 'Fourth', content: ACCORDION_ITEM_CONTENT }, -]; - -export default meta; - -export interface AccordionStory { - items?: AccordionItemDto[]; - accordion: MapAccordionProps; - accordionItem: Omit<MapAccordionItemProps, 'id'>; - accordionItemHeader: MapAccordionItemHeaderProps; - accordionItemContent: MapAccordionItemContentProps; -} - -type Story = StoryObj<AccordionStory>; - -const Template: StoryFn<AccordionStory> = ({ items = accordionItems, ...args }) => { - return ( - <VerticalSpacing size={1}> - <MapAccordion {...args.accordion}> - {items.map(({ id, header, content, disabled, itemProps, headerProps, contentProps }: AccordionItemDto) => ( - <MapAccordionItem key={id} {...args.accordionItem} {...itemProps} id={id} disabled={disabled}> - <MapAccordionItemHeader {...args.accordionItemHeader} {...headerProps} title={header}> - {header} - </MapAccordionItemHeader> - <MapAccordionItemContent {...args.accordionItemContent} {...contentProps}> - {content} - </MapAccordionItemContent> - </MapAccordionItem> - ))} - </MapAccordion> - </VerticalSpacing> - ); -}; - -export const Default: Story = { - render: Template, - args: { - accordionItemContent: { - padding: 1, - }, - }, -}; - -export const DefaultOpen: Story = { - render: Template, - args: { - accordion: { - defaultOpenItem: ['second'], - }, - accordionItemContent: { - padding: 1, - }, - }, -}; - -export const SecondaryHeader: Story = { - render: Template, - args: { - accordionItemHeader: { - backgroundColor: 'secondary', - hasSeparator: true, - }, - accordionItemContent: { - padding: 1, - }, - }, -}; diff --git a/libs/react-components/src/community/components/map-components/map-accordion/map-accordion.tsx b/libs/react-components/src/community/components/map-components/map-accordion/map-accordion.tsx deleted file mode 100644 index 8bf413970..000000000 --- a/libs/react-components/src/community/components/map-components/map-accordion/map-accordion.tsx +++ /dev/null @@ -1,154 +0,0 @@ -import cn from 'classnames'; -import React, { JSX } from 'react'; - -import { Button, Icon } from '../../../../tedi'; -import styles from './map-accordion.module.scss'; -import AccordionItem, { MapAccordionItem } from './map-accordion-item'; -import MapAccordionItemContent from './map-accordion-item-content'; -import MapAccordionItemHeader from './map-accordion-item-header'; - -export interface MapAccordionProps { - /** - * Accordion children – typically a list of AccordionItem components. - */ - children?: React.ReactNode; - /** - * Optional custom class name for additional styling. - */ - className?: string; - /** - * Controlled prop to define which item IDs are open. - * Use in combination with `onToggleItem` to manage state externally. - */ - openItem?: string[]; - /** - * Handler called when an accordion item is toggled. - * Receives the toggled item's ID. - */ - onToggleItem?: (id: string) => void; - /** - * List of item IDs that should be open by default. - * Used for uncontrolled behavior (default state only). - * @default [] - */ - defaultOpenItem?: string[]; - /** - * If `true`, enables expander mode – typically used to show/hide the entire panel. - */ - expanderMode?: boolean; - /** - * Title shown for the expander when `expanderMode` is enabled. - */ - expanderTitle?: string; - /** - * Optional render function for a custom close button per item. - * Receives the item's ID and returns a ReactNode to render. - */ - renderCloseButton?: (id: string) => React.ReactNode; -} - -export interface IMapAccordionContext { - /** - * Function to check if a given item ID is open. - */ - isOpen: (id: string) => boolean; - /** - * Function to toggle an item open/closed. - */ - onToggle: (id: string) => void; - /** - * Optional render function for a custom close button per item. - */ - renderCloseButton?: (id: string) => React.ReactNode; -} - -export const MapAccordionContext = React.createContext<IMapAccordionContext>({ - isOpen: () => true, - onToggle: () => null, -}); - -export const MapAccordionComponent = (props: MapAccordionProps): JSX.Element => { - const { - children, - className, - openItem, - onToggleItem, - renderCloseButton, - defaultOpenItem = [], - expanderMode, - expanderTitle, - } = props; - const openValues = openItem ? openItem : defaultOpenItem; - const [innerOpenItem, setOpen] = React.useState<string[]>(openValues); - const [isCollapsed, setIsCollapsed] = React.useState(false); - - const isOpenItemControlled = (openItem = props.openItem): openItem is string[] => { - return !!onToggleItem && typeof openItem !== 'undefined'; - }; - - const onToggle = (id: string): void => { - if (onToggleItem) { - return onToggleItem(id); - } - if (!isOpenItemControlled(openItem)) { - setOpen((prevOpen) => { - if (prevOpen.includes(id)) { - return prevOpen.filter((i) => i !== id); - } else { - return [...prevOpen, id]; - } - }); - } - }; - - const getOpenItems = (): string[] => { - return onToggleItem && typeof openItem !== 'undefined' ? openItem : innerOpenItem; - }; - - const isOpen = (id: string): boolean => { - return getOpenItems().includes(id); - }; - - const itemCount = React.Children.toArray(children).filter( - (child) => React.isValidElement(child) && child.type === AccordionItem - ).length; - - return ( - <MapAccordionContext.Provider value={{ isOpen, onToggle, renderCloseButton }}> - <div className={cn(styles['tedi-map-accordion'], className)}> - {expanderMode && isCollapsed ? ( - <div className={styles['tedi-map-accordion__collapsed']}> - <div className={styles['tedi-map-accordion__collapsed-header']}> - {expanderTitle} ({itemCount}) - </div> - </div> - ) : ( - children - )} - {expanderMode && ( - <Button - fullWidth - noStyle - onClick={() => setIsCollapsed(!isCollapsed)} - className={styles['tedi-map-accordion__expander-button']} - > - <Icon - name={expanderMode && isCollapsed ? 'keyboard_double_arrow_down' : 'keyboard_double_arrow_up'} - color="brand" - /> - </Button> - )} - </div> - </MapAccordionContext.Provider> - ); -}; - -MapAccordionComponent.displayName = 'Accordion'; - -export const MapAccordion = Object.assign(MapAccordionComponent, { - Item: MapAccordionItem, - Content: MapAccordionItemContent, - Header: MapAccordionItemHeader, -}); - -export default MapAccordion; diff --git a/libs/react-components/src/community/components/map-components/map-button/map-button.module.scss b/libs/react-components/src/community/components/map-components/map-button/map-button.module.scss deleted file mode 100644 index 228f8d000..000000000 --- a/libs/react-components/src/community/components/map-components/map-button/map-button.module.scss +++ /dev/null @@ -1,92 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-map-button { - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - font-size: var(--size-00); - font-weight: 700; - color: var(--button-primary-text-default); - background-color: var(--button-primary-background-default); - border: 1px solid var(--button-primary-border-default); - - @include mixins.responsive-styles(padding, button-md-icon-padding); - @include mixins.responsive-styles(border-radius, button-radius-sm); - - &:hover { - cursor: pointer; - background-color: var(--button-primary-background-hover); - border-color: var(--button-primary-border-hover); - } - - &:active { - color: var(--button-primary-text-active); - background-color: var(--button-primary-background-hover); - border-color: var(--button-primary-border-active); - - .tedi-map-button__icon { - color: var(--button-primary-text-active); - } - } - - &:focus-visible { - border-color: var(--button-primary-border-hover); - outline: var(--borders-02) solid var(--primary-500); - outline-offset: 1px; - } - - &__text { - width: 3rem; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - - &__icon { - color: var(--button-primary-text-default); - } - - &--default { - width: var(--dimensions-19); - height: var(--dimensions-19); - } - - &--small { - width: var(--dimensions-16); - height: var(--dimensions-16); - - .tedi-map-button__text { - width: 2rem; - } - } - - &--selected { - color: var(--button-primary-text-active); - background-color: var(--button-primary-background-hover); - border-color: var(--alpha-01); - outline: 2px solid var(--button-primary-border-active); - outline-offset: -2px; - - .tedi-map-button__icon { - color: var(--button-primary-text-active); - } - } - - &--dropdown { - position: relative; - - &::after { - position: absolute; - right: 2px; - bottom: 2px; - width: 0; - height: 0; - content: ''; - border-color: var(--alpha-01) var(--alpha-01) var(--button-primary-text-default) var(--alpha-01); - border-style: solid; - border-width: 0 0 6px 6px; - transform: rotate(0deg); - } - } -} diff --git a/libs/react-components/src/community/components/map-components/map-button/map-button.stories.tsx b/libs/react-components/src/community/components/map-components/map-button/map-button.stories.tsx deleted file mode 100644 index ea78059b6..000000000 --- a/libs/react-components/src/community/components/map-components/map-button/map-button.stories.tsx +++ /dev/null @@ -1,231 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Col, Icon, Row, Text, TextProps, VerticalSpacing } from '../../../../tedi'; -import ButtonGroup, { ButtonGroupProps } from '../button-group/button-group'; -import MapButton, { MapButtonProps } from './map-button'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=2-214&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof MapButton> = { - component: MapButton, - title: 'Community/Map components/MapButton', -}; - -export default meta; -type Story = StoryObj<typeof MapButton>; - -const buttonStateArray = ['Default', 'Hover', 'Active', 'Focus', 'Selected']; -type TemplateMultipleProps<Type = typeof buttonStateArray> = MapButtonProps & { - array: Type; - titleColor: TextProps['color']; -}; - -const TemplateColumn: StoryFn<TemplateMultipleProps> = (args) => { - const { array, titleColor, ...buttonProps } = args; - - return ( - <> - <VerticalSpacing size={0.5}> - <Row> - <Col md={1}></Col> - <Col> - <Text color={titleColor} modifiers="bold"> - Default - </Text> - </Col> - <Col className="text-bold"> - <Text color={titleColor} modifiers="bold"> - Small - </Text> - </Col> - </Row> - {array.map((value, key) => ( - <Row key={key}> - <Col md={1} className="display-flex align-items-center"> - <Text color={titleColor} modifiers="bold"> - {value} - </Text> - </Col> - <Col className="display-flex align-items-center gap-3"> - <MapButton id={value} {...buttonProps} selected={value === 'Selected'}> - Text - </MapButton> - <MapButton id={value} {...buttonProps} iconRight="straighten" selected={value === 'Selected'}> - Text - </MapButton> - <MapButton id={value} {...buttonProps} selected={value === 'Selected'}> - Text - </MapButton> - <MapButton id={value} {...buttonProps} icon="straighten" selected={value === 'Selected'} hideLabel> - Text - </MapButton> - </Col> - <Col className="display-flex align-items-center gap-3"> - <MapButton id={value} size="small" {...buttonProps} selected={value === 'Selected'}> - Text - </MapButton> - <MapButton - id={value} - size="small" - {...buttonProps} - iconRight="straighten" - selected={value === 'Selected'} - > - Text - </MapButton> - <MapButton id={value} size="small" {...buttonProps} iconLeft="edit" selected={value === 'Selected'}> - Text - </MapButton> - <MapButton - id={value} - size="small" - {...buttonProps} - icon="straighten" - selected={value === 'Selected'} - hideLabel - > - Text - </MapButton> - </Col> - </Row> - ))} - </VerticalSpacing> - </> - ); -}; - -export const Default: Story = { - args: { - children: 'Text', - }, -}; - -export const HideLabel: Story = { - args: { - children: 'Text', - hideLabel: true, - icon: 'straighten', - size: 'small', - }, -}; - -export const WithDropdown: Story = { - args: { - children: 'Text', - icon: 'straighten', - dropdownItems: [ - { - children: ( - <Text> - <Icon name="radio_button_unchecked" display="inline" /> Mõõda ringina - </Text> - ), - isActive: true, - onClick: () => console.log('Item 1 clicked'), - }, - { - children: ( - <Text> - <Icon name="polyline" display="inline" /> Mõõda joonena - </Text> - ), - onClick: () => console.log('Item 2 clicked'), - }, - { - children: ( - <Text> - <Icon name="check_box_outline_blank" display="inline" /> Mõõda ala - </Text> - ), - onClick: () => console.log('Item 3 clicked'), - }, - ], - }, -}; - -export const States: StoryObj<TemplateMultipleProps> = { - render: TemplateColumn, - args: { - array: buttonStateArray, - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focusVisible: '#Focus', - }, - }, -}; - -const TemplateGroup: StoryFn<ButtonGroupProps> = (args) => { - return ( - <ButtonGroup {...args}> - <MapButton icon="location_on">Punkt</MapButton> - <MapButton icon="straighten">Mõõda</MapButton> - <MapButton icon="compare">Võrdle</MapButton> - <MapButton icon="history">Ajajoon</MapButton> - </ButtonGroup> - ); -}; - -export const ButtonGroupHorizontal: StoryObj<ButtonGroupProps> = { - render: TemplateGroup, - args: { - direction: 'horizontal', - }, -}; - -export const ButtonGroupVertical: StoryObj<ButtonGroupProps> = { - render: TemplateGroup, - args: { - direction: 'vertical', - }, -}; - -export const ButtonGroupHorizontalSuffixAndPrefix: StoryFn<ButtonGroupProps> = (args) => { - return ( - <VerticalSpacing> - <ButtonGroup suffix="Suffix" ariaLabel="Example button group"> - <MapButton id="btn1" size="small" icon="location_on"> - Button 1 - </MapButton> - <MapButton id="btn2" size="small" icon="history"> - Button 2 - </MapButton> - </ButtonGroup> - <ButtonGroup prefix="Prefix" ariaLabel="Example button group"> - <MapButton id="btn1" size="small" icon="location_on"> - Button 1 - </MapButton> - <MapButton id="btn2" size="small" icon="history"> - Button 2 - </MapButton> - </ButtonGroup> - </VerticalSpacing> - ); -}; - -export const ButtonGroupHVerticalSuffixAndPrefix: StoryFn<ButtonGroupProps> = (args) => { - return ( - <VerticalSpacing> - <ButtonGroup suffix="0" ariaLabel="Example button group" direction="vertical"> - <MapButton id="btn1" size="small" icon="location_on"> - Button 1 - </MapButton> - <MapButton id="btn2" size="small" icon="history"> - Button 2 - </MapButton> - </ButtonGroup> - <ButtonGroup prefix="0" ariaLabel="Example button group" direction="vertical"> - <MapButton id="btn1" size="small" icon="location_on"> - Button 1 - </MapButton> - <MapButton id="btn2" size="small" icon="history"> - Button 2 - </MapButton> - </ButtonGroup> - </VerticalSpacing> - ); -}; diff --git a/libs/react-components/src/community/components/map-components/map-button/map-button.tsx b/libs/react-components/src/community/components/map-components/map-button/map-button.tsx deleted file mode 100644 index f6f48c3a8..000000000 --- a/libs/react-components/src/community/components/map-components/map-button/map-button.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import cn from 'classnames'; -import { JSX, useState } from 'react'; - -import { Button, ButtonProps, Icon, Tooltip } from '../../../../tedi'; -import MapDropdown, { MapDropdownItem } from '../map-dropdown/map-dropdown'; -import styles from './map-button.module.scss'; - -export interface MapButtonProps extends Omit<ButtonProps, 'size'> { - /** - * Size of the button. Can be: - * - `'default'` – standard size. - * - `'small'` – smaller button for compact UIs. - */ - size?: 'default' | 'small'; - /** - * Name of the icon to display inside the button (e.g., Material Symbols name). - * If set, the icon appears alongside or instead of the label. - */ - icon?: string; - /** - * Whether the button is in a selected state. - * Useful for toggles or filter-style buttons. - */ - selected?: boolean; - /** - * If `true`, hides the label visually (icon-only button). - * Label may still be available to screen readers. - */ - hideLabel?: boolean; - /** - * Content to show in a tooltip on hover or focus. - * Can be a string or a React element for custom tooltips. - */ - tooltipContent?: string | React.ReactNode; - /** - * Optional dropdown menu items. - * When provided, the button can toggle a dropdown menu. - */ - dropdownItems?: MapDropdownItem[]; -} - -export const MapButton = (props: MapButtonProps): JSX.Element => { - const { - size = 'default', - icon, - selected = false, - className, - children, - hideLabel = false, - tooltipContent = children, - dropdownItems, - ...rest - } = props; - const [isDropdownOpen, setIsDropdownOpen] = useState(false); - const isSelected = selected || isDropdownOpen; - - const mapButtonBEM = cn( - styles['tedi-map-button'], - styles[`tedi-map-button--${size}`], - isSelected && styles['tedi-map-button--selected'], - dropdownItems && styles['tedi-map-button--dropdown'], - className - ); - - const buttonContent = ( - <> - {icon && <Icon name={icon} className={styles['tedi-map-button__icon']} size={size === 'small' ? 24 : 18} />} - {!hideLabel && <div className={cn(styles['tedi-map-button__text'])}>{children}</div>} - </> - ); - - const buttonElement = ( - <Button noStyle className={mapButtonBEM} size={size} {...rest}> - {buttonContent} - </Button> - ); - - const buttonWithTooltip = - hideLabel && tooltipContent ? ( - <Tooltip placement="right"> - <Tooltip.Trigger>{buttonElement}</Tooltip.Trigger> - <Tooltip.Content>{tooltipContent}</Tooltip.Content> - </Tooltip> - ) : ( - buttonElement - ); - - if (dropdownItems) { - return ( - <MapDropdown onOpenChange={setIsDropdownOpen} placement="right-start"> - <MapDropdown.Trigger>{buttonElement}</MapDropdown.Trigger> - <MapDropdown.Content - items={dropdownItems.map((item) => ({ - children: item.children, - onClick: item.onClick, - isDisabled: item.isDisabled, - }))} - /> - </MapDropdown> - ); - } - - return buttonWithTooltip; -}; - -export default MapButton; diff --git a/libs/react-components/src/community/components/map-components/map-dropdown/map-dropdown.module.scss b/libs/react-components/src/community/components/map-components/map-dropdown/map-dropdown.module.scss deleted file mode 100644 index 419e7aea3..000000000 --- a/libs/react-components/src/community/components/map-components/map-dropdown/map-dropdown.module.scss +++ /dev/null @@ -1,46 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-map-dropdown { - z-index: var(--z-index-dropdown); - display: flex; - background-color: var(--dropdown-item-default-background); - border: 1px solid var(--general-border-primary); - border-radius: 4px; - - &--column { - flex-direction: column; - } - - &--row { - flex-direction: row; - } -} - -.tedi-map-dropdown__item { - @include mixins.button-reset; - - padding: 0.5rem 0.75rem; - color: var(--general-text-primary); - text-align: left; - border-radius: 0; - - &--active { - color: var(--neutral-100); - background-color: var(--primary-600); - } - - &--disabled { - color: var(--general-text-disabled); - background-color: var(--general-surface-disabled); - } - - &:hover, - &:focus-visible { - &:not(.tedi-map-dropdown__item--disabled) { - color: var(--general-text-brand); - cursor: pointer; - background-color: var(--dropdown-item-hover-background); - outline: 0; - } - } -} diff --git a/libs/react-components/src/community/components/map-components/map-dropdown/map-dropdown.tsx b/libs/react-components/src/community/components/map-components/map-dropdown/map-dropdown.tsx deleted file mode 100644 index a597b6791..000000000 --- a/libs/react-components/src/community/components/map-components/map-dropdown/map-dropdown.tsx +++ /dev/null @@ -1,288 +0,0 @@ -import { - autoUpdate, - flip, - FloatingFocusManager, - FloatingPortal, - offset, - Placement, - shift, - useClick, - useDismiss, - useFloating, - useFloatingNodeId, - useInteractions, - useListNavigation, - useRole, -} from '@floating-ui/react'; -import cn from 'classnames'; -import classNames from 'classnames'; -import React, { cloneElement, JSX } from 'react'; - -import { useLabels } from '../../../../tedi'; -import styles from './map-dropdown.module.scss'; - -export type MapDropdownItem = { - /** - * Content of the item - */ - children: React.ReactNode; - /** - * Callback when item is clicked - */ - onClick?: (e: React.MouseEvent | React.KeyboardEvent) => void; - /** - * Is item active - */ - isActive?: boolean; - /** - * Is item disabled - */ - isDisabled?: boolean; -}; - -export type MapDropdownProps = { - /** - * Dropdown items - */ - children: React.ReactNode; - /** - * Callback when one of the items is clicked - */ - onItemClick?: (item: MapDropdownItem, index: number, e: React.MouseEvent | React.KeyboardEvent) => void; - /** - * Close menu when item is clicked. - * @default true - */ - closeMenuOnClick?: boolean; - /** - * Props passed to FloatingFocusManager - */ - focusManager?: Omit<React.ComponentProps<typeof FloatingFocusManager>, 'context' | 'children'>; - onOpenChange?: (isOpen: boolean) => void; - className?: string; - placement?: Placement; - layout?: 'column' | 'row'; - /** - * Controlled open state - */ - isOpen?: boolean; - sameWidth?: boolean; -}; - -type MapDropdownTriggerProps = { - children: React.ReactElement; -}; - -export type MapDropdownContentProps = { - items?: MapDropdownItem[]; - children?: React.ReactNode; -}; - -const MapDropdownTrigger = ({ children }: MapDropdownTriggerProps) => { - return children; -}; - -const MapDropdownContent = ({ items, children }: MapDropdownContentProps) => { - return null; -}; - -export const MapDropdown = (props: MapDropdownProps) => { - const { - children, - onItemClick, - closeMenuOnClick = true, - onOpenChange, - placement: placementProp = 'bottom-start', - layout = 'column', - isOpen: isOpenProp, - sameWidth = false, - className, - } = props; - const { initialFocus = -1, modal = false, ...restFocusManager } = props.focusManager ?? {}; - const { getLabel } = useLabels(); - const { visuallyHiddenDismiss = modal ? getLabel('close') : false } = restFocusManager ?? {}; - const nodeId = useFloatingNodeId(); - const listItemsRef = React.useRef<Array<HTMLAnchorElement | null>>([]); - const [internalIsOpen, setIsOpen] = React.useState(false); - const isOpen = isOpenProp !== undefined ? isOpenProp : internalIsOpen; - const [activeIndex, setActiveIndex] = React.useState<number | null>(null); - - let contentItems: MapDropdownItem[] = []; - let customContent: React.ReactNode = null; - let trigger: React.ReactElement | null = null; - - React.Children.forEach(children, (child) => { - if (React.isValidElement(child)) { - if (child.type === MapDropdownTrigger) { - trigger = (child.props as MapDropdownTriggerProps).children; - } else if (child.type === MapDropdownContent) { - const contentProps = child.props as MapDropdownContentProps; - const { items, children: contentChildren } = contentProps; - - if ( - Array.isArray(items) && - items.every( - (item): item is MapDropdownItem => typeof item === 'object' && item !== null && 'children' in item - ) - ) { - contentItems = items; - } else if (contentChildren) { - customContent = contentChildren; - } - } - } - }); - - if (!trigger) { - throw new Error('Dropdown must have a Dropdown.Trigger child'); - } - - const sameWidthMiddleware = { - name: 'sameWidth', - fn: ({ rects, elements }: { rects: { reference: { width: number } }; elements: { floating: HTMLElement } }) => { - const width = rects.reference.width; - elements.floating.style.width = `${width}px`; - return { - data: { width }, - }; - }, - }; - - const { x, y, strategy, refs, placement, context } = useFloating({ - placement: placementProp, - nodeId, - open: isOpen, - onOpenChange: (open) => { - if (isOpenProp === undefined) { - setIsOpen(open); - } - onOpenChange?.(open); - }, - middleware: [...(sameWidth ? [sameWidthMiddleware] : []), flip(), shift(), offset(5)], - whileElementsMounted: autoUpdate, - }); - - const firstSelectedItemIndex = contentItems.findIndex((i) => i.isActive); - - const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions([ - useClick(context), - useListNavigation(context, { - listRef: listItemsRef, - activeIndex, - selectedIndex: firstSelectedItemIndex, - onNavigate: setActiveIndex, - loop: true, - }), - useRole(context, { role: 'listbox' }), - useDismiss(context, { - outsidePress: (event) => { - const isNestedDropdown = event.target instanceof Element && event.target.closest('[data-floating-ui-portal]'); - return !isNestedDropdown; - }, - escapeKey: false, - referencePress: false, - }), - ]); - - const renderDropdown = (): JSX.Element | null => { - if (!isOpen) return null; - - const content = ( - <FloatingFocusManager - context={context} - initialFocus={initialFocus} - visuallyHiddenDismiss={visuallyHiddenDismiss} - modal={modal} - {...restFocusManager} - > - <div - {...getFloatingProps({ - ref: refs.setFloating, - style: { - position: strategy, - left: x ?? 0, - top: y ?? 0, - }, - className: classNames( - styles['tedi-map-dropdown'], - { - [styles['tedi-map-dropdown--row']]: layout === 'row', - [styles['tedi-map-dropdown--column']]: layout === 'column', - }, - className - ), - onKeyDown(event) { - if (event.key === 'Tab') { - setIsOpen(false); - } - }, - })} - data-placement={placement} - > - {contentItems.length > 0 ? contentItems.map((item, key) => renderDropdownItem(item, key)) : customContent} - </div> - </FloatingFocusManager> - ); - - return content; - }; - - const MapDropdownItemBEM = (item: MapDropdownItem) => - cn(styles['tedi-map-dropdown__item'], { - [styles['tedi-map-dropdown__item--active']]: item.isActive, - [styles['tedi-map-dropdown__item--disabled']]: item.isDisabled, - }); - - const onClick = (item: MapDropdownItem, index: number, e: React.MouseEvent | React.KeyboardEvent) => { - onItemClick?.(item, index, e); - item?.onClick?.(e); - - closeMenuOnClick && setIsOpen(false); - }; - - const renderDropdownItem = (item: MapDropdownItem, key: number): JSX.Element => ( - <button - key={key} - {...getItemProps({ - disabled: item.isDisabled, - tabIndex: activeIndex === key ? 0 : -1, - role: 'option', - className: MapDropdownItemBEM(item), - onClick: (e) => onClick(item, key, e), - onKeyDown(event) { - if (event.key === 'Enter') { - onClick(item, key, event); - } - }, - ref(node: HTMLAnchorElement) { - listItemsRef.current[key] = node; - }, - })} - > - {item.children} - </button> - ); - - const triggerWithProps = trigger - ? cloneElement(trigger, { - ...getReferenceProps({ - ref: refs.setReference, - tabIndex: 0, - // @ts-expect-error: 'rest' props do not fully match Anchor's expected props, but they are validated elsewhere - ...trigger.props, - }), - }) - : null; - - return ( - <> - {triggerWithProps} - <FloatingPortal>{renderDropdown()}</FloatingPortal> - </> - ); -}; - -MapDropdown.Trigger = MapDropdownTrigger; -MapDropdown.Content = MapDropdownContent; - -export default MapDropdown; diff --git a/libs/react-components/src/community/components/map-components/map-info/map-info.module.scss b/libs/react-components/src/community/components/map-components/map-info/map-info.module.scss deleted file mode 100644 index 00b7e23ca..000000000 --- a/libs/react-components/src/community/components/map-components/map-info/map-info.module.scss +++ /dev/null @@ -1,37 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-map-info__wrapper { - display: inline-flex; - align-items: flex-start; - font-size: var(--size-00); - line-height: var(--size-00); - color: var(--button-map-info-text-default); - background: var(--button-map-info-background-default); - border-radius: var(--borders-04); - - @include mixins.responsive-styles(padding, card-padding-xxs); - @include mixins.responsive-styles(gap, layout-grid-gutters-04); - - &:hover { - color: var(--button-map-info-text-open); - } - - &:focus-visible { - border: 1px solid var(--button-primary-border-focus); - } - - &.tedi-map-info--has-popover { - &:hover { - cursor: pointer; - } - } -} - -.tedi-map-info--open { - background: var(--button-primary-background-active); -} - -.tedi-map-info__toggler { - line-height: var(--size-00); - color: var(--button-map-info-text-default); -} diff --git a/libs/react-components/src/community/components/map-components/map-info/map-info.stories.tsx b/libs/react-components/src/community/components/map-components/map-info/map-info.stories.tsx deleted file mode 100644 index fbaffb874..000000000 --- a/libs/react-components/src/community/components/map-components/map-info/map-info.stories.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import { Link, Text, VerticalSpacing } from '../../../../tedi'; -import MapInfo from './map-info'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=178-24546&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof MapInfo> = { - component: MapInfo, - title: 'Community/Map components/MapInfo', -}; - -export default meta; -type Story = StoryObj<typeof MapInfo>; - -export const Default: Story = { - args: { - children: 'Eesti põhikaart 1:20 000 2016 Maa- ja Ruumiamet', - }, - parameters: { - backgrounds: { default: 'brand' }, - }, -}; - -export const WithPopoverContent: Story = { - args: { - children: 'X: 6449200.28 Y: 47102831.38 Z: 38.28', - popover: { - children: ( - <VerticalSpacing> - <Link>Autoriõiguste tekst 1</Link> - <Link>Autoriõiguste tekst 2</Link> - <Link>Autoriõiguste tekst 3</Link> - </VerticalSpacing> - ), - }, - }, - parameters: { - backgrounds: { default: 'brand' }, - }, -}; - -export const LongerContent: Story = { - args: { - children: ( - <VerticalSpacing size={0.5}> - <Text>X: 6449200.28 Y: 47102831.38 Z: 38.28</Text> - <Text>B: 38.8423 L: 38.8423</Text> - <Text>B: 59°10.3820’ L: 59°10.3820’</Text> - </VerticalSpacing> - ), - popover: { - children: ( - <VerticalSpacing> - <Link>Autoriõiguste tekst 1</Link> - <Link>Autoriõiguste tekst 2</Link> - <Link>Autoriõiguste tekst 3</Link> - </VerticalSpacing> - ), - }, - }, - parameters: { - backgrounds: { default: 'brand' }, - }, -}; diff --git a/libs/react-components/src/community/components/map-components/map-info/map-info.tsx b/libs/react-components/src/community/components/map-components/map-info/map-info.tsx deleted file mode 100644 index e85dc0906..000000000 --- a/libs/react-components/src/community/components/map-components/map-info/map-info.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import classNames from 'classnames'; -import React, { useState } from 'react'; - -import { Icon, Popover, PopoverContentProps } from '../../../../tedi'; -import styles from './map-info.module.scss'; - -export interface MapInfoProps { - /** - * Optional configuration for rendering info content inside a popover. - */ - popover?: PopoverContentProps; - /** - * The info content to display. Can be a single React node or an array of nodes. - */ - children: React.ReactNode | React.ReactNode[]; -} - -export const MapInfo = (props: MapInfoProps): JSX.Element => { - const { children, popover } = props; - const [open, setOpen] = useState(false); - - const wrapperClassName = classNames( - [styles['tedi-map-info__wrapper'], open && styles['tedi-map-info--open']], - popover && styles['tedi-map-info--has-popover'] - ); - - const mapAttributionContent = ( - <div className={wrapperClassName}> - {popover && ( - <Icon size={18} name={open ? 'expand_less' : 'expand_more'} className={styles['tedi-map-info__toggler']} /> - )} - {children} - </div> - ); - - if (popover) { - return ( - <Popover open={open} onToggle={() => setOpen(!open)}> - <Popover.Trigger>{mapAttributionContent}</Popover.Trigger> - <Popover.Content {...popover}>{popover?.children}</Popover.Content> - </Popover> - ); - } else { - return mapAttributionContent; - } -}; - -export default MapInfo; diff --git a/libs/react-components/src/community/components/map-components/map-layer/map-layer.module.scss b/libs/react-components/src/community/components/map-components/map-layer/map-layer.module.scss deleted file mode 100644 index 2b01b2a6a..000000000 --- a/libs/react-components/src/community/components/map-components/map-layer/map-layer.module.scss +++ /dev/null @@ -1,105 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -:root { - --tree-dimensions: 2px; - --panel-item-padding-left: 24px; -} - -.tedi-map-layer { - &__select-all { - padding: 1rem; - - @include mixins.responsive-styles(padding-top, card-padding-xs); - @include mixins.responsive-styles(padding-bottom, card-padding-xs); - } - - &__item { - padding: var(--card-padding-xs) 0; - - @include mixins.responsive-styles(padding-top, card-padding-xs); - @include mixins.responsive-styles(padding-bottom, card-padding-xs); - } - - > .tedi-map-layer__item { - position: relative; - padding-left: calc(var(--panel-item-padding-left) + 1rem); - - &::before { - position: absolute; - top: 0; - bottom: 0; - left: calc(var(--panel-gutter) + 1rem); - width: var(--tree-dimensions); - content: ''; - background-color: var(--general-border-primary); - border-radius: 0; - - @include mixins.responsive-styles(--panel-gutter, layout-grid-gutters-08); - } - - &::after { - position: absolute; - top: calc((var(--panel-gutter) * 2) + (calc(var(--tree-dimensions) * 2))); - bottom: 0; - left: calc(var(--panel-gutter) + 1rem); - width: var(--panel-gutter); - height: var(--tree-dimensions); - content: ''; - background-color: var(--general-border-primary); - border-radius: 0 10px 10px 0; - - @include mixins.responsive-styles(--panel-gutter, layout-grid-gutters-08); - } - - &:last-child::before { - height: calc((var(--panel-gutter) * 2) + (calc(var(--tree-dimensions) * 2))); - - @include mixins.responsive-styles(--panel-gutter, layout-grid-gutters-08); - } - - &:first-child::before { - @include mixins.responsive-styles(top, layout-grid-gutters-08); - } - - &:hover { - background-color: var(--sidepanel-item-white-background-hover); - - &::after, - &::before { - background-color: var(--sidepanel-tree-hover); - } - } - - &:hover .tedi-map-layer__actions { - pointer-events: auto; - opacity: 1; - } - } - - &__label { - font-weight: bold; - } - - &.tedi-map-layer--no-checkboxes { - .tedi-map-layer__item { - @include mixins.responsive-styles(padding-top, layout-grid-gutters-04); - @include mixins.responsive-styles(padding-bottom, layout-grid-gutters-04); - } - } -} - -.tedi-map-layer__row { - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; -} - -.tedi-map-layer__actions { - display: flex; - pointer-events: none; - opacity: 0; - transition: opacity 0.2s ease; - - @include mixins.responsive-styles(gap, layout-grid-gutters-04); -} diff --git a/libs/react-components/src/community/components/map-components/map-layer/map-layer.stories.tsx b/libs/react-components/src/community/components/map-components/map-layer/map-layer.stories.tsx deleted file mode 100644 index b65675031..000000000 --- a/libs/react-components/src/community/components/map-components/map-layer/map-layer.stories.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import MapLayer, { LayerOption } from './map-layer'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=427-91631&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof MapLayer> = { - component: MapLayer, - title: 'Community/Map components/MapLayer', -}; - -export default meta; -type Story = StoryObj<typeof MapLayer>; - -const layers: LayerOption[] = [ - { - id: 'boundary', - label: 'KÜ piiripunktid', - type: 'checkbox', - defaultChecked: true, - value: 'boundary', - name: 'boundary', - }, - { - id: 'show-on-map', - label: 'Kuva kaardil', - type: 'checkbox', - value: 'show-on-map', - name: 'show-on-map', - children: [ - { - id: 'select-tunnus', - label: '', - type: 'select', - placeholder: 'Tunnus', - defaultValue: { label: 'Tunnus', value: 'tunnus' }, - options: [ - { label: 'Tunnus', value: 'tunnus' }, - { label: 'Koordinaat', value: 'koordinaat' }, - { label: 'Piir', value: 'piir' }, - ], - }, - ], - }, - { - id: 'ownership', - label: 'KÜ omandivorm', - type: 'checkbox', - defaultChecked: true, - value: 'ownership', - name: 'ownership', - }, - { - id: 'purpose', - label: 'KÜ sihtotstarbe järgi', - type: 'checkbox', - value: 'purpose', - name: 'purpose', - }, -]; - -export const Default: Story = { - args: { - items: layers, - }, -}; diff --git a/libs/react-components/src/community/components/map-components/map-layer/map-layer.tsx b/libs/react-components/src/community/components/map-components/map-layer/map-layer.tsx deleted file mode 100644 index 0f25b75d5..000000000 --- a/libs/react-components/src/community/components/map-components/map-layer/map-layer.tsx +++ /dev/null @@ -1,219 +0,0 @@ -import classNames from 'classnames'; -import React, { useEffect, useState } from 'react'; - -import { Button, Checkbox, CheckboxProps, SelectProps, Text } from '../../../../tedi'; -import { UnknownType } from '../../../../tedi/types/commonTypes'; -import Select from '../map-select/map-select'; -import styles from './map-layer.module.scss'; - -type BaseLayerOption = { - /** - * Unique identifier used as the `id` for the input element. - */ - id: string; - /** - * Text label displayed next to the checkbox or select component. - */ - label: string; - /** - * Optional nested layer options, used to build a tree-like structure. - */ - children?: LayerOption[]; -}; - -export type CheckboxLayerOption = BaseLayerOption & - Omit<CheckboxProps, 'id' | 'label' | 'children'> & { - type: 'checkbox'; - }; - -export type SelectLayerOption = BaseLayerOption & - Omit<SelectProps, 'id' | 'label' | 'children'> & { - type: 'select'; - }; - -export type LabelLayerOption = BaseLayerOption & { - type: 'label'; -}; - -export type LayerOption = CheckboxLayerOption | SelectLayerOption | LabelLayerOption; - -export type MapLayerProps = { - /** - * List of layer options to display, which can be nested to form a hierarchy. - */ - items: LayerOption[]; - /** - * Optional label text for the "Select All" master checkbox. - */ - selectAllLabel?: string; -}; - -export const MapLayer = (props: MapLayerProps): JSX.Element => { - const { items, selectAllLabel = 'Kõik kihid' } = props; - const [checkedState, setCheckedState] = useState<Record<string, boolean>>({}); - const [selectValues, setSelectValues] = useState<Record<string, UnknownType>>({}); - const [indeterminate, setIndeterminate] = useState(false); - - useEffect(() => { - const initialChecks: Record<string, boolean> = {}; - const initialSelects: Record<string, UnknownType> = {}; - const walk = (nodes: LayerOption[]) => { - for (const item of nodes) { - if (item.type === 'checkbox') { - initialChecks[item.id] = item.defaultChecked ?? false; - } - if (item.type === 'select' && item.defaultValue) { - initialSelects[item.id] = item.defaultValue; - } - if (item.children) walk(item.children); - } - }; - walk(items); - setCheckedState(initialChecks); - setSelectValues(initialSelects); - }, [items]); - - useEffect(() => { - const values = Object.values(checkedState); - const total = values.length; - const checkedCount = values.filter(Boolean).length; - setIndeterminate(checkedCount > 0 && checkedCount < total); - }, [checkedState]); - - const handleCheck = (id: string, checked: boolean) => { - setCheckedState((prev) => ({ ...prev, [id]: checked })); - if (!checked) { - const findAndClear = (nodes: LayerOption[]) => { - for (const node of nodes) { - if (node.id === id && node.children) { - for (const child of node.children) { - if (child.type === 'select') { - setSelectValues((prev) => ({ ...prev, [child.id]: undefined })); - } - if (child.type === 'checkbox') { - setCheckedState((prev) => ({ ...prev, [child.id]: false })); - } - if (child.children) findAndClear([child]); - } - } else if (node.children) { - findAndClear(node.children); - } - } - }; - findAndClear(items); - } - }; - - const handleSelectAll = (checked: boolean) => { - const allChecks: Record<string, boolean> = {}; - const walk = (nodes: LayerOption[]) => { - for (const node of nodes) { - if (node.type === 'checkbox') { - allChecks[node.id] = checked; - } - if (node.children) walk(node.children); - } - }; - walk(items); - setCheckedState(allChecks); - - if (!checked) { - setSelectValues({}); - } - }; - - const renderItem = (item: LayerOption, level = 0) => { - const isChecked = checkedState[item.id] ?? false; - - return ( - <div - key={item.id} - className={classNames(styles['tedi-map-layer__item'], styles[`tedi-map-layer__level-${level}`])} - > - <div className={styles['tedi-map-layer__row']}> - {item.type === 'checkbox' && ( - <Checkbox - id={item.id} - label={item.label} - name={item.id} - checked={isChecked} - onChange={(_, checked) => handleCheck(item.id, checked)} - value="" - /> - )} - {item.type === 'select' && ( - <Select - id={item.id} - label={item.label} - options={item.options ?? []} - value={selectValues[item.id]} - onChange={(value) => setSelectValues((prev) => ({ ...prev, [item.id]: value }))} - /> - )} - {item.type === 'checkbox' && ( - <div className={styles['tedi-map-layer__actions']}> - <Button visualType="link" icon="download"> - Download - </Button> - <Button visualType="link" icon="edit"> - Edit - </Button> - <Button visualType="link" icon="info"> - Info - </Button> - <Button visualType="link" icon="more_horiz"> - Show more actions - </Button> - </div> - )} - </div> - - {item.type === 'label' && ( - <div key={item.id} className={styles['tedi-map-layer__item']}> - <div className={styles['tedi-map-layer__label']}>{item.label}</div> - {item.children?.map((child) => renderItem(child, level + 1))} - </div> - )} - {item.children?.map((child) => renderItem(child, level + 1))} - </div> - ); - }; - - const hasCheckboxes = (nodes: LayerOption[]): boolean => { - return nodes.some((item) => - item.type === 'checkbox' ? true : item.children ? hasCheckboxes(item.children) : false - ); - }; - - return ( - <div className={styles['tedi-map-layer']}> - <div className={styles['tedi-map-layer__select-all']}> - {hasCheckboxes(items) ? ( - <Checkbox - id="select-all" - label={selectAllLabel} - name="select-all" - value="all" - checked={Object.values(checkedState).every(Boolean)} - indeterminate={indeterminate} - onChange={(_, checked) => handleSelectAll(checked)} - /> - ) : ( - <Text color="primary" modifiers={['bold']}> - {selectAllLabel} - </Text> - )} - </div> - <div - className={classNames( - styles['tedi-map-layer'], - !hasCheckboxes(items) && styles['tedi-map-layer--no-checkboxes'] - )} - > - {items.map((item) => renderItem(item, 1))} - </div> - </div> - ); -}; - -export default MapLayer; diff --git a/libs/react-components/src/community/components/map-components/map-preview/map-preview.module.scss b/libs/react-components/src/community/components/map-components/map-preview/map-preview.module.scss deleted file mode 100644 index d6795b23b..000000000 --- a/libs/react-components/src/community/components/map-components/map-preview/map-preview.module.scss +++ /dev/null @@ -1,58 +0,0 @@ -.tedi-map-preview__container { - position: relative; - - &--opened { - width: 200px; - height: 150px; - - .tedi-map-preview__button { - position: absolute; - right: 10px; - bottom: 10px; - z-index: 10; - } - } - - &--closed { - width: auto; - height: auto; - } -} - -.tedi-map-preview__content-wrapper { - position: relative; - width: 100%; - height: 100%; -} - -.tedi-map-preview__content { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - overflow: hidden; - background: var(--general-surface-primary); - border: 1px solid var(--general-border-primary); - border-radius: 4px; - box-shadow: 0 1px 5px 0 var(--alpha-20); - transition: ease-in-out 0.5 all; - - &[data-state='closed'] { - visibility: hidden; - opacity: 0; - transform: scale(0.8); - } - - &[data-state='open'] { - visibility: visible; - opacity: 1; - transform: scale(1); - } - - & > * { - width: 100%; - height: 100%; - object-fit: cover; - } -} diff --git a/libs/react-components/src/community/components/map-components/map-preview/map-preview.stories.tsx b/libs/react-components/src/community/components/map-components/map-preview/map-preview.stories.tsx deleted file mode 100644 index ecabf6827..000000000 --- a/libs/react-components/src/community/components/map-components/map-preview/map-preview.stories.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import MapPreview from './map-preview'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=179-24889&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof MapPreview> = { - component: MapPreview, - title: 'Community/Map components/MapPreview', -}; - -export default meta; -type Story = StoryObj<typeof MapPreview>; - -export const Default: Story = { - args: { - children: <img src="https://snazzy-maps-cdn.azureedge.net/assets/72543-assassins-creed-iv.png" alt="mini map" />, - }, -}; - -export const Closed: Story = { - args: { - children: <img src="https://snazzy-maps-cdn.azureedge.net/assets/72543-assassins-creed-iv.png" alt="mini map" />, - isOpen: false, - }, -}; diff --git a/libs/react-components/src/community/components/map-components/map-preview/map-preview.tsx b/libs/react-components/src/community/components/map-components/map-preview/map-preview.tsx deleted file mode 100644 index 338c88c1e..000000000 --- a/libs/react-components/src/community/components/map-components/map-preview/map-preview.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import classNames from 'classnames'; -import React, { JSX, useState } from 'react'; - -import { useLabels } from '../../../../tedi'; -import ActionButton from '../map-button/map-button'; -import styles from './map-preview.module.scss'; - -export interface MapPreviewProps { - /** - * The content to be displayed when the overlay is in the open state. - * This can be any valid React node, such as a map component, image, or custom UI. - * The content will automatically fill the container's dimensions when open. - */ - children: React.ReactNode; - /** - * Controls whether the overlay is open (true) or closed (false). - * When provided, the component becomes controlled and the parent is responsible - * for managing the open/closed state via onToggle. - * When undefined, the component manages its own state internally. - * @default undefined (uncontrolled) - */ - isOpen?: boolean; - /** - * Callback function invoked when the overlay's open state changes. - * Receives the new state (boolean) as its argument. - * Required when using controlled mode (isOpen prop). - */ - onToggle?: (isOpen: boolean) => void; - /** - * Custom render function for the closed state. - * Receives a toggle function as an argument that can be used to open the overlay. - * When provided, this overrides the default closed state button. - * @param toggle - Function to call when triggering open action - * @returns React node to render in closed state - */ - renderClosedState?: (toggle: () => void) => React.ReactNode; - /** - * Custom render function for the open state controls. - * Receives a toggle function as an argument that can be used to close the overlay. - * When provided, this overrides the default open state button. - * Note: The main content (children) will still be rendered automatically. - * @param toggle - Function to call when triggering close action - * @returns React node to render as controls in open state - */ - renderOpenState?: (toggle: () => void) => React.ReactNode; -} - -export const MapPreview = (props: MapPreviewProps): JSX.Element => { - const { children, isOpen: controlledIsOpen, onToggle, renderClosedState, renderOpenState } = props; - const { getLabel } = useLabels(); - const [uncontrolledIsOpen, setUncontrolledIsOpen] = useState(true); - const isControlled = controlledIsOpen !== undefined; - const isOpen = isControlled ? controlledIsOpen : uncontrolledIsOpen; - - const toggle = () => { - const newState = !isOpen; - if (!isControlled) { - setUncontrolledIsOpen(newState); - } - onToggle?.(newState); - }; - - const containerClasses = classNames( - styles['tedi-map-preview__container'], - styles[`tedi-map-preview__container--${isOpen ? 'opened' : 'closed'}`] - ); - - const renderContentWrapper = (content: React.ReactNode) => ( - <div className={styles['tedi-map-preview__content-wrapper']}>{content}</div> - ); - - const renderContent = () => { - if (renderClosedState && !isOpen) { - return renderContentWrapper(renderClosedState(toggle)); - } - - if (renderOpenState && isOpen) { - return ( - <> - {renderContentWrapper( - <div className={styles['tedi-map-preview__content']} data-state={`${isOpen ? 'opened' : 'closed'}`}> - {children} - </div> - )} - {renderOpenState(toggle)} - </> - ); - } - - return ( - <> - {isOpen && - renderContentWrapper( - <div className={styles['tedi-map-preview__content']} data-state={`${isOpen ? 'opened' : 'closed'}`}> - {children} - </div> - )} - <ActionButton - size="small" - onClick={toggle} - icon={isOpen ? 'south_east' : 'north_west'} - className={styles['tedi-map-preview__button']} - hideLabel - > - {getLabel(isOpen ? 'close' : 'open')} - </ActionButton> - </> - ); - }; - - return <div className={containerClasses}>{renderContent()}</div>; -}; - -export default MapPreview; diff --git a/libs/react-components/src/community/components/map-components/map-select/map-select.module.scss b/libs/react-components/src/community/components/map-components/map-select/map-select.module.scss deleted file mode 100644 index 0732ea254..000000000 --- a/libs/react-components/src/community/components/map-components/map-select/map-select.module.scss +++ /dev/null @@ -1,10 +0,0 @@ -/** will be fixed in tedi-select, this override is for the dark-mode */ -.tedi-map-select__control-wrapper { - color: var(--form-input-text-filled) !important; - background-color: var(--form-input-background-default) !important; - border-color: var(--form-input-border-default) !important; -} - -.tedi-map-select__single-value { - color: var(--form-input-text-filled) !important; -} diff --git a/libs/react-components/src/community/components/map-components/map-select/map-select.tsx b/libs/react-components/src/community/components/map-components/map-select/map-select.tsx deleted file mode 100644 index 1f8eda198..000000000 --- a/libs/react-components/src/community/components/map-components/map-select/map-select.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { JSX } from 'react'; - -import { Select, SelectProps } from '../../../../tedi'; -import styles from './map-select.module.scss'; - -export const MapSelect = (props: SelectProps): JSX.Element => { - return ( - <Select - {...props} - classNames={{ - control: styles['tedi-map-select__control-wrapper'], - singleValue: styles['tedi-map-select__single-value'], - }} - /> - ); -}; - -export default MapSelect; diff --git a/libs/react-components/src/community/components/map-components/resizer/resizer.module.scss b/libs/react-components/src/community/components/map-components/resizer/resizer.module.scss deleted file mode 100644 index 7063515ec..000000000 --- a/libs/react-components/src/community/components/map-components/resizer/resizer.module.scss +++ /dev/null @@ -1,188 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-resize__wrapper { - position: relative; - display: block; - overflow: visible; -} - -.tedi-resize__content { - width: 100%; - height: 100%; - - > * { - height: 100%; - } -} - -.tedi-resize__drag-indicator { - position: absolute; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - width: 14px; - height: 24px; - padding: 3px 0; - background-color: var(--drag-indicator-button-background); - border-radius: 0 var(--button-radius-sm, 4px) var(--button-radius-sm, 4px) 0; - - > span { - transform: rotate(90deg); - } -} - -.tedi-resize__handle-wrapper { - position: absolute; - z-index: 100; - background-color: var(--alpha-01); - - .tedi-resize__drag-handle { - position: absolute; - display: none; - box-shadow: 0 4px 10px 0 var(--alpha-14); - } - - &[data-show-indicator='true'] { - background-color: var(--drag-indicator-accent); - - .tedi-resize__drag-handle { - display: inline-flex; - } - } - - &:active, - &:hover { - background-color: var(--drag-indicator-accent); - - .tedi-resize__drag-handle { - display: inline-flex; - } - } - - &.direction-right { - top: 0; - right: 0; - height: 100%; - cursor: col-resize; - - @include mixins.responsive-styles(width, drag-indicator-vertical-width); - - .tedi-resize__drag-handle { - top: 50%; - right: calc((var(--handle-button-size) / 2) * -1); - - > span { - transform: rotate(90deg); - } - } - - .tedi-resize__drag-indicator { - top: calc(50% - 12px); - - @include mixins.responsive-styles(left, drag-indicator-vertical-width); - } - } - - &.direction-left { - top: 0; - left: 0; - height: 100%; - cursor: col-resize; - - @include mixins.responsive-styles(width, drag-indicator-vertical-width); - - .tedi-resize__drag-handle { - top: 50%; - left: calc((var(--handle-button-size) / 2) * -1); - transform: translateY(-50%); - - > span { - transform: rotate(90deg); - } - } - - .tedi-resize__drag-indicator { - top: calc(50% - 12px); - left: -14px; - transform: rotate(180deg); - - @include mixins.responsive-styles(--dragger-width, drag-indicator-vertical-width); - } - } - - &.direction-top { - top: 0; - left: 0; - width: 100%; - cursor: row-resize; - - @include mixins.responsive-styles(height, drag-indicator-vertical-width); - - .tedi-resize__drag-handle { - top: calc((var(--handle-button-size) / 2) * -1); - left: 50%; - transform: translateX(-50%); - } - - .tedi-resize__drag-indicator { - top: -18px; - left: calc(50% - 6px); - transform: rotate(-90deg); - - @include mixins.responsive-styles(--dragger-width, drag-indicator-vertical-width); - } - } - - &.direction-bottom { - bottom: 0; - left: 0; - width: 100%; - cursor: row-resize; - - @include mixins.responsive-styles(height, drag-indicator-vertical-width); - - .tedi-resize__drag-handle { - top: calc((var(--handle-button-size) / 2) * -1); - left: 50%; - transform: translateX(-50%); - } - - .tedi-resize__drag-indicator { - bottom: -18px; - left: calc(50% - 8px); - transform: rotate(90deg); - - @include mixins.responsive-styles(--dragger-width, drag-indicator-vertical-width); - } - } - - &:hover { - .tedi-resize__drag-indicator { - display: none; - } - } -} - -.tedi-resize__drag-handle { - position: absolute; - top: 50%; - z-index: 12; - display: flex; - align-items: center; - justify-content: center; - margin-right: calc((var(--handle-button-size) / 2) * -1); - background-color: var(--button-floating-secondary-background-default); - box-shadow: 0 4px 10px 0 var(--alpha-14); - transform: translate(-50%, -50%); - - @include mixins.responsive-styles(--handle-button-size, button-sm-icon-size); - @include mixins.responsive-styles(width, button-sm-icon-size); - @include mixins.responsive-styles(height, button-sm-icon-size); - @include mixins.responsive-styles(border-radius, button-radius-default); - - > span { - width: 100%; - color: var(--button-floating-secondary-text-default); - } -} diff --git a/libs/react-components/src/community/components/map-components/resizer/resizer.stories.tsx b/libs/react-components/src/community/components/map-components/resizer/resizer.stories.tsx deleted file mode 100644 index f411abfbc..000000000 --- a/libs/react-components/src/community/components/map-components/resizer/resizer.stories.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import Placeholder from '../../placeholder/placeholder'; -import Resizer from './resizer'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=88-17734&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof Resizer> = { - component: Resizer, - title: 'Community/Map components/Resizer', -}; - -export default meta; -type Story = StoryObj<typeof Resizer>; - -export const ResizeRight: Story = { - name: 'Resize from Right', - args: { - handlePosition: 'right', - showIndicator: true, - children: <Placeholder>You have no data to display.</Placeholder>, - }, -}; - -export const ResizeLeft: Story = { - name: 'Resize from Left', - args: { - handlePosition: 'left', - showIndicator: true, - children: <Placeholder>You have no data to display.</Placeholder>, - }, - decorators: [ - (Story) => ( - <div style={{ display: 'flex', justifyContent: 'flex-end', padding: '2rem' }}> - <Story /> - </div> - ), - ], -}; - -export const ResizeTop: Story = { - name: 'Resize from Top', - args: { - handlePosition: 'top', - showIndicator: true, - initialHeight: 118, - minHeight: 118, - children: <Placeholder>You have no data to display.</Placeholder>, - }, - decorators: [ - (Story) => ( - <div style={{ display: 'flex', height: '400px', alignItems: 'flex-end', padding: '2rem' }}> - <Story /> - </div> - ), - ], -}; - -export const ResizeBottom: Story = { - name: 'Resize from Bottom', - args: { - handlePosition: 'bottom', - initialHeight: 118, - minHeight: 118, - showIndicator: true, - children: <Placeholder>You have no data to display.</Placeholder>, - }, - decorators: [ - (Story) => ( - <div style={{ display: 'flex', height: '400px', alignItems: 'flex-start', padding: '2rem' }}> - <Story /> - </div> - ), - ], -}; - -export const DragIndicator: Story = { - args: { - handlePosition: 'right', - children: <Placeholder>You have no data to display.</Placeholder>, - }, -}; diff --git a/libs/react-components/src/community/components/map-components/resizer/resizer.tsx b/libs/react-components/src/community/components/map-components/resizer/resizer.tsx deleted file mode 100644 index 04fc38088..000000000 --- a/libs/react-components/src/community/components/map-components/resizer/resizer.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import { JSX, useEffect, useRef, useState } from 'react'; - -import { Icon } from '../../../../tedi'; -import styles from './resizer.module.scss'; - -interface ResizerProps { - /** - * The content to be rendered inside the resizable container. - */ - children: React.ReactNode; - /** - * Minimum allowed width in pixels. Optional. - */ - minWidth?: number; - /** - * Maximum allowed width in pixels. Optional. - */ - maxWidth?: number; - /** - * Initial width of the container in pixels. Optional. - */ - initialWidth?: number; - /** - * Minimum allowed height in pixels. Optional. - */ - minHeight?: number; - /** - * Maximum allowed height in pixels. Optional. - */ - maxHeight?: number; - /** - * Initial height of the container in pixels. Optional. - */ - initialHeight?: number; - /** - * Position of the resize handle. Can be `'right'`, `'left'`, `'top'`, or `'bottom'`. - * Determines the direction from which resizing is possible. - */ - handlePosition?: 'right' | 'left' | 'top' | 'bottom'; - /** - * Optional additional class name(s) for the container. - */ - className?: string; - /** - * Whether to show a visual resize indicator (e.g., drag handle). Optional. - */ - showIndicator?: boolean; -} - -export const Resizer = (props: ResizerProps): JSX.Element => { - const { - children, - minWidth = 300, - maxWidth = 600, - initialWidth = 350, - minHeight = 200, - maxHeight = 600, - initialHeight = 350, - className, - handlePosition = 'right', - showIndicator = false, - } = props; - const wrapperRef = useRef<HTMLDivElement | null>(null); - const isResizing = useRef(false); - const startPosition = useRef<{ x: number; y: number; width: number; height: number }>({ - x: 0, - y: 0, - width: initialWidth, - height: initialHeight, - }); - - const [dimensions, setDimensions] = useState({ - width: initialWidth, - height: initialHeight, - }); - - useEffect(() => { - const handleMouseMove = (e: MouseEvent) => { - if (!isResizing.current || !wrapperRef.current) return; - - e.preventDefault(); - const dx = e.clientX - startPosition.current.x; - const dy = e.clientY - startPosition.current.y; - - setDimensions((prev) => { - let newWidth = prev.width; - let newHeight = prev.height; - - if (handlePosition === 'right') { - newWidth = Math.min(Math.max(startPosition.current.width + dx, minWidth), maxWidth); - } else if (handlePosition === 'left') { - newWidth = Math.min(Math.max(startPosition.current.width - dx, minWidth), maxWidth); - } else if (handlePosition === 'bottom') { - newHeight = Math.min(Math.max(startPosition.current.height + dy, minHeight), maxHeight); - } else if (handlePosition === 'top') { - newHeight = Math.min(Math.max(startPosition.current.height - dy, minHeight), maxHeight); - } - - return { width: newWidth, height: newHeight }; - }); - }; - - const handleMouseUp = () => { - isResizing.current = false; - document.body.style.userSelect = ''; - }; - - document.addEventListener('mousemove', handleMouseMove); - document.addEventListener('mouseup', handleMouseUp); - - return () => { - document.removeEventListener('mousemove', handleMouseMove); - document.removeEventListener('mouseup', handleMouseUp); - }; - }, [handlePosition, minWidth, maxWidth, minHeight, maxHeight]); - - const handleMouseDown = (e: React.MouseEvent) => { - e.preventDefault(); - isResizing.current = true; - document.body.style.userSelect = 'none'; - - startPosition.current = { - x: e.clientX, - y: e.clientY, - width: dimensions.width, - height: dimensions.height, - }; - }; - - return ( - <div - ref={wrapperRef} - className={`${styles['tedi-resize__wrapper']} ${className || ''}`} - style={{ - width: `${dimensions.width}px`, - height: handlePosition === 'top' || handlePosition === 'bottom' ? `${dimensions.height}px` : 'auto', - position: 'relative', - display: 'block', - }} - > - <div className={styles['tedi-resize__content']}>{children}</div> - <div - className={`${styles['tedi-resize__handle-wrapper']} ${styles[`direction-${handlePosition}`]}`} - onMouseDown={handleMouseDown} - data-show-indicator={showIndicator} - > - <div className={styles['tedi-resize__drag-handle']}> - <Icon name="drag_handle" size={18} /> - </div> - {!showIndicator && ( - <div className={styles['tedi-resize__drag-indicator']}> - <Icon name="drag_handle" color="brand" size={18} /> - </div> - )} - </div> - </div> - ); -}; - -export default Resizer; diff --git a/libs/react-components/src/community/components/map-components/right-panel/examples.tsx b/libs/react-components/src/community/components/map-components/right-panel/examples.tsx deleted file mode 100644 index 76c1d4493..000000000 --- a/libs/react-components/src/community/components/map-components/right-panel/examples.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { Button, Card, Checkbox, ChoiceGroup, Col, Row, Separator, Text, VerticalSpacing } from '../../../../tedi'; -import MapAccordion from '../map-accordion/map-accordion'; -import MapAccordionItem from '../map-accordion/map-accordion-item'; -import MapAccordionItemContent from '../map-accordion/map-accordion-item-content'; -import MapAccordionItemHeader from '../map-accordion/map-accordion-item-header'; - -const layers = [ - { id: 'koordinaadid', label: <Text>Koordinaadid</Text>, content: <>Lorem</> }, - { id: 'hoone', label: <Text>Hoone (7291722)</Text>, content: <>Lorem</> }, - { id: 'metainfo', label: <Text>Metainfo (587545)</Text>, content: <>Lorem</> }, -]; - -export const measurementContent = ( - <Card borderRadius={false} borderless> - <Card.Content> - <ChoiceGroup - id="choice-group" - inputType="radio" - items={[ - { id: 'radio-card-1', label: 'Mõõda joone pikkust', value: 'value-1', defaultChecked: true }, - { id: 'radio-card-2', label: 'Mõõda pindala', value: 'value-2' }, - { id: 'radio-card-3', label: 'Mõõda ringina', value: 'value-3' }, - ]} - hideLabel - label="Filter" - name="Map actions" - color="secondary" - showIndicator - variant="card" - layout="separated" - /> - <Separator color="primary" spacing={1} /> - <VerticalSpacing size={0.5}> - <Checkbox - id="show-lengths" - label="Näita pikkusi" - name="show-lengths" - value="checkbox" - tooltip="This is a tooltip" - /> - <Checkbox id="show-angles" label="Näita nurki" name="show-angles" value="checkbox" /> - </VerticalSpacing> - <Separator color="primary" spacing={1} /> - <VerticalSpacing> - <div> - <Text color="secondary">Joone kogupikkus</Text> - <Text modifiers="bold">345,234 km</Text> - </div> - <div> - <Text color="secondary">Viimane jooksev lõik</Text> - <Text modifiers="bold">34,23 km</Text> - </div> - </VerticalSpacing> - <Separator color="primary" spacing={1} /> - <Row justifyContent="between"> - <Col width="auto"> - <Button visualType="secondary" iconLeft="edit"> - Muuda - </Button> - </Col> - <Col> - <Button visualType="secondary" iconLeft="delete"> - Kustuta - </Button> - </Col> - </Row> - </Card.Content> - </Card> -); - -export const infoQueryContent = ( - <Card borderRadius={false} borderless padding={0}> - <Card.Content> - <MapAccordion> - {layers.map(({ id, label, content }) => ( - <MapAccordionItem key={id} id={id}> - <MapAccordionItemHeader backgroundColor="secondary" hasSeparator> - {label} - </MapAccordionItemHeader> - <MapAccordionItemContent padding={0}> - <Card borderRadius={false} borderless> - <Card.Content padding={1}>{content}</Card.Content> - </Card> - </MapAccordionItemContent> - </MapAccordionItem> - ))} - </MapAccordion> - </Card.Content> - </Card> -); diff --git a/libs/react-components/src/community/components/map-components/right-panel/right-panel.module.scss b/libs/react-components/src/community/components/map-components/right-panel/right-panel.module.scss deleted file mode 100644 index 8af68e130..000000000 --- a/libs/react-components/src/community/components/map-components/right-panel/right-panel.module.scss +++ /dev/null @@ -1,39 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-right-panel { - position: relative; - top: 10px; - right: 10px; - z-index: 1000; - width: 330px; - overflow: hidden; - box-shadow: 0 1px 5px 0 var(--alpha-20); - - @include mixins.responsive-styles(border-radius, sidepanel-right-radius); - - &--single { - .tedi-right-panel__accordion-header { - padding: 10px; - background-color: var(--sidepanel-header-background-default); - - & > * { - display: flex; - flex-direction: column; - align-items: flex-start; - align-self: flex-start; - - @include mixins.responsive-styles(gap, layout-grid-gutters-08); - - &:not(:last-child) { - align-self: center; - } - } - } - } - - &__closer { - & > * { - color: var(--general-text-white); - } - } -} diff --git a/libs/react-components/src/community/components/map-components/right-panel/right-panel.stories.tsx b/libs/react-components/src/community/components/map-components/right-panel/right-panel.stories.tsx deleted file mode 100644 index a720441d4..000000000 --- a/libs/react-components/src/community/components/map-components/right-panel/right-panel.stories.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import { Button, Card, Text, VerticalSpacing } from '../../../../tedi'; -import { measurementContent } from './examples'; -import RightPanel from './right-panel'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=427-91631&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof RightPanel> = { - component: RightPanel, - title: 'Community/Map components/RightPanel', -}; - -export default meta; -type Story = StoryObj<typeof RightPanel>; - -export const Default: Story = { - args: { - defaultOpenItem: ['first'], - items: [ - { id: 'first', title: 'Infopäring', content: measurementContent }, - { - id: 'second', - title: 'Mõõtmine', - content: ( - <Card borderRadius={false} borderless> - <Card.Content>Lorem ipsum dolor sit amet</Card.Content> - </Card> - ), - }, - ], - }, -}; - -export const OneItem: Story = { - args: { - defaultOpenItem: ['first'], - renderToggleButton: false, - items: [ - { - id: 'first', - title: ( - <VerticalSpacing size={0.5}> - <Text modifiers={['thin', 'h4']}>Infopäring</Text> - <Button visualType="secondary" iconRight="north_east" size="small"> - Kaldaaerofotod - </Button> - </VerticalSpacing> - ), - content: measurementContent, - }, - ], - }, -}; diff --git a/libs/react-components/src/community/components/map-components/right-panel/right-panel.tsx b/libs/react-components/src/community/components/map-components/right-panel/right-panel.tsx deleted file mode 100644 index 65a2be2b2..000000000 --- a/libs/react-components/src/community/components/map-components/right-panel/right-panel.tsx +++ /dev/null @@ -1,162 +0,0 @@ -import classNames from 'classnames'; -import React, { JSX } from 'react'; - -import { ClosingButton } from '../../../../tedi'; -import MapAccordion from '../map-accordion/map-accordion'; -import MapAccordionItem from '../map-accordion/map-accordion-item'; -import MapAccordionItemContent from '../map-accordion/map-accordion-item-content'; -import MapAccordionItemHeader from '../map-accordion/map-accordion-item-header'; -import styles from './right-panel.module.scss'; - -interface AccordionItemData { - /** - * Unique identifier for the accordion item. - */ - id: string; - /** - * Title displayed in the accordion header. - * Can be a plain string or a custom React node. - */ - title: string | React.ReactNode; - /** - * Content shown when the accordion item is expanded. - */ - content: React.ReactNode; -} - -interface RightPanelProps { - /** - * List of accordion items to be displayed in the panel. - */ - items: AccordionItemData[]; - /** - * IDs of the accordion items that should be open by default. - * Can be an empty array or undefined if no items should be open initially. - */ - defaultOpenItem?: string[]; - /** - * Optional title for the "expand all/collapse all" control (if rendered). - */ - expanderTitle?: string; - /** - * Whether to render the toggle button for expanding or collapsing all items. - */ - renderToggleButton?: boolean; - - /** - * Optional custom close button renderer (receives the item's id). - * If omitted and `showCloseButton` is true, a default close button is used. - * If `showCloseButton` is false, this prop is ignored. - */ - renderCloseButton?: (id: string) => React.ReactNode; - - /** - * Show or hide the close button per item. - * If false, no close button is rendered. - * @default true - */ - showCloseButton?: boolean; - - /** - * Side-effect hook invoked after an item is removed (closed). - * Useful to notify backend or update global state. - */ - onCloseItem?: (id: string) => void; -} - -type DefaultCloseButtonProps = { id: string; isSingleItem: boolean; onClose: (id: string) => void }; - -export const DefaultCloseButton = ({ id, isSingleItem, onClose }: DefaultCloseButtonProps): JSX.Element => ( - <ClosingButton - className={styles['tedi-right-panel__closer']} - size={isSingleItem ? 'large' : 'medium'} - onClick={() => onClose(id)} - title="Sulge aken" - /> -); -DefaultCloseButton.displayName = 'DefaultCloseButton'; - -const createDefaultRenderCloseButton = (isSingleItem: boolean, onClose: (id: string) => void) => { - const RightPanelDefaultRenderCloseButton = (id: string) => ( - <DefaultCloseButton id={id} isSingleItem={isSingleItem} onClose={onClose} /> - ); - RightPanelDefaultRenderCloseButton.displayName = 'RightPanelDefaultRenderCloseButton'; - return RightPanelDefaultRenderCloseButton; -}; - -export const RightPanel = (props: RightPanelProps): JSX.Element => { - const { - items, - defaultOpenItem = [], - expanderTitle = 'Toimingu aknad', - renderToggleButton, - renderCloseButton, - showCloseButton = true, - onCloseItem, - } = props; - - // track which items were dismissed (removed) locally - const [dismissedIds, setDismissedIds] = React.useState<Set<string>>(new Set()); - - // prune dismissed ids if parent no longer supplies those items (keeps state tidy) - React.useEffect(() => { - setDismissedIds((prev) => { - const next = new Set<string>(); - const currentIds = new Set(items.map((i) => i.id)); - prev.forEach((id) => { - if (currentIds.has(id)) next.add(id); - }); - return next; - }); - }, [items]); - - // compute visible items by filtering out dismissed ones - const visibleItems = React.useMemo(() => items.filter(({ id }) => !dismissedIds.has(id)), [items, dismissedIds]); - - // central close handler — removes item locally and notifies parent - const handleClose = (id: string) => { - setDismissedIds((prev) => { - const next = new Set(prev); - next.add(id); - return next; - }); - onCloseItem?.(id); - }; - - // decide which close renderer to pass into MapAccordion - // If showCloseButton=false -> undefined (no close button rendered at all) - const isSingleItem = visibleItems.length === 1; - const effectiveRenderCloseButton = showCloseButton - ? renderCloseButton ?? createDefaultRenderCloseButton(isSingleItem, handleClose) - : undefined; - - return ( - <div - className={classNames(styles['tedi-right-panel'], { - [styles['tedi-right-panel--single']]: isSingleItem, - [styles['tedi-right-panel--multi']]: !isSingleItem, - })} - > - <MapAccordion - defaultOpenItem={defaultOpenItem} - className={styles['tedi-right-panel__accordion']} - expanderMode - expanderTitle={expanderTitle} - renderCloseButton={effectiveRenderCloseButton} - > - {visibleItems.map(({ id, title, content }) => ( - <MapAccordionItem key={id} id={id}> - <MapAccordionItemHeader - className={styles['tedi-right-panel__accordion-header']} - renderToggleButton={renderToggleButton} - title={title} - /> - <MapAccordionItemContent>{content}</MapAccordionItemContent> - </MapAccordionItem> - ))} - </MapAccordion> - </div> - ); -}; - -export default RightPanel; diff --git a/libs/react-components/src/community/components/map-components/scale-bar/scale-bar.module.scss b/libs/react-components/src/community/components/map-components/scale-bar/scale-bar.module.scss deleted file mode 100644 index b3e919c17..000000000 --- a/libs/react-components/src/community/components/map-components/scale-bar/scale-bar.module.scss +++ /dev/null @@ -1,37 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-scale-bar { - &__wrapper { - display: flex; - align-items: flex-end; - font-size: var(--size-00); - line-height: var(--size-00); - color: var(--button-map-info-text-default); - - @include mixins.responsive-styles(gap, layout-grid-gutters-04); - } - - &__indicator { - position: relative; - height: 1px; - background-color: var(--button-map-info-text-default); - - &::after, - &::before { - position: absolute; - bottom: 0; - width: 1px; - height: 10px; - content: ''; - background-color: var(--button-map-info-text-default); - } - - &::before { - left: 0; - } - - &::after { - right: 0; - } - } -} diff --git a/libs/react-components/src/community/components/map-components/scale-bar/scale-bar.stories.tsx b/libs/react-components/src/community/components/map-components/scale-bar/scale-bar.stories.tsx deleted file mode 100644 index 9db2efd9b..000000000 --- a/libs/react-components/src/community/components/map-components/scale-bar/scale-bar.stories.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import ScaleBar from './scale-bar'; - -/** - * <a href="?path=/docs/veera-kaardirakendus-mapattribution--docs" target="_BLANK">Part of MapAttribution component</a><br/> - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=178-24546&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof ScaleBar> = { - component: ScaleBar, - title: 'Community/Map components/ScaleBar', -}; - -export default meta; -type Story = StoryObj<typeof ScaleBar>; - -export const Default: Story = { - args: { - zoomLevel: 0, - }, -}; diff --git a/libs/react-components/src/community/components/map-components/scale-bar/scale-bar.tsx b/libs/react-components/src/community/components/map-components/scale-bar/scale-bar.tsx deleted file mode 100644 index bc96c1341..000000000 --- a/libs/react-components/src/community/components/map-components/scale-bar/scale-bar.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import styles from './scale-bar.module.scss'; - -interface ScaleBarProps { - /** - * The current zoom level of the map. - * Determines the scale displayed on the scale bar (e.g., 100 m, 1 km, etc.). - */ - zoomLevel: number; -} - -export const ScaleBar: React.FC<ScaleBarProps> = ({ zoomLevel }) => { - const [scaleInfo, setScaleInfo] = useState({ - km: 0, - widthPx: 100, - ratio: 0, - displayText: '0 km 1:0', - }); - - useEffect(() => { - const DEFAULT_ZOOM = 0; - const BASE_WIDTH_PX = 50; - - const zoomFactor = Math.pow(2, zoomLevel - DEFAULT_ZOOM); - const dynamicWidthPx = Math.round(BASE_WIDTH_PX * zoomFactor); - const metersPerPixel = 156543.03392 / Math.pow(2, zoomLevel); - const distanceInMeters = metersPerPixel * dynamicWidthPx; - const km = Math.round((distanceInMeters / 1000) * 10) / 10; - const roundedRatio = Math.round(1 / (metersPerPixel / 100)); - - let displayText; - if (km < 1) { - const meters = Math.round(distanceInMeters); - displayText = `${meters} m 1:${roundedRatio.toLocaleString()}`; - } else { - displayText = `${km.toFixed(1)} km 1:${roundedRatio.toLocaleString()}`; - } - - setScaleInfo({ - km, - widthPx: dynamicWidthPx, - ratio: roundedRatio, - displayText, - }); - }, [zoomLevel]); - - return ( - <div className={styles['tedi-scale-bar__wrapper']}> - <div className={styles['tedi-scale-bar__indicator']} style={{ width: `${scaleInfo.widthPx}px` }} /> - <div className={styles['tedi-scale-bar__data']}>{scaleInfo.displayText}</div> - </div> - ); -}; - -export default ScaleBar; diff --git a/libs/react-components/src/community/components/map-components/sheet/sheet.module.scss b/libs/react-components/src/community/components/map-components/sheet/sheet.module.scss deleted file mode 100644 index 22bb9b65c..000000000 --- a/libs/react-components/src/community/components/map-components/sheet/sheet.module.scss +++ /dev/null @@ -1,131 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-sheet-overlay { - position: fixed; - inset: 0; - z-index: 9999; - display: flex; - justify-content: center; - width: 100%; - height: 100%; - background-color: var(--alpha-40); - transition: opacity 0.3s ease; -} - -.tedi-sheet { - position: relative; - display: flex; - flex-direction: column; - width: 100%; - background-color: var(--dropdown-item-default-background); - transition: transform 0.3s ease, opacity 0.3s ease; - - &--bottom { - align-self: flex-end; - transform: translateY(100%); - - @include mixins.responsive-styles(border-top-left-radius, sheet-header-radius); - @include mixins.responsive-styles(border-top-right-radius, sheet-header-radius); - - &.is-visible { - transform: translateY(0); - } - } - - &--top { - align-self: flex-start; - transform: translateY(-100%); - - @include mixins.responsive-styles(border-bottom-left-radius, sheet-header-radius); - @include mixins.responsive-styles(border-bottom-right-radius, sheet-header-radius); - - &.is-visible { - transform: translateY(0); - } - } - - &__header { - display: flex; - flex-direction: column; - align-items: center; - background-color: var(--sheet-header-background-default); - - @include mixins.responsive-styles(padding-left, sheet-header-padding-x); - @include mixins.responsive-styles(padding-right, sheet-header-padding-x); - @include mixins.responsive-styles(padding-top, sheet-header-padding-y); - @include mixins.responsive-styles(padding-bottom, sheet-header-padding-y); - @include mixins.responsive-styles(border-top-left-radius, sheet-header-radius); - @include mixins.responsive-styles(border-top-right-radius, sheet-header-radius); - - &-content { - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - } - - &-actions { - display: flex; - gap: 0.5rem; - align-items: center; - } - - .tedi-sheet__handle { - width: 32px; - height: 4px; - margin: 0.25rem auto 0; - background-color: var(--drag-indicator-light); - - @include mixins.responsive-styles(border-radius, drag-indicator-radius); - } - - &--active { - background-color: var(--sheet-header-background-brand); - - &.tedi-sheet__handle { - background-color: var(--alpha-50); - } - } - - &:hover { - cursor: pointer; - } - } - - &__content { - flex-grow: 1; - overflow-y: auto; - } - - &__footer { - @include mixins.responsive-styles(padding-left, sheet-footer-padding-x); - @include mixins.responsive-styles(padding-right, sheet-footer-padding-x); - @include mixins.responsive-styles(padding-top, sheet-footer-padding-y); - @include mixins.responsive-styles(padding-bottom, sheet-footer-padding-y); - } -} - -.tedi-sheet__closer--active { - > * { - color: var(--button-main-neutral-inverted-text-default); - } -} - -.tedi-sheet--peek { - transform: translateY(calc(100% - 68px)); -} - -.tedi-sheet-overlay--peek { - background-color: var(--alpha-01); - - &.is-visible { - background-color: var(--alpha-40); - } -} - -.tedi-sheet__heading { - display: flex; - align-items: center; - - @include mixins.responsive-styles(gap, layout-grid-gutters-04); -} diff --git a/libs/react-components/src/community/components/map-components/sheet/sheet.stories.tsx b/libs/react-components/src/community/components/map-components/sheet/sheet.stories.tsx deleted file mode 100644 index 64da10e14..000000000 --- a/libs/react-components/src/community/components/map-components/sheet/sheet.stories.tsx +++ /dev/null @@ -1,187 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import { useState } from 'react'; - -import { Button, Card, Col, Link, List, Row, Search, Text, TextField, VerticalSpacing } from '../../../../tedi'; -import { Sheet } from './sheet'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Map-Design-System?node-id=251-42756&m=dev" target="_BLANK">Figma ↗</a><br/> - * NB! Use individual stories to test this component. This component is mobile-only, that means desktop variables don't apply to this component - */ - -const meta: Meta<typeof Sheet> = { - component: Sheet, - title: 'Community/Map components/Sheet', - argTypes: { - side: { - options: ['bottom', 'top'], - control: { type: 'radio' }, - }, - }, - parameters: { - viewport: { - defaultViewport: 'mobile1', - }, - }, -}; - -export default meta; -type Story = StoryObj<typeof Sheet>; - -const Template: StoryFn<typeof Sheet> = (args) => { - const [isOpen, setIsOpen] = useState(false); - - return ( - <> - <Button onClick={() => setIsOpen(true)}>Open Sheet</Button> - <Sheet {...args} open={isOpen} onClose={() => setIsOpen(false)}> - <Card borderless> - <Card.Content hasSeparator> - <VerticalSpacing> - <TextField label="Name" placeholder="Enter your name" id="" /> - <TextField label="Email" placeholder="Enter your email" id="" /> - <Link>Additional options</Link> - </VerticalSpacing> - </Card.Content> - </Card> - </Sheet> - </> - ); -}; - -export const Default: Story = { - render: Template, - args: { - title: 'Default Sheet', - side: 'bottom', - }, -}; - -export const WithFooter: Story = { - render: (args) => { - const [isOpen, setIsOpen] = useState(false); - - return ( - <div style={{ height: '500px', position: 'relative' }}> - <Button onClick={() => setIsOpen(true)}>Open Sheet with Footer</Button> - <Sheet - {...args} - open={isOpen} - onClose={() => setIsOpen(false)} - footer={ - <Card borderless> - <Card.Content> - <Row gutter={2} justifyContent="end"> - <Col width="auto"> - <Button visualType="neutral" onClick={() => setIsOpen(false)}> - Cancel - </Button> - </Col> - <Col width="auto"> - <Button onClick={() => setIsOpen(false)}>Save</Button> - </Col> - </Row> - </Card.Content> - </Card> - } - > - <Card borderless> - <Card.Content hasSeparator> - <VerticalSpacing> - <TextField label="First name" placeholder="Enter first name" id="" /> - <TextField label="Last name" placeholder="Enter last name" id="" /> - </VerticalSpacing> - </Card.Content> - </Card> - </Sheet> - </div> - ); - }, - args: { - title: 'Sheet with Footer', - side: 'bottom', - }, -}; - -export const WithActions: Story = { - render: (args) => { - const [isOpen, setIsOpen] = useState(false); - const [hasActiveActions, setHasActiveActions] = useState(true); - - return ( - <div style={{ height: '500px', position: 'relative' }}> - <Button onClick={() => setIsOpen(true)}>Open Sheet with Actions</Button> - <Sheet - {...args} - open={isOpen} - onClose={() => setIsOpen(false)} - actions={ - <Button - size="small" - visualType={hasActiveActions ? 'primary' : 'neutral'} - onClick={() => setHasActiveActions(!hasActiveActions)} - icon={hasActiveActions ? 'edit' : 'warning'} - > - Actions - </Button> - } - hasActiveActions={hasActiveActions} - > - <Card borderless> - <Card.Content hasSeparator> - <VerticalSpacing> - <Text>This sheet has additional actions in the header.</Text> - <Text>Current state: {hasActiveActions ? 'Active' : 'Inactive'}</Text> - </VerticalSpacing> - </Card.Content> - </Card> - </Sheet> - </div> - ); - }, - args: { - title: 'Sheet with Actions', - side: 'bottom', - }, -}; - -export const Peekable: Story = { - render: (args) => { - const [isOpen, setIsOpen] = useState(false); - - return ( - <div style={{ height: '500px', position: 'relative' }}> - <Sheet {...args} open={isOpen} onClose={() => setIsOpen(false)} isVisible={true} hasActiveActions> - <Card borderless> - <Card.Content> - <Search label="Search" placeholder="Search..." id="" hideLabel /> - <VerticalSpacing> - <Text>Recent searches:</Text> - <List style="styled"> - <List.Item>Search item 1</List.Item> - <List.Item>Search item 2</List.Item> - <List.Item>Search item 3</List.Item> - </List> - </VerticalSpacing> - </Card.Content> - </Card> - </Sheet> - <Card borderless> - <Card.Content> - <VerticalSpacing> - <Text>Scroll down to see the peekable sheet at the bottom.</Text> - <Button onClick={() => setIsOpen(true)}>Open Sheet</Button> - </VerticalSpacing> - </Card.Content> - </Card> - </div> - ); - }, - args: { - title: 'Peekable Sheet', - side: 'bottom', - }, - parameters: { - layout: 'fullscreen', - }, -}; diff --git a/libs/react-components/src/community/components/map-components/sheet/sheet.tsx b/libs/react-components/src/community/components/map-components/sheet/sheet.tsx deleted file mode 100644 index 65547ed6e..000000000 --- a/libs/react-components/src/community/components/map-components/sheet/sheet.tsx +++ /dev/null @@ -1,245 +0,0 @@ -import { autoUpdate, offset, shift, useFloating } from '@floating-ui/react-dom'; -import classNames from 'classnames'; -import { UnknownType } from 'libs/react-components/src/tedi/types/commonTypes'; -import { useEffect, useRef, useState } from 'react'; - -import { ClosingButton, Heading, Icon } from '../../../../tedi'; -import styles from './sheet.module.scss'; - -export interface SheetProps { - /** - * Controls whether the sheet is fully open or closed. - * When true, the sheet expands to its full height/width and becomes interactive. - * When false, the sheet either closes completely (if isVisible is false) or shows as a peekable element. - */ - open: boolean; - /** - * Callback invoked when the sheet requests to be closed. - * This occurs when: - * - User clicks the close button - * - User clicks the overlay behind the sheet (when open) - * - Programmatic close is triggered - */ - onClose: () => void; - /** - * Determines which edge of the screen the sheet attaches to. - * - * - 'bottom': Sheet slides up from bottom (default) - * - 'top': Sheet slides down from top - * - * Affects both opening animation and final positioning. - */ - side?: 'bottom' | 'top'; - /** - * Optional title displayed in the sheet header. - * Accepts string values that will be rendered as an H6 heading. - * When combined with isVisible, may include expand/collapse indicators. - */ - title?: string; - /** - * Optional actions displayed in the header, aligned to the end. - * Typically used for action buttons, menus, or other interactive elements. - * Renders to the left of the close button in the header area. - */ - actions?: React.ReactNode; - /** - * Main content of the sheet. - * Rendered between the header and footer areas. - * Should contain the primary interactive elements of the sheet. - */ - children: React.ReactNode; - /** - * Optional footer content. - * Rendered at the bottom of the sheet, useful for: - * - Submit buttons - * - Secondary actions - * - Supplemental information - * - Status indicators - */ - footer?: React.ReactNode; - /** - * Visual indicator for active/destructive actions in the header. - * When true: - * - Header background becomes prominent - * - Text changes to white for better contrast - * - Close button becomes more visible - * - * Useful for marking sheets with destructive or important actions. - */ - hasActiveActions?: boolean; - /** - * Controls the "peek" state of the sheet. - * When true and open=false: - * - Shows a minimized version of the sheet (header only by default) - * - Allows drag-to-open interaction - * - Displays expand/collapse affordances - * - * When false, the sheet either shows fully (open=true) or hides completely. - */ - isVisible?: boolean; -} - -export const Sheet = (props: SheetProps): JSX.Element | null => { - const { - open, - onClose, - side = 'bottom', - title = '', - actions, - children, - footer, - hasActiveActions = false, - isVisible = false, - } = props; - const sheetRef = useRef<HTMLDivElement | null>(null); - const [isSheetOpen, setIsSheetOpen] = useState(false); - const [shouldRender, setShouldRender] = useState(false); - const [isDragging, setIsDragging] = useState(false); - const [startY, setStartY] = useState(0); - const [startHeight, setStartHeight] = useState(0); - - const { x, strategy, update } = useFloating({ - placement: side, - middleware: [offset(0), shift()], - }); - - useEffect(() => { - if (!sheetRef.current) return undefined; - return autoUpdate(sheetRef.current, sheetRef.current, update) || undefined; - }, [open, update]); - - useEffect(() => { - if (open) { - setShouldRender(true); - const timer = setTimeout(() => setIsSheetOpen(true), 10); - return () => clearTimeout(timer); - } else { - setIsSheetOpen(false); - const timer = setTimeout(() => setShouldRender(false), 300); - return () => clearTimeout(timer); - } - }, [open]); - - const handleDragStart = (e: React.MouseEvent | React.TouchEvent) => { - if (!isVisible || open) return; - - setIsDragging(true); - const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY; - setStartY(clientY); - setStartHeight(sheetRef.current?.offsetHeight || 0); - document.body.style.userSelect = 'none'; - }; - - const handleDragMove = (e: MouseEvent) => { - if (!isDragging || !sheetRef.current || open) return; - - const deltaY = startY - e.clientY; - const newHeight = Math.min( - window.innerHeight * 0.9, - Math.max(100, startHeight + (side === 'bottom' ? deltaY : -deltaY)) - ); - - sheetRef.current.style.height = `${newHeight}px`; - - if (newHeight > window.innerHeight * 0.3) { - setIsSheetOpen(true); - sheetRef.current.style.height = ''; - setIsDragging(false); - } - }; - - const handleDragEnd = () => { - if (isDragging) { - setIsDragging(false); - document.body.style.userSelect = ''; - - if (!isSheetOpen && sheetRef.current) { - sheetRef.current.style.height = ''; - } - } - }; - - useEffect(() => { - if (isVisible) { - window.addEventListener('mousemove', handleDragMove); - window.addEventListener('mouseup', handleDragEnd); - window.addEventListener('touchmove', handleDragMove as UnknownType); - window.addEventListener('touchend', handleDragEnd); - } - - return () => { - window.removeEventListener('mousemove', handleDragMove); - window.removeEventListener('mouseup', handleDragEnd); - window.removeEventListener('touchmove', handleDragMove as UnknownType); - window.removeEventListener('touchend', handleDragEnd); - document.body.style.userSelect = ''; - }; - }, [isDragging, isVisible, open]); - - const handleHeaderClick = (_e: React.MouseEvent) => { - if (!open && isVisible && !isDragging) { - setIsSheetOpen(!isSheetOpen); - } - }; - - if (!shouldRender && !isVisible) return null; - - return ( - <div - className={classNames(styles['tedi-sheet-overlay'], { - [styles['is-visible']]: isSheetOpen, - [styles['tedi-sheet-overlay--peek']]: isVisible && !open, - })} - onClick={open ? onClose : undefined} - > - <div - ref={sheetRef} - className={classNames(styles['tedi-sheet'], styles[`tedi-sheet--${side}`], { - [styles['is-visible']]: isSheetOpen, - [styles['tedi-sheet--peek']]: isVisible && !open, - [styles['is-dragging']]: isDragging, - })} - onClick={(e) => e.stopPropagation()} - style={{ - position: strategy, - top: side === 'top' ? 0 : undefined, - bottom: side === 'bottom' ? 0 : undefined, - left: x ?? 0, - }} - > - {(title || actions) && ( - <div - className={classNames(styles['tedi-sheet__header'], { - [styles['tedi-sheet__header--active']]: hasActiveActions, - [styles['tedi-sheet__header--peekable']]: isVisible && !open, - })} - onMouseDown={handleDragStart} - onTouchStart={handleDragStart} - onClick={handleHeaderClick} - > - {isVisible && !open && <div className={styles['tedi-sheet__handle']} />} - <div className={classNames(styles['tedi-sheet__header-content'])}> - <Heading - element="h6" - color={hasActiveActions ? 'white' : 'primary'} - className={styles['tedi-sheet__heading']} - > - {title} {isVisible && <Icon color="white" name={isSheetOpen ? 'expand_less' : 'expand_more'} />} - </Heading> - <div className={styles['tedi-sheet__header-actions']}> - {actions} - <ClosingButton - size="large" - onClick={onClose} - className={classNames({ [styles['tedi-sheet__closer--active']]: hasActiveActions })} - /> - </div> - </div> - </div> - )} - <div className={styles['tedi-sheet__content']}>{children}</div> - {footer && <div className={styles['tedi-sheet__footer']}>{footer}</div>} - </div> - </div> - ); -}; diff --git a/libs/react-components/src/community/components/map-components/timeline/timeline.module.scss b/libs/react-components/src/community/components/map-components/timeline/timeline.module.scss deleted file mode 100644 index a54732e7b..000000000 --- a/libs/react-components/src/community/components/map-components/timeline/timeline.module.scss +++ /dev/null @@ -1,222 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-timeline { - position: relative; - display: flex; - width: 100%; - height: 34px; - color: var(--general-text-secondary); - - &__clock { - display: flex; - - @include mixins.responsive-styles(gap, layout-grid-gutters-08); - } - - &__clock-wrapper { - display: flex; - flex-shrink: 0; - width: auto; - padding: 5px 12px; - background-color: var(--general-surface-secondary); - - @include mixins.responsive-styles(gap, layout-grid-gutters-12); - } - - &__date { - @include mixins.responsive-styles(font-weight, body-bold-weight); - } - - &__main-track { - position: relative; - display: inline-block; - flex-grow: 2; - width: 100%; - background: var(--general-surface-primary); - border: none; - } - - &__track-bar { - position: relative; - width: 100%; - height: 100%; - overflow: hidden; - } - - &__tick--tiny { - position: absolute; - bottom: 0; - left: 0; - width: 1px; - height: 8px; - background-color: var(--timeline-line-small); - } - - &__tick--large { - position: absolute; - bottom: 0; - left: 0; - width: 1px; - height: 12px; - background-color: var(--timeline-line-large); - } - - &__tick-label { - position: absolute; - top: 0; - z-index: 10; - font-size: 10px; - color: var(--general-text-secondary); - white-space: nowrap; - } - - &__tick-group { - position: absolute; - bottom: 0; - display: flex; - flex-direction: column-reverse; - align-items: center; - height: 100%; - } - - &__track { - position: relative; - bottom: 0; - left: 0; - width: 100%; - overflow: auto; - } - - &__tracks { - position: absolute; - top: 0; - left: 0; - width: 100%; - } - - &__needle { - position: absolute; - top: -25px; - bottom: -2px; - z-index: 10; - display: flex; - flex-direction: column; - align-items: center; - pointer-events: none; - } - - &__needle-head { - z-index: 10; - display: flex; - flex-shrink: 0; - gap: 10px; - align-items: center; - justify-content: center; - width: 24px; - height: 24px; - margin-block-start: 2px; - pointer-events: auto; - background: var(--timeline-indicator-background-default); - border: 1px solid var(--timeline-indicator-border); - border-radius: 8.237px; - } - - &__needle-line { - position: absolute; - flex-grow: 1; - width: 2px; - height: 100%; - background-color: var(--timeline-indicator-border); - } -} - -/* ---------- VERTICAL MODE OVERRIDES ---------- */ - -.tedi-timeline--vertical { - flex-direction: column; - width: 34px; - height: 100%; -} - -.tedi-timeline--vertical .tedi-timeline__clock { - flex-direction: column; -} - -.tedi-timeline--vertical .tedi-timeline__clock-wrapper { - justify-content: center; - width: 155px; - - @include mixins.responsive-styles(border-bottom-right-radius, card-radius-rounded); - @include mixins.responsive-styles(border-top-right-radius, card-radius-rounded); -} - -.tedi-timeline--vertical .tedi-timeline__main-track { - width: 16px; - height: 100%; -} - -.tedi-timeline--vertical .tedi-timeline__track-bar { - overflow: visible; -} - -.tedi-timeline--vertical .tedi-timeline__tick--tiny { - top: 0; - left: 0; - width: 8px; - height: 1px; -} - -.tedi-timeline--vertical .tedi-timeline__tick--large { - top: 0; - left: 0; - width: 12px; - height: 1px; -} - -.tedi-timeline--vertical .tedi-timeline__tick-label { - top: -10px; - bottom: auto; - left: 100%; - width: auto; - height: auto; - margin-left: 0; - background-color: var(--general-surface-primary); - - @include mixins.responsive-styles(border-radius, card-radius-rounded); - @include mixins.responsive-styles(padding, card-padding-xxs); -} - -.tedi-timeline--vertical .tedi-timeline__tick-group { - bottom: auto; - left: 0; - flex-direction: row; - width: 50%; - height: auto; -} - -.tedi-timeline--vertical .tedi-timeline__track { - position: absolute; - right: 0; - width: 1px; - height: 100%; - border-top: none; -} - -.tedi-timeline--vertical .tedi-timeline__tracks { - width: 1px; - height: 100%; -} - -.tedi-timeline--vertical .tedi-timeline__needle { - inset: 0 -40px auto -4px; - flex-direction: row-reverse; - align-self: center; - width: auto; - height: auto; -} - -.tedi-timeline--vertical .tedi-timeline__needle-line { - width: 100%; - height: 2px; - margin-right: -2px; -} diff --git a/libs/react-components/src/community/components/map-components/timeline/timeline.stories.tsx b/libs/react-components/src/community/components/map-components/timeline/timeline.stories.tsx deleted file mode 100644 index b2b59e54f..000000000 --- a/libs/react-components/src/community/components/map-components/timeline/timeline.stories.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import { Link, VerticalSpacing } from '../../../../tedi'; -import Timeline from './timeline'; - -/** - * <a href="https://www.figma.com/design/3DIVbgDcC0R4qgqWhZMfvw/Veera-Map-Design-System?node-id=135-19015&m=dev" target="_BLANK">Figma ↗</a><br/> - */ - -const meta: Meta<typeof Timeline> = { - component: Timeline, - title: 'Community/Map components/Timeline', -}; - -export default meta; -type Story = StoryObj<typeof Timeline>; - -export const Default: Story = { - args: { - initialDate: new Date('2025-05-06T07:51:00'), - minDate: new Date('2025-05-06T07:51:00'), - maxDate: new Date('2025-12-30T01:39:00'), - interval: 'week', - popover: { - children: ( - <VerticalSpacing> - <Link>Autoriõiguste tekst 1</Link> - <Link>Autoriõiguste tekst 2</Link> - <Link>Autoriõiguste tekst 3</Link> - </VerticalSpacing> - ), - }, - }, -}; - -export const Vertical: Story = { - args: { - initialDate: new Date('2025-05-06T07:51:00'), - minDate: new Date('2025-05-06T07:51:00'), - maxDate: new Date('2025-12-30T01:39:00'), - interval: 'week', - vertical: true, - popover: { - children: ( - <VerticalSpacing> - <Link>Autoriõiguste tekst 1</Link> - <Link>Autoriõiguste tekst 2</Link> - <Link>Autoriõiguste tekst 3</Link> - </VerticalSpacing> - ), - }, - }, - decorators: [ - (Story) => ( - <div style={{ height: '800px' }}> - <Story /> - </div> - ), - ], -}; diff --git a/libs/react-components/src/community/components/map-components/timeline/timeline.tsx b/libs/react-components/src/community/components/map-components/timeline/timeline.tsx deleted file mode 100644 index f45e6da26..000000000 --- a/libs/react-components/src/community/components/map-components/timeline/timeline.tsx +++ /dev/null @@ -1,324 +0,0 @@ -import classNames from 'classnames'; -import React, { useEffect, useRef, useState } from 'react'; - -import { Icon, Popover, PopoverContentProps, Text } from '../../../../tedi'; -import styles from './timeline.module.scss'; - -type IntervalType = 'day' | 'week' | 'year'; - -interface TimelineProps { - /** - * The initial date where the timeline needle should be positioned. - * This determines the starting point of the interactive timeline cursor. - */ - initialDate: Date; - /** - * The minimum date (start) of the timeline range. - * This defines the leftmost (or topmost in vertical mode) boundary of the timeline. - * The timeline cannot scroll or select dates before this date. - */ - minDate: Date; - /** - * The maximum date (end) of the timeline range. - * This defines the rightmost (or bottommost in vertical mode) boundary of the timeline. - * The timeline cannot scroll or select dates after this date. - */ - maxDate: Date; - /** - * The time interval between ticks on the timeline. - * - * Options: - * - "day": Shows daily intervals (24 hours) - * - "week": Shows weekly intervals (7 days) - * - "year": Shows yearly intervals (365 days) - * - * This affects both the density of minor ticks and the frequency of major labeled ticks. - */ - interval: IntervalType; - /** - * Optional configuration for rendering additional content in a popover. - * When provided, the clock component becomes clickable and shows this popover content. - * - * Structure: - * - `children`: React node to render inside the popover - * - `title`: Optional popover header text - * - Other Popover component props as needed - */ - popover?: PopoverContentProps; - /** - * Controls the orientation of the timeline. - * - * - When `false` (default): Renders horizontally with: - * - Ticks on bottom - * - Time flowing left-to-right - * - * - When `true`: Renders vertically with: - * - Ticks on left side - * - Time flowing top-to-bottom - * - Needle on right side - */ - vertical?: boolean; -} - -const getIntervalMs = (interval: IntervalType) => { - switch (interval) { - case 'day': - return 24 * 60 * 60 * 1000; - case 'week': - return 7 * 24 * 60 * 60 * 1000; - case 'year': - return 365 * 24 * 60 * 60 * 1000; - default: - return 60 * 1000; - } -}; - -export const Timeline: React.FC<TimelineProps> = ({ - initialDate, - minDate, - maxDate, - interval = 'day', - popover, - vertical = false, -}) => { - const barRef = useRef<HTMLDivElement>(null); - const [barSize, setBarSize] = useState({ width: 0, height: 0 }); - const [needlePosition, setNeedlePosition] = useState(0); - const [isDragging, setIsDragging] = useState(false); - const [open, setOpen] = useState(false); - - const duration = maxDate.getTime() - minDate.getTime(); - const pixelPerMs = vertical ? barSize.height / duration : barSize.width / duration; - - const getPositionFromDate = (date: Date) => { - return (date.getTime() - minDate.getTime()) * pixelPerMs; - }; - - useEffect(() => { - if (barSize.width > 0 || barSize.height > 0) { - const position = getPositionFromDate(initialDate); - setNeedlePosition(position); - } - }, [barSize, initialDate]); - - useEffect(() => { - const observer = new ResizeObserver((entries) => { - const rect = entries[0].contentRect; - setBarSize({ width: rect.width, height: rect.height }); - }); - - if (barRef.current) { - observer.observe(barRef.current); - } - - return () => observer.disconnect(); - }, []); - - const generateTicks = () => { - const intervalMs = getIntervalMs(interval); - const duration = maxDate.getTime() - minDate.getTime(); - const pixelPerMs = vertical ? barSize.height / duration : barSize.width / duration; - - const tinyTicks: number[] = []; - const mainTicksWithLabels: { position: number; label: string }[] = []; - - let current = new Date(minDate.getTime()); - let tickIndex = 0; - - while (current <= maxDate) { - const offset = (current.getTime() - minDate.getTime()) * pixelPerMs; - - tinyTicks.push(offset); - - if (tickIndex >= 1 && tickIndex % 10 === 0) { - mainTicksWithLabels.push({ - position: offset, - label: current.toLocaleString('et-EE', { - hour: '2-digit', - minute: '2-digit', - day: '2-digit', - month: 'short', - year: 'numeric', - }), - }); - } - - current = new Date(current.getTime() + intervalMs); - tickIndex++; - } - - if (mainTicksWithLabels.length === 0 && tinyTicks.length > 0) { - const lastTick = tinyTicks[tinyTicks.length - 1]; - mainTicksWithLabels.push({ - position: lastTick, - label: maxDate.toLocaleString('et-EE', { - hour: '2-digit', - minute: '2-digit', - day: '2-digit', - month: 'short', - year: 'numeric', - }), - }); - } - - return { tinyTicks, mainTicksWithLabels }; - }; - - const handleClick = (e: React.MouseEvent<HTMLDivElement>) => { - if (!barRef.current) return; - const rect = barRef.current.getBoundingClientRect(); - - const position = vertical ? rect.height - (e.clientY - rect.top) : e.clientX - rect.left; - - const maxPosition = vertical ? barSize.height : barSize.width; - const clampedPosition = Math.max(0, Math.min(position, maxPosition)); - setNeedlePosition(clampedPosition); - }; - - const handleDragStart = (e: React.MouseEvent<HTMLDivElement>) => { - e.preventDefault(); - e.stopPropagation(); - setIsDragging(true); - - document.body.classList.add(styles['no-select']); - }; - - const handleDragMove = (e: MouseEvent) => { - if (!isDragging || !barRef.current) return; - - const rect = barRef.current.getBoundingClientRect(); - let position: number; - - if (vertical) { - position = e.clientY - rect.top - 12; - } else { - position = e.clientX - rect.left; - } - - const maxPosition = vertical ? barSize.height : barSize.width; - const clampedPosition = Math.max(0, Math.min(position, maxPosition)); - setNeedlePosition(clampedPosition); - }; - - const handleDragEnd = () => { - setIsDragging(false); - document.body.classList.remove(styles['no-select']); - }; - - useEffect(() => { - if (isDragging) { - window.addEventListener('mousemove', handleDragMove); - window.addEventListener('mouseup', handleDragEnd); - } else { - window.removeEventListener('mousemove', handleDragMove); - window.removeEventListener('mouseup', handleDragEnd); - } - - return () => { - window.removeEventListener('mousemove', handleDragMove); - window.removeEventListener('mouseup', handleDragEnd); - }; - }, [isDragging]); - - const { tinyTicks, mainTicksWithLabels } = generateTicks(); - - return ( - <div className={classNames(styles['tedi-timeline'], vertical && styles['tedi-timeline--vertical'])}> - <Popover open={open} onToggle={() => setOpen(!open)}> - <Popover.Trigger> - <div className={classNames(styles['tedi-timeline__clock-wrapper'])}> - <div className={styles['tedi-timeline__clock']}> - <time className={styles['tedi-timeline__time']}> - {initialDate.toLocaleTimeString('et-EE', { hour: '2-digit', minute: '2-digit' })} - </time> - <time className={styles['tedi-timeline__date']}> - {initialDate.toLocaleDateString('et-EE', { day: '2-digit', month: 'long', year: 'numeric' })} - </time> - </div> - <Icon name="expand_more" /> - </div> - </Popover.Trigger> - <Popover.Content {...popover}>{popover?.children}</Popover.Content> - </Popover> - - <div className={classNames(styles['tedi-timeline__main-track'], vertical && styles['tedi-timeline--vertical'])}> - <div - className={classNames(styles['tedi-timeline__track-bar'], vertical && styles['tedi-timeline--vertical'])} - ref={barRef} - onClick={handleClick} - > - {tinyTicks.map((position, idx) => ( - <span - key={`tiny-${idx}`} - className={classNames(styles['tedi-timeline__tick--tiny'], vertical && styles['tedi-timeline--vertical'])} - style={vertical ? { top: `${position}px` } : { left: `${position}px` }} - /> - ))} - - {mainTicksWithLabels.map((tick, idx) => ( - <div - key={`main-label-${idx}`} - className={classNames(styles['tedi-timeline__tick-group'], vertical && styles['tedi-timeline--vertical'])} - style={vertical ? { top: `${tick.position}px` } : { left: `${tick.position}px` }} - > - <span - className={classNames( - styles['tedi-timeline__tick--large'], - vertical && styles['tedi-timeline--vertical'] - )} - /> - <div - className={classNames( - styles['tedi-timeline__tick-label'], - vertical && styles['tedi-timeline--vertical'] - )} - > - <Text modifiers={['small']} color="secondary"> - {tick.label} - </Text> - </div> - </div> - ))} - </div> - - <div className={classNames(styles['tedi-timeline__track'], vertical && styles['tedi-timeline--vertical'])}> - <canvas - className={classNames(styles['tedi-timeline__tracks'], vertical && styles['tedi-timeline--vertical'])} - width={vertical ? 1 : barSize.width} - height={vertical ? barSize.height : 1} - ></canvas> - </div> - <div - className={classNames(styles['tedi-timeline__needle'], vertical && styles['tedi-timeline--vertical'])} - style={ - vertical - ? { - top: `${needlePosition}px`, - transform: 'translateY(0)', - } - : { - left: `${needlePosition}px`, - transform: 'translateX(-50%)', - } - } - > - <div - className={styles['tedi-timeline__needle-head']} - onMouseDown={handleDragStart} - style={{ - cursor: isDragging ? 'grabbing' : 'grab', - touchAction: 'none', - }} - > - <Icon name="code" color="brand" size={12} /> - </div> - <div - className={classNames(styles['tedi-timeline__needle-line'], vertical && styles['tedi-timeline--vertical'])} - ></div> - </div> - </div> - </div> - ); -}; - -export default Timeline; diff --git a/libs/react-components/src/community/components/modal/index.ts b/libs/react-components/src/community/components/modal/index.ts deleted file mode 100644 index f3dab098b..000000000 --- a/libs/react-components/src/community/components/modal/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './modal'; -export * from './modal-provider'; -export * from './modal-trigger'; -export * from './modal-closer'; diff --git a/libs/react-components/src/community/components/modal/modal-closer.tsx b/libs/react-components/src/community/components/modal/modal-closer.tsx deleted file mode 100644 index 21d3b2664..000000000 --- a/libs/react-components/src/community/components/modal/modal-closer.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; - -import { ModalContext } from './modal-provider'; - -export interface ModalCloserProps { - /** - * The element that closes the modal. - */ - children: React.ReactElement; -} - -export const ModalCloser = (props: ModalCloserProps): JSX.Element => { - const { children } = props; - const { closeModal } = React.useContext(ModalContext); - - return React.cloneElement(children, { - onClick: () => { - children.props.onClick?.(); - closeModal(); - }, - }); -}; - -export default ModalCloser; diff --git a/libs/react-components/src/community/components/modal/modal-provider.tsx b/libs/react-components/src/community/components/modal/modal-provider.tsx deleted file mode 100644 index fc250b446..000000000 --- a/libs/react-components/src/community/components/modal/modal-provider.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import { - FloatingContext, - ReferenceType, - useClick, - useDismiss, - useFloating, - useInteractions, - useRole, -} from '@floating-ui/react'; -import React from 'react'; - -export interface ModalProviderProps { - /** - * ModalTrigger and Modal components - */ - children: React.ReactNode | React.ReactNode[]; - /** - * Should modal be initially shown. Won't work with open and onToggle. - * @default false - */ - defaultOpen?: boolean; - /** - * Should the modal be open or closed. - * Use to handle state outside of component, should use with onToggle prop. - */ - open?: boolean; - /** - * Callback when modal is toggled. - * Use to handle state outside of component, should use with open prop. - */ - onToggle?: (open: boolean) => void; - /** - * Should modal be dismissible by pressing escape or outside of the modal. - * @default true - */ - isDismissable?: boolean; - /** - * Closes the modal with escape key - * Skipped if `isDismissable="false"` - * @default true - */ - escapeKey?: boolean; - /** - * Closes the modal with a click outside the modal or trigger - * Skipped if `isDismissable="false"` - * @default true - */ - outsidePress?: boolean; -} - -export interface IModalContext { - isOpen: boolean; - reference: (node: ReferenceType | null) => void; - floating: (node: HTMLElement | null) => void; - getReferenceProps: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown>; - getFloatingProps: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown>; - closeModal: () => void; - context: FloatingContext<ReferenceType>; - isDismissable: boolean; - escapeKey: boolean; - outsidePress: boolean; -} - -export const ModalContext = React.createContext<IModalContext>({ - isOpen: false, - reference: () => null, - floating: () => null, - getReferenceProps: () => ({}), - getFloatingProps: () => ({}), - closeModal: () => null, - context: {} as FloatingContext<ReferenceType>, - isDismissable: true, - escapeKey: true, - outsidePress: true, -}); - -export const ModalProvider = (props: ModalProviderProps): JSX.Element => { - const { - children, - defaultOpen = false, - onToggle, - isDismissable = true, - escapeKey = true, - outsidePress = true, - } = props; - const [innerOpen, setInnerOpen] = React.useState(defaultOpen); - - const isOpen = onToggle && typeof props.open !== 'undefined' ? props.open : innerOpen; - - const { refs, context } = useFloating({ - open: isOpen, - onOpenChange: (open: boolean) => (open ? openModal() : closeModal()), - }); - - const { getReferenceProps, getFloatingProps } = useInteractions([ - useClick(context), - useRole(context), - useDismiss(context, { - enabled: isDismissable, - escapeKey, - outsidePress, - }), - ]); - - const closeModal = () => { - if (typeof props.open === 'undefined') { - setInnerOpen(false); - } - - onToggle?.(false); - }; - - const openModal = (): void => { - if (typeof props.open === 'undefined') { - setInnerOpen(true); - } - - onToggle?.(true); - }; - - return ( - <ModalContext.Provider - value={{ - isOpen, - reference: refs.setReference, - floating: refs.setFloating, - getReferenceProps, - getFloatingProps, - closeModal, - context, - isDismissable, - escapeKey, - outsidePress, - }} - > - {children} - </ModalContext.Provider> - ); -}; - -export default ModalProvider; diff --git a/libs/react-components/src/community/components/modal/modal-trigger.tsx b/libs/react-components/src/community/components/modal/modal-trigger.tsx deleted file mode 100644 index 7b792423a..000000000 --- a/libs/react-components/src/community/components/modal/modal-trigger.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; - -import { ModalContext } from './modal-provider'; - -export interface ModalTriggerProps { - /** - * The element that opens the modal. - */ - children: JSX.Element; -} - -export const ModalTrigger = (props: ModalTriggerProps): JSX.Element => { - const { children } = props; - const { getReferenceProps, reference } = React.useContext(ModalContext); - - return React.cloneElement(children, getReferenceProps({ ref: reference, ...children.props })); -}; - -export default ModalTrigger; diff --git a/libs/react-components/src/community/components/modal/modal.module.scss b/libs/react-components/src/community/components/modal/modal.module.scss deleted file mode 100644 index 4859c8ab5..000000000 --- a/libs/react-components/src/community/components/modal/modal.module.scss +++ /dev/null @@ -1,73 +0,0 @@ -@use 'sass:math'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -$modal-max-width: 1230px; - -.modal, -.modal--center { - z-index: var(--z-index-modal); - display: grid; - place-items: center; - background: rgb(0 0 0 / 25%); -} - -.modal--no-overlay { - pointer-events: none; - background: none; - - & .modal__inner { - pointer-events: auto; - } -} - -.modal--right { - place-items: flex-end; -} - -.modal--bottom { - place-items: flex-end center; -} - -.modal__inner { - width: calc(100vw - 2rem); - max-width: $modal-max-width; - margin-top: 1rem; - margin-bottom: 1rem; - - .modal--right & { - width: 100%; - height: 100%; - margin-top: 0; - margin-bottom: 0; - } - - @include breakpoints.media-breakpoint-up(lg) { - .modal--10 & { - width: math.div(10, 12) * 100%; - max-width: $modal-max-width * math.div(10, 12); - } - - .modal--8 & { - width: math.div(8, 12) * 100%; - max-width: $modal-max-width * math.div(8, 12); - } - - .modal--6 & { - width: math.div(6, 12) * 100%; - max-width: $modal-max-width * math.div(6, 12); - } - } -} - -.modal__card { - .modal--right & { - height: 100%; - } -} - -.close-button { - z-index: 1; - float: right; - margin-bottom: 0.5rem; - margin-left: 0.5rem; -} diff --git a/libs/react-components/src/community/components/modal/modal.stories.tsx b/libs/react-components/src/community/components/modal/modal.stories.tsx deleted file mode 100644 index 301100e1c..000000000 --- a/libs/react-components/src/community/components/modal/modal.stories.tsx +++ /dev/null @@ -1,296 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import React from 'react'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import Button from '../button/button'; -import { CardContent, CardHeader } from '../card'; -import Heading from '../typography/heading/heading'; -import Modal, { ModalProps } from './modal'; -import ModalCloser from './modal-closer'; -import ModalProvider, { ModalProviderProps } from './modal-provider'; -import ModalTrigger from './modal-trigger'; - -/** - * Modal consist of 4 components: <b>ModalProvider</b>, <b>Modal</b>, <b>ModalTrigger</b> and <b>ModalCloser</b>.<br /> - * **ModalProvider** - Provider context for other components. Handles modal open state.<br /> - * **Modal** - Visual UI component. Should always contain CardContent or CardHeader as children.<br /> - * **ModalTrigger** - Wrapper component around buttons/links to trigger modalOpen after click.<br /> - * **ModalClose** - Wrapper component around buttons/links to trigger modalClose after click. - */ -const meta: Meta<typeof ModalProvider> = { - component: ModalProvider, - subcomponents: { Modal, ModalTrigger, ModalCloser } as never, - title: 'Community/Modal', -}; - -export default meta; - -interface TemplateProps extends ModalProps { - heading?: string; - content?: string; - modalProvider?: Partial<ModalProviderProps>; - renderHeader?: boolean; - renderModalCloser?: boolean; -} - -type Story = StoryObj<TemplateProps>; - -const Template: StoryFn<TemplateProps> = (args): JSX.Element => { - const { - heading = 'Heading', - content = 'Default content', - modalProvider, - renderHeader = true, - renderModalCloser = true, - ...modal - } = args; - return ( - <ModalProvider {...modalProvider}> - <ModalTrigger> - <Button>Open modal</Button> - </ModalTrigger> - <Modal {...modal} aria-labelledby="label"> - {renderHeader && ( - <CardHeader background="white"> - <Heading id="default-label">{heading}</Heading> - </CardHeader> - )} - <CardContent> - {!renderHeader && <Heading id="default-label">{heading}</Heading>} - <p>{content}</p> - {renderModalCloser && ( - <ModalCloser> - <Button onClick={() => console.log('Im called')}>Close</Button> - </ModalCloser> - )} - </CardContent> - </Modal> - </ModalProvider> - ); -}; - -export const Default: Story = { - render: Template, - - args: { - heading: 'Modal width 6', - }, -}; - -export const Width12: Story = { - render: Template, - - args: { - size: 12, - heading: 'Modal width 12', - }, -}; - -export const Width10: Story = { - render: Template, - - args: { - size: 10, - heading: 'Modal width 10', - }, -}; - -export const Width8: Story = { - render: Template, - - args: { - size: 8, - heading: 'Modal width 8', - }, -}; - -export const OpenByDefault: Story = { - render: Template, - - args: { - heading: 'Opened by default', - modalProvider: { - defaultOpen: true, - }, - }, -}; - -export const WithoutHeader: Story = { - render: Template, - - args: { - heading: 'Error type modal', - content: 'Use to display error notifications', - renderHeader: false, - }, -}; - -export const ErrorTopModal: Story = { - render: Template, - - args: { - heading: 'Error type modal', - content: 'Use to display error notifications', - cardProps: { border: 'top-important-main' }, - renderHeader: false, - renderModalCloser: false, - }, -}; - -export const SuccessTopModal: Story = { - render: Template, - - args: { - heading: 'Success type modal', - content: 'Use to display success notifications', - cardProps: { border: 'top-positive-main' }, - renderHeader: false, - renderModalCloser: false, - }, -}; - -export const WarningTopModal: Story = { - render: Template, - - args: { - heading: 'Warning type modal', - content: 'Use to display Warning notifications', - cardProps: { border: 'top-warning-main' }, - renderHeader: false, - renderModalCloser: false, - }, -}; - -export const Position: StoryFn<ModalProps> = () => { - const ipsum = ( - <p> - Lorem ipsum dolor sit amet, consectetur adipisicing elit. Asperiores culpa dolore ipsam mollitia numquam sapiente! - At consequuntur cupiditate est excepturi facere facilis fugit maiores, nihil odio pariatur quam vel vero. Lorem - ipsum dolor sit amet, consectetur adipisicing elit. Asperiores culpa dolore ipsam mollitia numquam sapiente! At - consequuntur cupiditate est excepturi facere facilis fugit maiores, nihil odio pariatur quam vel vero. - </p> - ); - - const content = ( - <VerticalSpacing> - {ipsum} - {ipsum} - {ipsum} - <ModalCloser> - <Button>Close</Button> - </ModalCloser> - </VerticalSpacing> - ); - - const modal = (position?: ModalProps['position']) => ( - <ModalProvider> - <ModalTrigger> - <Button className="text-capitalize">{position}</Button> - </ModalTrigger> - <Modal aria-labelledby="open-center" position={position}> - <CardHeader background="white"> - <Heading>Modal with longer content to test out scrolling</Heading> - </CardHeader> - <CardContent>{content}</CardContent> - </Modal> - </ModalProvider> - ); - - return ( - <Row> - <Col width="auto">{modal('center')}</Col> - <Col width="auto">{modal('right')}</Col> - <Col width="auto">{modal('bottom')}</Col> - </Row> - ); -}; - -export const ControlledOutside = () => { - const [isOpen, setIsOpen] = React.useState(false); - - return ( - <Row> - <Col width="auto"> - <ModalProvider open={isOpen} onToggle={setIsOpen}> - <ModalTrigger> - <Button>Open modal from trigger</Button> - </ModalTrigger> - <Modal aria-labelledby="controlled-outside"> - <CardContent> - <p id="controlled-outside">I can be controlled externally!</p> - </CardContent> - <Button onClick={() => setIsOpen(false)}>Close modal without ModalCloser</Button> - </Modal> - </ModalProvider> - </Col> - <Col width="auto"> - <Button onClick={() => setIsOpen(true)}>Open modal from outside modal</Button> - </Col> - </Row> - ); -}; - -export const TrapFocusFalse: Story = { - render: Template, - - args: { - heading: 'Modal does not trap focus', - content: - 'This modal does not trap focus. Pressing tab will move focus outside of the modal resulting in the modal closing.', - trapFocus: false, - }, -}; - -export const NotDismissibleModal: Story = { - render: Template, - - args: { - heading: 'Modal is not dismissible', - content: - 'This modal can not be dismissed by pressing escape or clicking outside of it and does not have a built in close button. You can close it by pressing the custom close button.', - modalProvider: { - isDismissable: false, - }, - trapFocus: false, - overlay: 'none', - hideCloseButton: true, - }, -}; - -export const ScrollNotLocked: Story = { - render: Template, - - args: { - heading: 'Scrolling is not locked.', - content: 'You can scroll the main page while this modal is open.', - lockScroll: false, - }, -}; - -export const NoOverlay: Story = { - render: Template, - - args: { - heading: 'No overlay', - content: 'This modal does not display an overlay on top of the page.', - overlay: 'none', - }, -}; - -export const CookieConsentModal: Story = { - render: Template, - - args: { - heading: 'Cookie modal example', - content: - 'This modal does not block the user from interacting with the rest of the page. This modal will only close when the user explicitly closes it via the close button or any other dedicated button. This modal combines all of the following props: trapFocus: false, isDismissable: false, scrollLocked: false, overlay: "none"', - trapFocus: false, - lockScroll: false, - overlay: 'none', - modalProvider: { - isDismissable: false, - }, - position: 'bottom', - }, -}; diff --git a/libs/react-components/src/community/components/modal/modal.tsx b/libs/react-components/src/community/components/modal/modal.tsx deleted file mode 100644 index 2948f7dc1..000000000 --- a/libs/react-components/src/community/components/modal/modal.tsx +++ /dev/null @@ -1,161 +0,0 @@ -import { FloatingFocusManager, FloatingOverlay, FloatingPortal } from '@floating-ui/react'; -import cn from 'classnames'; -import React from 'react'; - -import { ClosingButton } from '../../../tedi/components/buttons/closing-button/closing-button'; -import { useLabels } from '../../../tedi/providers/label-provider'; -import { IntentionalAny } from '../../types'; -import Card, { CardProps } from '../card/card'; -import styles from './modal.module.scss'; -import ModalCloser from './modal-closer'; -import { ModalContext } from './modal-provider'; - -export interface ModalProps { - /** - * Content of the modal - */ - children: React.ReactNode; - /** - * Size of the modal. - * @default 6 - */ - size?: 12 | 10 | 8 | 6; - /** - * Aria-labelledby value. - */ - 'aria-labelledby': string; - /** - * Aria-describedby value. - */ - 'aria-describedby'?: string; - /** - * card props to pass down to card components - */ - cardProps?: CardProps; - /** - * Hide close button. Make sure there is another button that closes the modal. - */ - hideCloseButton?: boolean; - /** - * If your focus management is modal and there is no explicit close button available, - * you can use this prop to render a visually-hidden dismiss button at the start and end of the floating element. - * This allows touch-based screen readers to escape the floating element due to lack of an esc key. - * @default false - */ - visuallyHiddenDismiss?: boolean; - /** - * Modal position on the screen - * @default center - */ - position?: 'center' | 'right' | 'bottom'; - /** - * Should page be scrollable while modal is open. - * @default false - */ - lockScroll?: boolean; - /** - * Should trap focus inside modal. - * @default true - */ - trapFocus?: boolean; - /** - * Should focus return to the trigger when closing the modal - * @default true - */ - returnFocus?: boolean; - /** - * Set style of overlay. - */ - overlay?: 'none'; -} - -export const Modal = (props: ModalProps): JSX.Element | null => { - const { - children, - size = 6, - cardProps = {}, - hideCloseButton, - position, - lockScroll = true, - trapFocus = true, - returnFocus = true, - overlay = undefined, - visuallyHiddenDismiss = false, - } = props; - const { getLabel } = useLabels(); - const labelId = props['aria-labelledby']; - const descriptionId = props['aria-describedby']; - const { isOpen, floating, getFloatingProps, context, isDismissable } = React.useContext(ModalContext); - - // add close button to the first CardHeader or CardContent - const parsedChildren = React.useMemo(() => { - let buttonRendered = false; - - const getComponentDisplayName = (element: React.ReactElement<unknown, IntentionalAny>) => { - return element.type.displayName; - }; - - return !hideCloseButton - ? React.Children.map(children, (child, index) => { - if ( - !buttonRendered && - React.isValidElement(child) && - (getComponentDisplayName(child) === 'CardHeader' || getComponentDisplayName(child) === 'CardContent') - ) { - buttonRendered = true; - - return React.cloneElement(child, { - ...child.props, - children: ( - <> - <ModalCloser> - <ClosingButton size="large" className={styles['close-button']} /> - </ModalCloser> - {child.props.children} - </> - ), - }); - } - - return child; - }) - : children; - }, [children, getLabel, hideCloseButton]); - - return ( - <FloatingPortal data-name="modal"> - {isOpen && ( - <FloatingOverlay - lockScroll={lockScroll} - className={cn(styles['modal'], styles[`modal--${size}`], styles[`modal--${position}`], { - [styles['modal--no-overlay']]: overlay === 'none', - })} - > - <FloatingFocusManager - context={context} - closeOnFocusOut={!trapFocus && isDismissable} - visuallyHiddenDismiss={visuallyHiddenDismiss ? getLabel('modal.close') : undefined} - returnFocus={returnFocus} - modal={trapFocus} - > - <div - {...getFloatingProps({ - ref: floating, - className: styles['modal__inner'], - 'aria-labelledby': labelId, - 'aria-describedby': descriptionId, - 'aria-modal': trapFocus, - })} - > - <Card {...cardProps} className={cn(styles['modal__card'], cardProps?.className)}> - {parsedChildren} - </Card> - </div> - </FloatingFocusManager> - </FloatingOverlay> - )} - </FloatingPortal> - ); -}; - -export default Modal; diff --git a/libs/react-components/src/community/components/placeholder/placeholder.stories.tsx b/libs/react-components/src/community/components/placeholder/placeholder.stories.tsx deleted file mode 100644 index 01c95255b..000000000 --- a/libs/react-components/src/community/components/placeholder/placeholder.stories.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import Anchor from '../anchor/anchor'; -import { Card, CardContent } from '../card'; -import CardHeader from '../card/card-header/card-header'; -import Heading from '../typography/heading/heading'; -import Placeholder from './placeholder'; - -const meta: Meta<typeof Placeholder> = { - component: Placeholder, - title: 'Community/Placeholder', -}; - -export default meta; -type Story = StoryObj<typeof Placeholder>; - -export const Default: Story = { - args: { - children: 'You have no data to display.', - }, -}; - -export const InsideCard: Story = { - render: () => ( - <Card> - <CardHeader> - <Heading modifiers="h3">Assignments</Heading> - </CardHeader> - <CardContent> - <Placeholder isNested> - Assignments missing. <br /> - <Anchor href="#">Add new assignment</Anchor> - </Placeholder> - </CardContent> - </Card> - ), -}; - -/** - * When custom Image or Icon component already has white-space, you can remove the default gutter by setting `rowProps` to `{ gutter: 0 }`. - */ -export const WithCustomRowProps: Story = { - args: { - children: 'You have no data to display.', - rowProps: { gutter: 0 }, - }, -}; diff --git a/libs/react-components/src/community/components/placeholder/placeholder.tsx b/libs/react-components/src/community/components/placeholder/placeholder.tsx deleted file mode 100644 index 5c1d17e4c..000000000 --- a/libs/react-components/src/community/components/placeholder/placeholder.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Col, Row, RowProps } from '../../../tedi/components/layout/grid'; -import Print from '../../../tedi/components/misc/print/print'; -import useLayout from '../../helpers/hooks/use-layout'; -import { Card, CardContent, CardProps } from '../card'; -import Icon, { IconProps } from '../icon/icon'; -import Text from '../typography/text/text'; - -export interface PlaceholderProps { - /** - * Placeholder block content - */ - children?: React.ReactNode; - /** - * Placeholder icon name, IconProps object or ReactNode(e.g SVG) - * @default spa - */ - icon?: string | IconProps | React.ReactNode; - /** - * Additional class name. - */ - className?: string; - /** - * Card props that get passed to `<Card>` - */ - cardProps?: Omit<CardProps, 'className'>; - /** - * Use when nesting inside other components like `<CardContent>`. Passes certain default props to the inner card, like `type='borderless'`, `padding='none'` etc. - * This is just a shortcut. The same result can be achieved using `cardProps` - */ - isNested?: boolean; - /** - * Row props that get passed to row wrapping icon and content - */ - rowProps?: RowProps; -} - -/** - * Placeholder is used to indicate, that there is no data to show. It can be used on its own or inside other components, like a `<CardContent>`. - * Other components also use it internally for displaying empty state. (E.g. `<Table>`) - */ -export const Placeholder = (props: PlaceholderProps): JSX.Element => { - const { icon = 'spa', className, children, cardProps, isNested, rowProps, ...rest } = props; - const isSmallLayout = useLayout(['mobile', 'tablet']); - - const { - padding = isNested ? 0 : isSmallLayout ? 1 : 1.5, - background = isNested ? undefined : isSmallLayout ? 'bg-subtle' : 'white', - ...restCardProps - } = cardProps ?? {}; - - const getIcon = (icon: string | IconProps | React.ReactNode) => { - const iconBEM = cn('text-primary'); - const defaultIconProps: Partial<IconProps> = { size: 36, className: iconBEM }; - const iconProps: IconProps | undefined = - typeof icon === 'string' - ? { ...defaultIconProps, name: icon } - : typeof icon === 'object' && !React.isValidElement(icon) - ? { - ...defaultIconProps, - ...(icon as IconProps), - className: cn(defaultIconProps.className, (icon as IconProps)?.className), - } - : undefined; - - return iconProps ? <Icon {...iconProps} /> : (icon as React.ReactNode); - }; - - return ( - <Print breakInside="avoid"> - <Card - data-name="placeholder" - {...rest} - className={className} - borderless={isNested} - padding={padding} - background={background} - {...restCardProps} - > - <CardContent> - <Row direction="column" alignItems="center" gutter={2} {...rowProps}> - {icon && <Col width="auto">{getIcon(icon)}</Col>} - <Col width="auto"> - <Text color="muted" modifiers="center" element="div"> - {children} - </Text> - </Col> - </Row> - </CardContent> - </Card> - </Print> - ); -}; - -export default Placeholder; diff --git a/libs/react-components/src/community/components/status/status.module.scss b/libs/react-components/src/community/components/status/status.module.scss deleted file mode 100644 index 4ec171247..000000000 --- a/libs/react-components/src/community/components/status/status.module.scss +++ /dev/null @@ -1,33 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.status { - display: flex; - align-items: baseline; - font-size: 0.875rem; -} - -.status__circle { - flex-shrink: 0; - width: 10px; - height: 10px; - margin-right: 10px; - border-radius: 5px; - - @include mixins.print-grayscale; - - .status--error & { - background-color: var(--color-important-main); - } - - .status--success & { - background-color: var(--color-positive-main); - } - - .status--inactive & { - background-color: var(--color-text-disabled); - } - - .status--warning & { - background-color: var(--color-warning-main); - } -} diff --git a/libs/react-components/src/community/components/status/status.stories.tsx b/libs/react-components/src/community/components/status/status.stories.tsx deleted file mode 100644 index 277c2f910..000000000 --- a/libs/react-components/src/community/components/status/status.stories.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import Status from './status'; - -const meta: Meta<typeof Status> = { - component: Status, - title: 'Community/Status', -}; - -export default meta; -type Story = StoryObj<typeof Status>; - -export const Success: Story = { - args: { - children: 'Active', - type: 'success', - }, -}; - -export const Error: Story = { - args: { - children: 'Error', - type: 'error', - }, -}; - -export const Inactive: Story = { - args: { - children: 'Inactive', - type: 'inactive', - }, -}; - -export const Warning: Story = { - args: { - children: 'Warning', - type: 'warning', - }, -}; diff --git a/libs/react-components/src/community/components/status/status.tsx b/libs/react-components/src/community/components/status/status.tsx deleted file mode 100644 index d54ae9cf5..000000000 --- a/libs/react-components/src/community/components/status/status.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import cn from 'classnames'; - -import { Tooltip, TooltipProvider, TooltipTrigger } from '../tooltip'; -import styles from './status.module.scss'; - -export interface StatusProps { - /** - * Type of the status. - */ - type: 'error' | 'success' | 'inactive' | 'warning'; - /** - * Any content. - */ - children: React.ReactNode; - /** - * Custom class name. - */ - className?: string; - /** - * Tooltip content - */ - tooltipContent?: React.ReactNode; -} - -export const Status = (props: StatusProps): JSX.Element => { - const { children, type, className, tooltipContent, ...rest } = props; - const StatusBEM = cn(styles['status'], className, styles[`status--${type}`]); - - return ( - <div data-name="status" {...rest} className={StatusBEM}> - {tooltipContent ? ( - <TooltipProvider> - <TooltipTrigger> - <div className={styles['status__circle']} /> - </TooltipTrigger> - <Tooltip>{tooltipContent}</Tooltip> - </TooltipProvider> - ) : ( - <div className={styles['status__circle']} /> - )} - <div className={styles['status__content']}>{children}</div> - </div> - ); -}; - -export default Status; diff --git a/libs/react-components/src/community/components/stepper/index.tsx b/libs/react-components/src/community/components/stepper/index.tsx deleted file mode 100644 index ef11d27d4..000000000 --- a/libs/react-components/src/community/components/stepper/index.tsx +++ /dev/null @@ -1,2 +0,0 @@ -export * from './stepper'; -export * from './step'; diff --git a/libs/react-components/src/community/components/stepper/step.tsx b/libs/react-components/src/community/components/stepper/step.tsx deleted file mode 100644 index e91f9e7af..000000000 --- a/libs/react-components/src/community/components/stepper/step.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import styles from './stepper.module.scss'; -import { StepperContext } from './stepper-context'; - -export interface StepProps { - /** - * ID of step - */ - id: string; - /** - * Step content. - */ - children: React.ReactNode; - /** - * Label of step. - */ - label: string; - /** - * Additional class. - */ - className?: string; - /** - * The position of the step. - * The prop defaults to the value inherited from the parent Stepper component. - */ - index?: number; - /** - * Mark the step as completed - */ - completed?: boolean; -} - -export const Step = (props: StepProps): JSX.Element | null => { - const { children, className, index, id } = props; - const { activeStep } = React.useContext(StepperContext); - const StepBEM = cn(styles['stepper__step'], className, { [styles['stepper__step--current']]: activeStep === index }); - - return activeStep === index ? ( - <div data-name="step" id={id} role="tabpanel" className={StepBEM}> - {children} - </div> - ) : null; -}; - -export default Step; diff --git a/libs/react-components/src/community/components/stepper/stepper-context.ts b/libs/react-components/src/community/components/stepper/stepper-context.ts deleted file mode 100644 index a34e80bb7..000000000 --- a/libs/react-components/src/community/components/stepper/stepper-context.ts +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; - -export type AllowStepLabelClick = boolean | 'completed' | 'completed-or-next'; - -export interface IStepperContext { - activeStep: number; - allowStepLabelClick: AllowStepLabelClick; - handleActiveStepChange: (step: number) => void; -} - -export const StepperContext = React.createContext<IStepperContext>({ - activeStep: 0, - allowStepLabelClick: true, - handleActiveStepChange: () => null, -}); diff --git a/libs/react-components/src/community/components/stepper/stepper-nav.tsx b/libs/react-components/src/community/components/stepper/stepper-nav.tsx deleted file mode 100644 index 6fa3412c5..000000000 --- a/libs/react-components/src/community/components/stepper/stepper-nav.tsx +++ /dev/null @@ -1,145 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { useLabels } from '../../../tedi/providers/label-provider'; -import { useLayout } from '../../helpers'; -import Icon from '../icon/icon'; -import styles from './stepper.module.scss'; -import { StepperContext } from './stepper-context'; - -export interface StepperNavItem { - /** - * ID of tab - */ - id: string; - /** - * Label show on navigation - */ - label: string; - /** - * Is step completed - */ - completed: boolean; - /** - * The position of the step - */ - index: number; -} - -export interface StepperNavProps { - /** - * Navigation items - */ - items: StepperNavItem[]; - /** - * Navigation aria-label - */ - ariaLabel: string; - /** - * Completed label, added only for screen-readers. - * Defaults to "Completed". - */ - completedLabel?: string; - /** - * Not Completed label, added only for screen-readers. - * Defaults to "Not completed". - */ - notCompletedLabel?: string; -} - -export const StepperNav = (props: StepperNavProps): JSX.Element => { - const { getLabel } = useLabels(); - const { - items, - ariaLabel, - completedLabel = getLabel('stepper.completed'), - notCompletedLabel = getLabel('stepper.not-completed'), - } = props; - const isMobileLayout = useLayout(['mobile']); - - const { activeStep, handleActiveStepChange, allowStepLabelClick } = React.useContext(StepperContext); - - const completedSteps = items.filter((item) => item.completed).map((item) => item.index); - - const isStepperNavItemDisabled = (item: StepperNavItem): boolean => { - // StepLabelClick is boolean, enable or disable all steps - if (typeof allowStepLabelClick === 'boolean') { - return !allowStepLabelClick; - } else if (allowStepLabelClick === 'completed') { - // StepLabelClick is 'completed', enable only completed steps - return !item.completed; - } else if (allowStepLabelClick === 'completed-or-next') { - /* - * 'completed-or-next': - * - allow navigation from labels if the step is completed - * - allow navigation if the step is not completed and is the next step - * - allow navigation if the step is next of the last completed step - */ - if (item.completed) { - return false; - } - - if (item.index === activeStep + 1) { - return false; - } - - if (item.index === Math.max(...completedSteps) + 1) { - return false; - } - } - - return true; - }; - - const StepperNavItem = (stepperItem: StepperNavItem): JSX.Element => { - const { label, completed, index, id } = stepperItem; - const isCurrent = index === activeStep; - const isActive = index <= activeStep; - const isDisabled = isStepperNavItemDisabled(stepperItem); - const StepperNavItemBEM = cn( - styles['stepper__nav-item'], - { [styles['stepper__nav-item--disabled']]: isDisabled }, - { [styles['stepper__nav-item--active']]: isActive }, - { [styles['stepper__nav-item--completed']]: completed } - ); - - const StepperNavItemLabelBEM = cn(styles['stepper__nav-item-label'], { - 'visually-hidden': isMobileLayout && !isCurrent, - }); - - return ( - <li className={StepperNavItemBEM}> - <button - type="button" - role="tab" - aria-selected={isCurrent} - aria-controls={id} - className={styles['stepper__nav-item-inner']} - onClick={() => handleActiveStepChange(index)} - disabled={isDisabled} - > - <span className={styles['stepper__nav-item-counter']}> - {completed && <Icon name="done" size={18} />} - {!completed && index + 1} - </span> - <span className={StepperNavItemLabelBEM}>{label}</span> - {completed && <span className="visually-hidden">{completedLabel}</span>} - {!completed && !isCurrent && <span className="visually-hidden">{notCompletedLabel}</span>} - </button> - {isCurrent && <span className={styles['stepper__nav-item-arrow']} />} - </li> - ); - }; - - return ( - <nav role="tablist" aria-label={ariaLabel}> - <ol className={styles['stepper__nav']}> - {items.map((item, key) => ( - <StepperNavItem key={key} {...item} /> - ))} - </ol> - </nav> - ); -}; - -export default StepperNav; diff --git a/libs/react-components/src/community/components/stepper/stepper.module.scss b/libs/react-components/src/community/components/stepper/stepper.module.scss deleted file mode 100644 index a5c987b4d..000000000 --- a/libs/react-components/src/community/components/stepper/stepper.module.scss +++ /dev/null @@ -1,149 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -$stepper-transition: 150ms ease; -$stepper-step-bg: var(--color-bg-subtle); -$stepper-step-bg-hover: var(--color-bg-disabled); -$stepper-step-bg-active: var(--color-primary-main); -$stepper-step-bg-active-hover: var(--color-primary-active); - -.stepper__nav { - display: flex; - margin: 0; - overflow-x: auto; - background-color: $stepper-step-bg; - border-radius: 4px; - - .stepper--card & { - border-radius: 0; - } -} - -.stepper__nav-item { - position: relative; - display: flex; - align-items: center; - overflow: clip; - color: var(--color-text-default); - white-space: nowrap; - - @include mixins.print-grayscale; - - &--active { - color: var(--color-text-inverted); - } - - &:first-of-type { - border-radius: 4px 0 0 4px; - - .stepper--card & { - border-radius: 4px 0 0; - } - } -} - -.stepper__nav-item-inner { - @include mixins.button-reset; - - --global-outline-offset: -2px; - - display: flex; - align-items: center; - padding: 0.625rem; - transition: $stepper-transition; - transition-property: background-color; - - .stepper__nav-item--active & { - background-color: $stepper-step-bg-active; - border-radius: 0; - - --global-outline-offset: -4px; - --global-outline-color: var(--color-primary-highlight); - } - - .stepper__nav-item--active:hover:not(.stepper__nav-item--disabled) & { - background-color: $stepper-step-bg-active-hover; - } - - &:has(+ span.stepper__nav-item-arrow:hover) { - background-color: $stepper-step-bg-active-hover; - } - - &:has(+ span.stepper__nav-item-arrow) { - z-index: 2; - margin-right: 1.25rem; - } -} - -.stepper__nav-item-counter { - display: flex; - align-items: center; - justify-content: center; - width: 1.25rem; - height: 1.25rem; - font-size: 0.875rem; - font-weight: 700; - color: var(--color-text-muted); - background-color: var(--color-bg-default); - border-radius: 10rem; - transition: $stepper-transition; - transition-property: color, background-color; - - .stepper__nav-item--completed & { - color: var(--color-positive-main); - } - - .stepper__nav-item:hover:not(.stepper__nav-item--disabled, .stepper__nav-item--active) & { - color: var(--color-text-inverted); - background-color: var(--color-primary-active); - } -} - -.stepper__nav-item-label { - padding-left: 0.5rem; - font-size: 0.875rem; - line-height: 1.25rem; - transition: $stepper-transition; - transition-property: color; - - .stepper__nav-item:hover:not(.stepper__nav-item--disabled, .stepper__nav-item--active) & { - color: var(--color-primary-active); - } -} - -.stepper__nav-item-arrow { - position: absolute; - right: 0.5rem; - z-index: 1; - height: 100%; - aspect-ratio: 1 / 1; - background-color: $stepper-step-bg-active; - transition: $stepper-transition; - transition-property: background-color; - transform: rotate(45deg); - - &:hover:not(.stepper__nav-item--disabled) { - background-color: $stepper-step-bg-active-hover; - } - - .stepper__nav-item--active:hover:not(.stepper__nav-item--disabled) & { - background-color: $stepper-step-bg-active-hover; - } -} - -.stepper__step { - display: none; - padding: 1rem 0; - - @include breakpoints.media-breakpoint-up(lg) { - padding: 1.5rem 0; - } - - &--current { - display: block; - } - - .stepper--card & { - padding: 0; - } -} diff --git a/libs/react-components/src/community/components/stepper/stepper.stories.tsx b/libs/react-components/src/community/components/stepper/stepper.stories.tsx deleted file mode 100644 index 7a87c217b..000000000 --- a/libs/react-components/src/community/components/stepper/stepper.stories.tsx +++ /dev/null @@ -1,158 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; -import React from 'react'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import Button from '../button/button'; -import Heading from '../typography/heading/heading'; -import Step from './step'; -import Stepper, { StepperProps } from './stepper'; - -interface TemplateProps extends StepperProps { - controlled?: boolean; - showNavigation?: boolean; -} - -const Template = (args: TemplateProps) => { - const { controlled, showNavigation, ...rest } = args; - const [currentStep, setCurrentStep] = React.useState(args.defaultActiveStep || 0); - const [completedSteps, setCompletedSteps] = React.useState<number[]>(args.defaultActiveStep ? [0] : []); - - const StepperNavigation = (): JSX.Element => ( - <Row justifyContent={currentStep === 0 ? 'end' : currentStep === 2 ? 'start' : 'between'}> - {currentStep > 0 && ( - <Col width="auto"> - <Button visualType="secondary" onClick={() => handleActiveStepChange(currentStep - 1)}> - Back - </Button> - </Col> - )} - {currentStep < 2 && ( - <Col width="auto"> - <Button onClick={() => handleActiveStepChange(currentStep + 1)}>Next</Button> - </Col> - )} - </Row> - ); - - const handleActiveStepChange = (newActiveStep: number): void => { - if (!completedSteps.includes(currentStep) && newActiveStep > currentStep) { - setCompletedSteps((prev) => [...prev, currentStep]); - } - - setCurrentStep(newActiveStep); - }; - - const getIsCompleted = (index: number): boolean => { - return controlled ? completedSteps.includes(index) : currentStep > index; - }; - - return ( - <Stepper activeStep={controlled ? currentStep : undefined} onActiveStepChange={handleActiveStepChange} {...rest}> - <Step id="step-1" label="Childs needs" completed={getIsCompleted(0)}> - <VerticalSpacing> - <Heading element="h2">Triin Kass</Heading> - <p>Content 1</p> - {showNavigation && <StepperNavigation />} - </VerticalSpacing> - </Step> - <Step id="step-2" label="Parent ability" completed={getIsCompleted(1)}> - <VerticalSpacing> - <p>Content 2 </p> - {showNavigation && <StepperNavigation />} - </VerticalSpacing> - </Step> - <Step id="step-3" label="Family and environment" completed={getIsCompleted(2)}> - <VerticalSpacing> - <p>Content 3 </p> - {showNavigation && <StepperNavigation />} - </VerticalSpacing> - </Step> - </Stepper> - ); -}; - -/** - * Steppers convey progress through numbered steps. It provides a wizard-like workflow. <br /> - * Currently we have two visual types on stepper. Default one is used in most cases and the other one is used when stepper - * is used inside card in design. - */ -const meta: Meta<typeof Stepper> = { - component: Stepper, - title: 'Community/Stepper', - subcomponents: { Step } as never, - render: Template, -}; - -export default meta; -type Story = StoryObj<TemplateProps>; - -export const Default: Story = { - args: { - ariaLabel: 'Stepper Heading', - }, -}; - -export const WithCard: Story = { - args: { - ariaLabel: 'Stepper Heading', - card: true, - }, -}; - -export const DefaultActiveStep: Story = { - args: { - ...Default.args, - defaultActiveStep: 1, - }, -}; - -/** - * By default, `allowStepLabelClick=true`, so user clicking on step label will navigate to that step.<br/> - * Bear in mind that user could skip steps this way. Adding additional navigation inside content is not necessary, but still recommended for better UX. - */ -export const StateHandledOutside: Story = { - args: { - ...Default.args, - controlled: true, - showNavigation: true, - }, -}; - -/** - * When `allowStepLabelClick=false`, user cannot navigate to other steps by clicking on step label. UI should provide other means to navigate between steps. - */ -export const StateHandledOutsideNavNotClickable: Story = { - args: { - ...Default.args, - allowStepLabelClick: false, - controlled: true, - showNavigation: true, - }, -}; - -/** - * When `allowStepLabelClick="completed"`, user can only navigate to completed steps.<br /> - * UI should provide other means to navigate to the next steps. - */ -export const StateHandledOutsideCompleted: Story = { - args: { - ...Default.args, - allowStepLabelClick: 'completed', - controlled: true, - showNavigation: true, - }, -}; - -/** - * When `allowStepLabelClick="completed-or-next"`, user can only navigate to completed steps or next step of current step.<br /> - * Application should handle validating the steps and navigating to the next step from `onActiveStepChange`. - */ -export const StateHandledOutsideCompletedOrNext: Story = { - args: { - ...Default.args, - allowStepLabelClick: 'completed-or-next', - controlled: true, - showNavigation: true, - }, -}; diff --git a/libs/react-components/src/community/components/stepper/stepper.tsx b/libs/react-components/src/community/components/stepper/stepper.tsx deleted file mode 100644 index 76423d480..000000000 --- a/libs/react-components/src/community/components/stepper/stepper.tsx +++ /dev/null @@ -1,178 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Card, CardContent, CardHeader, CardProps } from '../card'; -import Step, { StepProps } from './step'; -import styles from './stepper.module.scss'; -import { AllowStepLabelClick, StepperContext } from './stepper-context'; -import StepperNav, { StepperNavItem } from './stepper-nav'; - -export interface StepperProps { - /** - * The activeStep index that should be open by default (zero based index). - * Do not use with activeStep - * @default 0 - */ - defaultActiveStep?: number; - /** - * Set the active step (zero based index). Used to control the activeStep outside the components. - * Should be used with onActiveStepChange function - */ - activeStep?: number; - /** - * Callback for activeStep change. - */ - onActiveStepChange?: (step: number) => void; - /** - * Allow user to navigate between steps by clicking on the step label. - * - * - false - disable navigation from labels - * - true - allow navigation from labels - * - 'completed' - allow navigation from labels only if the step is completed - * - 'completed-or-next': - * - allow navigation from labels if the step is completed - * - allow navigation if the step is not completed and is the next step - * - allow navigation if the step is next of the last completed step - * - * @default true - */ - allowStepLabelClick?: AllowStepLabelClick; - /** - * Navigation aria-label - */ - ariaLabel: string; - /** - * Two or more `<Step />` components. - */ - children: React.ReactElement<StepProps>[]; - /** - * Additional class. - */ - className?: string; - /** - * Completed label, added only for screen-readers. - * Defaults to "Completed". - */ - completedLabel?: string; - /** - * Not Completed label, added only for screen-readers. - * Defaults to "Not completed". - */ - notCompletedLabel?: string; - /** - * Card props to be passed to the Card component around the Stepper. - * When truthy, default card padding will be large - */ - card?: CardProps | boolean; -} - -export const Stepper = (props: StepperProps): JSX.Element => { - const { - activeStep, - defaultActiveStep, - onActiveStepChange, - allowStepLabelClick = true, - children, - className, - ariaLabel, - completedLabel, - notCompletedLabel, - card, - } = props; - const [innerActiveStep, setActiveStep] = React.useState<number>(defaultActiveStep || 0); - - const isActiveStepControlled = React.useCallback( - (activeStep = props.activeStep): activeStep is number => { - return typeof activeStep !== 'undefined'; - }, - [props.activeStep] - ); - - const handleActiveStepChange = React.useCallback( - (newActiveStep: number): void => { - onActiveStepChange?.(newActiveStep); - - if (!isActiveStepControlled(activeStep)) { - setActiveStep(newActiveStep); - } - }, - [activeStep, isActiveStepControlled, onActiveStepChange] - ); - - const getActiveStep = React.useMemo( - () => (isActiveStepControlled(activeStep) ? activeStep : innerActiveStep), - [activeStep, innerActiveStep, isActiveStepControlled] - ); - - const childrenArray = React.Children.map(children, (child: React.ReactNode) => { - if (React.isValidElement(child) && child.type === Step) { - return child; - } - - return null; - }); - - const steps = childrenArray?.map((step: JSX.Element, index) => { - return React.cloneElement<StepProps>(step, { - key: index, - index, - ...step.props, - }); - }); - - const getNavItems = (): StepperNavItem[] => { - return React.Children.toArray(props.children) - .filter((child: React.ReactNode): child is React.ReactElement<StepProps> => { - return React.isValidElement(child) && child.type === Step; - }) - .map((item: React.ReactElement<StepProps>, index) => { - const { label, completed, id } = item.props; - return { label, completed: !!completed, index, id }; - }); - }; - - const contextValue = React.useMemo( - () => ({ activeStep: getActiveStep, handleActiveStepChange, allowStepLabelClick }), - [allowStepLabelClick, getActiveStep, handleActiveStepChange] - ); - - const CardBEM = cn(styles['stepper'], className, { - [styles['stepper--card']]: !!card, - }); - - const getContent = () => { - if (card) { - const cardProps = card === true ? {} : card; - - return ( - <Card padding={1.5} {...cardProps} data-name="stepper" className={CardBEM}> - <CardHeader padding={0} background="white"> - <StepperNav - items={getNavItems()} - ariaLabel={ariaLabel} - completedLabel={completedLabel} - notCompletedLabel={notCompletedLabel} - /> - </CardHeader> - <CardContent>{steps}</CardContent> - </Card> - ); - } - - return ( - <div data-name="stepper" className={className}> - <StepperNav - items={getNavItems()} - ariaLabel={ariaLabel} - completedLabel={completedLabel} - notCompletedLabel={notCompletedLabel} - /> - {steps} - </div> - ); - }; - - return <StepperContext.Provider value={contextValue}>{getContent()}</StepperContext.Provider>; -}; - -export default Stepper; diff --git a/libs/react-components/src/community/components/table-of-contents/index.ts b/libs/react-components/src/community/components/table-of-contents/index.ts deleted file mode 100644 index 05ebd459a..000000000 --- a/libs/react-components/src/community/components/table-of-contents/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './table-of-contents'; -export type { TableOfContentsItemProps } from './table-of-contents-item'; diff --git a/libs/react-components/src/community/components/table-of-contents/table-of-contents-item.tsx b/libs/react-components/src/community/components/table-of-contents/table-of-contents-item.tsx deleted file mode 100644 index 7514c167e..000000000 --- a/libs/react-components/src/community/components/table-of-contents/table-of-contents-item.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import classNames from 'classnames'; -import { useContext } from 'react'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import Separator from '../../../tedi/components/misc/separator/separator'; -import Icon from '../icon/icon'; -import { IModalContext } from '../modal'; -import Text from '../typography/text/text'; -import { TableOfContentsContext } from './table-of-contents'; -import styles from './table-of-contents.module.scss'; - -export type TableOfContentsItemConditionalTypes = - | { - /** - * Unique id for the item - */ - id?: never; - /** - * Optional children to create a nested list - */ - children?: never; - } - | { - /** - * Unique id for the item - */ - id: string; - /** - * Optional children to create a nested list - */ - children: TableOfContentsItemProps[]; - }; - -export type TableOfContentsItemProps = TableOfContentsItemConditionalTypes & { - /** - * Content should generally use the anchor or button element - * For example: - * Link - <Anchor href="#abc">Something</Anchor> - * Button - <Button onClick={() => setCurrentStep(i)} /> - * Function - Also accepts a callback that has the closeModal function as parameter - */ - content: React.ReactNode | ((props: Pick<IModalContext, 'closeModal'>) => React.ReactNode); - /** - * Can contain true/false/undefined - - * true/false for validated fields - * undefined for fields that haven't been touched - */ - isValid?: boolean; - - /** - * Render a separator below the item - */ - separator?: boolean; - /** - * Hide icon before the item - */ - hideIcon?: boolean; -}; - -export function TableOfContentsItem(props: TableOfContentsItemProps & { handleCloseModal: () => void }) { - const { children, content, isValid, separator, hideIcon, id, handleCloseModal } = props; - const { openItems, showIcons } = useContext(TableOfContentsContext); - - const iconClass = classNames(styles['table-of-contents__icon'], { - [styles['table-of-contents__icon--hidden']]: hideIcon, - }); - - return ( - <> - <Col role="treeitem" aria-expanded={id && openItems?.includes(id) ? true : false}> - <Row gutter={2}> - {showIcons && ( - <> - <Col width="auto"> - {isValid === false ? ( - <Icon className={iconClass} name="warning" color="important" /> - ) : ( - <Icon className={iconClass} name="check" color={isValid === true ? 'positive' : 'disabled'} /> - )} - </Col> - </> - )} - <Col> - <Text element="div" modifiers="break-word"> - {typeof content === 'function' ? content?.({ closeModal: handleCloseModal }) : content} - </Text> - </Col> - </Row> - </Col> - - {id && - openItems?.includes(id) && - children?.map((child, i) => ( - <Col key={`${id}-${i}`}> - <Row - role="treeitem" - element="ul" - gutterX={0} - gutterY={2} - direction="column" - className={styles['table-of-contents__child']} - > - <TableOfContentsItem key={`${id}-${i}`} {...child} handleCloseModal={handleCloseModal} /> - </Row> - </Col> - ))} - {separator && ( - <Col> - <Separator /> - </Col> - )} - </> - ); -} diff --git a/libs/react-components/src/community/components/table-of-contents/table-of-contents-items.tsx b/libs/react-components/src/community/components/table-of-contents/table-of-contents-items.tsx deleted file mode 100644 index 0f32a6de7..000000000 --- a/libs/react-components/src/community/components/table-of-contents/table-of-contents-items.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -import { flushSync } from 'react-dom'; - -import { Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import { useLayout } from '../../helpers'; -import { ModalContext } from '../modal'; -import Heading from '../typography/heading/heading'; -import { TableOfContentsProps } from './table-of-contents'; -import { TableOfContentsItem } from './table-of-contents-item'; - -export const TableOfContentsItems = ( - props: TableOfContentsProps & { setReturnFocus?: React.Dispatch<React.SetStateAction<boolean>> } -) => { - const { items, setReturnFocus, showIcons, heading, breakToMobile = ['mobile'], className } = props; - const isMobileLayout = useLayout(breakToMobile); - const showTitle = showIcons ? true : !isMobileLayout; - const { closeModal } = React.useContext(ModalContext); - const id = React.useId(); - - const handleCloseModal = () => { - // modal has to re-render with the prop returnFocus={false} first before we close it - // otherwise the focus doesn't stay on the section the user navigated to - flushSync(() => { - setReturnFocus?.(false); - }); - - closeModal?.(); - setReturnFocus?.(true); - }; - - return ( - <VerticalSpacing size={0.5} className={className}> - {showTitle && ( - <Heading element="h3" modifiers="h4" id={id}> - {heading} - </Heading> - )} - <nav aria-labelledby={id}> - <Row role="tree" element="ul" direction="column" gap={2}> - {items.map((i, index) => ( - <TableOfContentsItem key={`toc-item-${index}`} handleCloseModal={handleCloseModal} {...i} /> - ))} - </Row> - </nav> - </VerticalSpacing> - ); -}; diff --git a/libs/react-components/src/community/components/table-of-contents/table-of-contents-modal.tsx b/libs/react-components/src/community/components/table-of-contents/table-of-contents-modal.tsx deleted file mode 100644 index 4cbb8c358..000000000 --- a/libs/react-components/src/community/components/table-of-contents/table-of-contents-modal.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import cn from 'classnames'; -import React, { useContext } from 'react'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { useLabels } from '../../../tedi/providers/label-provider'; -import Button from '../button/button'; -import ButtonContent from '../button-content/button-content'; -import { Card, CardContent, CardHeader } from '../card'; -import Icon from '../icon/icon'; -import { Modal, ModalProvider, ModalTrigger } from '../modal'; -import Heading from '../typography/heading/heading'; -import { Text } from '../typography/text/text'; -import { TableOfContentsContext, TableOfContentsProps } from './table-of-contents'; -import styles from './table-of-contents.module.scss'; -import { TableOfContentsItems } from './table-of-contents-items'; - -export const TableOfContentsModal = (props: TableOfContentsProps) => { - const { getLabel } = useLabels(); - const { items, modalProps, modalProviderProps, heading, open, defaultOpen, onToggle, className } = props; - const correctItems = items.map((i) => i.isValid === true).filter(Boolean).length; - const invalidItems = items.map((i) => i.isValid === false).filter(Boolean).length; - const id = React.useId(); - const [returnFocus, setReturnFocus] = React.useState(true); - const [innerOpen, setInnerOpen] = React.useState(defaultOpen); - const { showIcons } = useContext(TableOfContentsContext); - - const isOpen = onToggle && typeof open !== 'undefined' ? open : innerOpen; - const validLabel1 = getLabel('table-of-contents.valid', `${correctItems} / ${items.length}`); - const validLabel2 = getLabel('table-of-contents.valid', correctItems); - const invalidLabel = getLabel('table-of-contents.invalid', invalidItems); - - const handleToggle = (open: boolean) => { - setInnerOpen(open); - onToggle?.(open); - }; - - const renderHeader = ( - <> - <Text element="span" modifiers={['normal', 'bold']} className={cn({ 'sr-only': showIcons })}> - {heading} - </Text> - {showIcons && invalidItems === 0 ? ( - <Row gutter={1}> - <Col width="auto"> - <Icon name="check" color="positive" /> - </Col> - <Col width="auto"> - <Text element="span" aria-hidden={true}> - {correctItems} / {items.length} - </Text> - <Text element="span" className="sr-only"> - {validLabel1} - </Text> - </Col> - </Row> - ) : showIcons ? ( - <Row gutter={3}> - <Col width="auto"> - <Row gutter={1}> - <Col width="auto"> - <Icon name="check" color="positive" /> - </Col> - <Col width="auto"> - <Text element="span" aria-hidden={true}> - {correctItems} - </Text> - <Text element="span" className="sr-only"> - {validLabel2} - </Text> - </Col> - </Row> - </Col> - <Col width="auto"> - <Row gutter={1}> - <Col width="auto"> - <Icon name="warning" color="important" /> - </Col> - <Col width="auto"> - <Text element="span" aria-hidden={true}> - {invalidItems} - </Text> - <Text element="span" className="sr-only"> - {invalidLabel} - </Text> - </Col> - </Row> - </Col> - </Row> - ) : null} - </> - ); - - return ( - <ModalProvider open={isOpen} onToggle={handleToggle} {...modalProviderProps}> - <Heading element="h2" modifiers="normal" className={className}> - <ModalTrigger> - <Button fullWidth noStyle className={styles['table-of-contents__trigger']}> - <Card className={styles['table-of-contents__trigger-card']}> - <CardContent> - <Row> - <Col>{renderHeader}</Col> - <Col width="auto" aria-hidden={true}> - <ButtonContent as="span" visualType="link" iconRight="expand_more"> - {getLabel('open')} - </ButtonContent> - </Col> - </Row> - </CardContent> - </Card> - </Button> - </ModalTrigger> - </Heading> - <Modal aria-labelledby={id} position="bottom" returnFocus={returnFocus} {...modalProps}> - <CardHeader variant="white" id={id}> - <Heading element="h2" modifiers="normal"> - {renderHeader} - </Heading> - </CardHeader> - <CardContent> - <TableOfContentsItems {...props} setReturnFocus={setReturnFocus} /> - </CardContent> - </Modal> - </ModalProvider> - ); -}; diff --git a/libs/react-components/src/community/components/table-of-contents/table-of-contents.module.scss b/libs/react-components/src/community/components/table-of-contents/table-of-contents.module.scss deleted file mode 100644 index 35266074e..000000000 --- a/libs/react-components/src/community/components/table-of-contents/table-of-contents.module.scss +++ /dev/null @@ -1,21 +0,0 @@ -.table-of-contents__trigger { - --global-outline-offset: -2px; - - z-index: 1; - text-align: start; - box-shadow: 0 0, rgb(0 0 0 / 25%) 0 0.125em 0.5em; -} - -.table-of-contents__trigger-card { - z-index: -1; // required to have button focus outline above card -} - -.table-of-contents__icon { - &--hidden { - visibility: hidden; - } -} - -.table-of-contents__child { - padding-left: 1rem; -} diff --git a/libs/react-components/src/community/components/table-of-contents/table-of-contents.stories.tsx b/libs/react-components/src/community/components/table-of-contents/table-of-contents.stories.tsx deleted file mode 100644 index 494f1ddb1..000000000 --- a/libs/react-components/src/community/components/table-of-contents/table-of-contents.stories.tsx +++ /dev/null @@ -1,266 +0,0 @@ -import { faker } from '@faker-js/faker'; -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import React from 'react'; - -import { Section } from '../../../tedi/components/content/section/section'; -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import Anchor from '../anchor/anchor'; -import Button from '../button/button'; -import { Card, CardContent } from '../card'; -import Layout, { ILayoutProps } from '../layout/layout/layout'; -import { WithNotice as LayoutDefault } from '../layout/layout/layout.stories'; -import ToggleOpen from '../toggle-open/toggle-open'; -import Heading from '../typography/heading/heading'; -import Text from '../typography/text/text'; -import { TableOfContents, TableOfContentsProps } from './table-of-contents'; - -const meta: Meta<TableOfContentsProps> = { - component: TableOfContents, - title: 'Community/TableOfContents', - parameters: { - docs: { - story: { - inline: false, - iframeHeight: 700, - }, - }, - layout: 'fullscreen', - backgrounds: { default: 'subtle' }, - }, -}; - -export default meta; - -faker.seed(123); -const steps = [...Array(10).keys()].map(() => faker.commerce.productName()); -const longSteps = [...steps, ...steps]; - -const Template: StoryFn<TableOfContentsProps> = (args) => { - return ( - <Layout {...(LayoutDefault.args as ILayoutProps)}> - <VerticalSpacing> - <Section> - <Row> - <Col xs={12} md={8} xl={9}> - <Card> - <CardContent> - <VerticalSpacing size={2}> - {steps.map((step, i) => ( - <VerticalSpacing size={0.5} key={i}> - <Heading element="h2" modifiers="h3" id={step}> - {step} - </Heading> - <p>{faker.lorem.paragraphs(5)}</p> - </VerticalSpacing> - ))} - </VerticalSpacing> - </CardContent> - </Card> - </Col> - <Col xs={12} md={4} xl={3}> - <TableOfContents {...args} /> - </Col> - </Row> - </Section> - </VerticalSpacing> - </Layout> - ); -}; - -type Story = StoryObj<TableOfContentsProps>; - -export const Default: Story = { - render: Template, - args: { - items: steps.map((step, i) => ({ - content: ({ closeModal }) => ( - <Anchor href={`#${step}`} onClick={() => closeModal()}> - {step} - </Anchor> - ), - isValid: i < 5 ? true : i === 5 ? false : undefined, - })), - }, -}; - -export const WithIcons: Story = { - render: Template, - args: { - ...Default.args, - showIcons: true, - }, -}; - -export const WithManySteps: Story = { - render: Template, - args: { - items: longSteps.map((step, i) => ({ - content: ({ closeModal }) => ( - <Anchor href={`#${step}`} onClick={() => closeModal()}> - {`${i + 1}. ${step}`} - </Anchor> - ), - isValid: i < 5 ? true : i === 5 ? false : undefined, - })), - }, -}; - -/** - * When using TableOfContents next to multistep form, that doesn't allow user to skip to next step. - * Use disabled text as content, not button or anchor. - */ -export const CustomFormValidation: Story = { - args: { - showIcons: true, - items: [ - { - content: ({ closeModal }) => ( - <Button - visualType="link" - onClick={() => { - console.log('step 1 clicked'); - closeModal(); - }} - > - Subject - </Button> - ), - isValid: true, - }, - { - content: ({ closeModal }) => ( - <Button - visualType="link" - onClick={() => { - console.log('step 2 clicked'); - closeModal(); - }} - > - How to proceed? - </Button> - ), - isValid: true, - }, - { - content: ({ closeModal }) => ( - <Button - visualType="link" - onClick={() => { - console.log('step 3 clicked'); - closeModal(); - }} - > - Event description and time - </Button> - ), - }, - { - content: <Text color="disabled">Add notes</Text>, - }, - ], - }, -}; - -/** - * Some items can have hidden icons. - */ -export const WithHiddenIcons: Story = { - render: Template, - args: { - ...Default.args, - showIcons: true, - items: steps.map((step, index) => ({ - content: <Anchor href={`#${step}`}>{step}</Anchor>, - hideIcon: index % 2 === 0, - })), - }, -}; - -/** - * Some items can have separators after them. - */ -export const WithSeparators: Story = { - render: Template, - args: { - ...Default.args, - items: steps.map((step, index) => ({ - content: <Anchor href={`#${step}`}>{step}</Anchor>, - separator: index % 2 === 0, - })), - }, -}; - -const NestedTemplate: StoryFn<TableOfContentsProps> = (args) => { - const { items, openItems, ...rest } = args; - const [openedItems, setOpenedItems] = React.useState<string[]>(openItems || []); - const handleToggle = (id: string) => { - if (openedItems?.includes(id)) { - setOpenedItems(openedItems.filter((item) => item !== id)); - } else { - setOpenedItems([...openedItems, id]); - } - }; - - const itemsWithContent = steps.map((step, index) => { - const id = `step-${index}`; - return { - id, - content: () => ( - <ToggleOpen - openText={step} - closeText={step} - isOpen={openedItems?.includes(id) || false} - visualType="link" - onClick={() => handleToggle(id)} - ></ToggleOpen> - ), - children: [...Array(2).keys()] - .map(() => faker.commerce.productName()) - .map((child, j) => ({ - content: () => <Anchor>{child}</Anchor>, - })), - }; - }); - - return ( - <Layout {...(LayoutDefault.args as ILayoutProps)}> - <VerticalSpacing> - <Section> - <Row> - <Col xs={12} md={8} xl={9}> - <Card> - <CardContent> - <VerticalSpacing size={2}> - {steps.map((step, i) => ( - <VerticalSpacing size={0.5} key={i}> - <Heading element="h2" modifiers="h3" id={step}> - {step} - </Heading> - <p>{faker.lorem.paragraphs(5)}</p> - </VerticalSpacing> - ))} - </VerticalSpacing> - </CardContent> - </Card> - </Col> - <Col xs={12} md={4} xl={3}> - <TableOfContents items={itemsWithContent} openItems={openedItems} {...rest} /> - </Col> - </Row> - </Section> - </VerticalSpacing> - </Layout> - ); -}; - -/** - * Every item can have children. - */ -export const NestedExample: Story = { - render: NestedTemplate, - args: { - ...Default.args, - showIcons: false, - }, -}; diff --git a/libs/react-components/src/community/components/table-of-contents/table-of-contents.tsx b/libs/react-components/src/community/components/table-of-contents/table-of-contents.tsx deleted file mode 100644 index c43ca9d4b..000000000 --- a/libs/react-components/src/community/components/table-of-contents/table-of-contents.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import React from 'react'; - -import { Affix } from '../../../tedi/components/misc/affix/affix'; -import ScrollVisibility from '../../../tedi/components/misc/scroll-visibility/scroll-visibility'; -import { StretchContent } from '../../../tedi/components/misc/stretch-content/stretch-content'; -import { useLabels } from '../../../tedi/providers/label-provider'; -import { Layouts, useLayout } from '../../helpers'; -import { Card, CardContent } from '../card'; -import { ModalProps, ModalProviderProps } from '../modal'; -import { TableOfContentsItemProps } from './table-of-contents-item'; -import { TableOfContentsItems } from './table-of-contents-items'; -import { TableOfContentsModal } from './table-of-contents-modal'; - -export interface TableOfContentsProps { - /** - * List of items to be shown in the table of contents - */ - items: TableOfContentsItemProps[]; - /** - * Heading of the table of contents - * @default Value from LabelProvider - */ - heading?: string; - /** - * Should component be initially shown. Won't work with open and onToggle. - * @default false - */ - defaultOpen?: boolean; - /** - * Should the component be open or closed. - * Use to handle state outside of component, should use with onToggle prop. - */ - open?: boolean; - /** - * Callback when component is toggled. - * Use to handle state outside of component, should use with open prop. - */ - onToggle?: (open: boolean) => void; - /** - * Show icons before items - * @default false - */ - showIcons?: boolean; - /** - * When should mobile layout to be used - * @default 'mobile' - */ - breakToMobile?: Layouts; - /** - * Props passed to ModalProvider - */ - modalProviderProps?: ModalProviderProps; - /** - * Props passed to Modal - */ - modalProps?: ModalProps; - /** - * Should the component hide on mobile view when the page is scrolled - * @default true - */ - hideOnScroll?: boolean; - /** - * Open items' id's - **/ - openItems?: string[]; - /** - * Additional class name - */ - className?: string; -} - -interface TableOfContentsContext { - openItems?: string[]; - showIcons?: boolean; -} - -export const TableOfContentsContext = React.createContext<TableOfContentsContext>({ - openItems: undefined, - showIcons: undefined, -}); - -/** - * TableOfContents is helper component that can be used to show table of contents for long pages or multistep forms. It keeps itself fixed next to the content when scrolled (On desktop). <br /><br /> - * When used to link to sections on the same page, make sure to use the same id on the section and the table of contents item Anchor. Setting `tabIndex` on the section is also necessary for the focus to work correctly in some screen-readers. - * More info <a href="https://github.com/gettalong/kramdown/issues/215" target="_blank">here</a> and <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=262171" target="_blank">here</a>.<br /><br /> - * When used to keep track of multistep form progress, usage on `showIcons={true}` is recommended. Keep in mind that `isValid` property is optional and can be undefined to show not validated steps. <br /> - * Also it is possible to use disabled-text as item content, to show that user can't skip to next step. <br /><br /> - */ -export const TableOfContents = (props: TableOfContentsProps) => { - const { getLabel } = useLabels(); - const { breakToMobile = ['mobile'], heading = getLabel('table-of-contents.title'), hideOnScroll = true } = props; - const isMobileLayout = useLayout(breakToMobile); - const { showIcons, openItems, ...rest } = props; - - return ( - <TableOfContentsContext.Provider value={{ openItems, showIcons }}> - <Affix - right={0} - left={0} - bottom={isMobileLayout ? 0 : 1.5} - top={isMobileLayout ? 'unset' : 1.5} - position={isMobileLayout ? 'fixed' : 'sticky'} - > - <StretchContent> - {isMobileLayout ? ( - <ScrollVisibility animationDirection="down" enabled={hideOnScroll}> - <TableOfContentsModal {...rest} heading={heading} /> - </ScrollVisibility> - ) : ( - <Card> - <CardContent> - <TableOfContentsItems {...rest} heading={heading} /> - </CardContent> - </Card> - )} - </StretchContent> - </Affix> - </TableOfContentsContext.Provider> - ); -}; - -export default TableOfContents; diff --git a/libs/react-components/src/community/components/table/components/customize-table-cell/customize-table-cell.module.scss b/libs/react-components/src/community/components/table/components/customize-table-cell/customize-table-cell.module.scss deleted file mode 100644 index acf8ce08d..000000000 --- a/libs/react-components/src/community/components/table/components/customize-table-cell/customize-table-cell.module.scss +++ /dev/null @@ -1,3 +0,0 @@ -.cell { - vertical-align: var(--table-cell-internal-vertical-align, baseline); -} diff --git a/libs/react-components/src/community/components/table/components/customize-table-cell/customize-table-cell.tsx b/libs/react-components/src/community/components/table/components/customize-table-cell/customize-table-cell.tsx deleted file mode 100644 index cc914a5e9..000000000 --- a/libs/react-components/src/community/components/table/components/customize-table-cell/customize-table-cell.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; - -import styles from './customize-table-cell.module.scss'; - -export type AlignCell = 'top' | 'middle' | 'bottom' | 'baseline'; - -interface CustomizeTableCellProps { - /** - * Cell contents - */ - children?: React.ReactNode; - /** - * Custom classes added to the cell - */ - className?: string; - /** - * Vertical alignment of the cell - * @default baseline - */ - verticalAlign?: AlignCell; -} - -export const CustomizeTableCell = (props: CustomizeTableCellProps): JSX.Element => { - const { children, className, verticalAlign = 'baseline' } = props; - const nodeRef = React.useRef<HTMLDivElement>(null); - - React.useLayoutEffect(() => { - const parentElem = nodeRef?.current?.parentElement; - if (parentElem) { - parentElem.className = styles['cell']; - - if (className) { - parentElem.classList.add(...className.split(' ')); - } - - if (verticalAlign) { - parentElem.style.setProperty('--table-cell-internal-vertical-align', verticalAlign); - } - } - }, [className, verticalAlign]); - - return <div ref={nodeRef}>{children}</div>; -}; diff --git a/libs/react-components/src/community/components/table/components/examples/custom-expand-row.tsx b/libs/react-components/src/community/components/table/components/examples/custom-expand-row.tsx deleted file mode 100644 index 5a20de218..000000000 --- a/libs/react-components/src/community/components/table/components/examples/custom-expand-row.tsx +++ /dev/null @@ -1,137 +0,0 @@ -import { faker } from '@faker-js/faker'; -import { StoryFn, StoryObj } from '@storybook/react'; -import { ColumnDef, createColumnHelper, Row as TSRow } from '@tanstack/react-table'; - -import { Col, Row } from '../../../../../tedi/components/layout/grid'; -import Print from '../../../../../tedi/components/misc/print/print'; -import { getBackgroundColorClass } from '../../../../helpers/background-colors/background-colors'; -import { IntentionalAny } from '../../../../types'; -import Tag from '../../../tag/tag'; -import ToggleOpen from '../../../toggle-open/toggle-open'; -import Text from '../../../typography/text/text'; -import Table from '../../table'; -import { DefaultTData, TableProps } from '../../table.types'; - -interface Proceeding { - type: 'Lihtmenetlus' | 'Juhtummenetlus'; - status: 'aktiivne' | 'alustatud' | 'lõpetatud'; - keywords: string; - employee: string; - authority: string; - date: string; - refrenceNumber: string; -} - -interface ProceedingRow extends Partial<Proceeding> { - subRows?: Proceeding[]; - CustomRowComponent?: React.ComponentType<TSRow<IntentionalAny>>; - countLabel?: (count: number) => string; - customRowLabel?: string; -} - -const CustomExpandRow = <TData extends DefaultTData<TData>>(row: TSRow<TData>): JSX.Element => { - const totalCells = row.getVisibleCells().length / 2; - return ( - <Print breakAfter="avoid"> - <tr className={getBackgroundColorClass('bg-muted')}> - <td colSpan={Math.ceil(totalCells)}> - <Text modifiers="bold">{row.original.customRowLabel}</Text> - </td> - <td colSpan={Math.floor(totalCells)}> - <Row alignItems="center" justifyContent="end" gutterX={2}> - <Col width="auto"> - <Text modifiers="small" color="subtle"> - {row.subRows.length} {row.original.countLabel(row.subRows.length)} - </Text> - </Col> - <Col width="auto"> - <ToggleOpen - openText="Näita rohkem" - closeText="Näita vähem" - onClick={row.getToggleExpandedHandler()} - isOpen={row.getIsExpanded()} - size="small" - visualType="link" - ></ToggleOpen> - </Col> - </Row> - </td> - </tr> - </Print> - ); -}; - -const createProceeding = (): Proceeding => ({ - type: faker.helpers.arrayElement(['Lihtmenetlus', 'Juhtummenetlus']), - status: faker.helpers.arrayElement(['aktiivne', 'alustatud', 'lõpetatud']), - keywords: faker.lorem.words(3), - employee: faker.person.fullName(), - authority: faker.helpers.arrayElement(['Tallinna KOV', 'Tartu KOV']), - date: faker.date.past().toLocaleDateString('et-EE'), - refrenceNumber: faker.string.alphanumeric(10), -}); - -const apiData = [...Array(10).keys()].map(() => createProceeding()); - -const data: ProceedingRow[] = [ - { - CustomRowComponent: CustomExpandRow, - customRowLabel: 'Aktiivsed', - countLabel: (count) => (count === 0 ? 'menetlust' : 'menetlust'), - subRows: apiData.filter((d) => ['aktiivne', 'alustatud'].includes(d.status)), - }, - { - CustomRowComponent: CustomExpandRow, - customRowLabel: 'Lõpetatud', - countLabel: (count) => (count === 0 ? 'menetlust' : 'menetlust'), - subRows: apiData.filter((d) => d.status === 'lõpetatud'), - }, -]; - -type Story = StoryObj<TableProps<ProceedingRow>>; - -const Template: StoryFn<TableProps<ProceedingRow>> = (args) => ( - <Table<ProceedingRow> {...args} className="sb-unstyled" /> -); - -const columnHelper = createColumnHelper<ProceedingRow>(); - -// eslint-disable-next-line -const columns: ColumnDef<ProceedingRow, any>[] = [ - columnHelper.accessor('type', { - header: () => 'Tüüp', - cell: ({ row: { original } }) => <Tag>{original.type}</Tag>, - }), - columnHelper.accessor('status', { - header: () => 'Staatus', - cell: ({ row: { original } }) => <Tag>{original.status}</Tag>, - }), - columnHelper.accessor('keywords', { - header: () => 'Märksõnad', - }), - columnHelper.accessor('date', { - header: () => 'Viimati muudetud', - cell: ({ row: { original } }) => ( - <div> - <Text>{original.employee}</Text> - <Text color="subtle" modifiers="small"> - {original.authority} - </Text> - </div> - ), - }), - columnHelper.accessor('refrenceNumber', { - header: () => 'Tegevus', - }), -]; - -export const CustomExpandRowExample: Story = { - render: Template, - args: { - data: data, - columns: columns, - id: 'customExpandRow', - defaultExpanded: { '0': true }, - hidePagination: true, - }, -}; diff --git a/libs/react-components/src/community/components/table/components/helpers.tsx b/libs/react-components/src/community/components/table/components/helpers.tsx deleted file mode 100644 index 7fe56a491..000000000 --- a/libs/react-components/src/community/components/table/components/helpers.tsx +++ /dev/null @@ -1,137 +0,0 @@ -import { ColumnDef, ColumnFiltersState, PaginationState, SortingState } from '@tanstack/react-table'; -import React from 'react'; - -import { LabelContext } from '../../../../tedi/providers/label-provider'; -import Check from '../../form/check/check'; -import Icon from '../../icon/icon'; -import Tag from '../../tag/tag'; -import styles from '../table.module.scss'; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function getExpandColumn<TData>(id = 'expander', showExpandAll?: boolean): ColumnDef<TData, any> { - return { - id, - header: () => (showExpandAll ? <span>all</span> : null), - cell: ({ row }) => - row.getCanExpand() && ( - <button type="button" className={styles['table__expand']} onClick={row.getToggleExpandedHandler()}> - <span className="visually-hidden"> - <LabelContext.Consumer> - {({ getLabel }) => { - return getLabel('table.toggle-sub-row', row.getIsExpanded()); - }} - </LabelContext.Consumer> - </span> - <Tag color="default" type="ghost"> - <Icon name={row.getIsExpanded() ? 'remove' : 'add'} size={16} /> - </Tag> - </button> - ), - size: 18, - maxSize: 18, - minSize: 18, - }; -} - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function getRowSelectionColumn<TData>(id = 'row-selection', showSelectAll?: boolean): ColumnDef<TData, any> { - return { - id, - header: ({ table }) => - showSelectAll ? ( - <LabelContext.Consumer> - {({ getLabel }) => { - const toggleLabel = getLabel('table.select-all', table.getIsAllRowsSelected()); - - return ( - <Check - id={`${id}-header`} - label={toggleLabel} - hideLabel - value="row-expander-header" - name={`${id}-header`} - checked={table.getIsAllRowsSelected()} - indeterminate={table.getIsSomeRowsSelected()} - onChange={() => table.toggleAllRowsSelected()} - /> - ); - }} - </LabelContext.Consumer> - ) : null, - cell: ({ row }) => { - return ( - <LabelContext.Consumer> - {({ getLabel }) => { - const toggleLabel = getLabel('table.select-row', row.getIsSelected()); - - if (!row.getCanSelect()) { - return null; - } - - return ( - <Check - id={`${id}-${row.id}`} - name={`${id}-${row.id}`} - label={toggleLabel} - hideLabel - value={`${id}-${row.id}`} - checked={row.getIsSelected()} - onChange={() => row.toggleSelected()} - /> - ); - }} - </LabelContext.Consumer> - ); - }, - size: 18, - maxSize: 18, - minSize: 18, - }; -} - -export function useDefaultPagination( - initial: PaginationState = { pageIndex: 0, pageSize: 10 }, - /** - * Optionally pass filter state to reset pageIndex to 0 - * If filter property changes, reset pageIndex to 0 - */ - filter?: ColumnFiltersState -) { - const [pagination, setPagination] = React.useState<PaginationState>(initial); - - /** - * If filter property changes, reset pageIndex to 0 - */ - React.useEffect(() => { - setPagination((prevState) => ({ ...prevState, pageIndex: 0 })); - }, [filter, setPagination]); - - return { - pagination, - setPagination, - size: pagination.pageSize, - page: pagination.pageIndex + 1, - }; -} - -export function useDefaultSorting(initial: SortingState = []) { - const [sorting, setSorting] = React.useState<SortingState>(initial); - - const sort = sorting.length ? sorting.map((sort) => `${sort.id}:${sort.desc ? 'desc' : 'asc'}`) : undefined; - - return { sorting, setSorting, sort }; -} - -export function useDefaultFiltering(initial: ColumnFiltersState = []) { - const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>(initial); - const [filter, setFilter] = React.useState({}); - - React.useEffect(() => { - let newFilter = {}; - columnFilters.forEach((f) => (newFilter = { ...newFilter, [f.id]: f.value })); - - setFilter(newFilter); - }, [columnFilters]); - - return { columnFilters, setColumnFilters, filter }; -} diff --git a/libs/react-components/src/community/components/table/components/pagination/PaginationNextButton.tsx b/libs/react-components/src/community/components/table/components/pagination/PaginationNextButton.tsx deleted file mode 100644 index cebdcbd77..000000000 --- a/libs/react-components/src/community/components/table/components/pagination/PaginationNextButton.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { Table as TableType } from '@tanstack/table-core'; -import React from 'react'; - -import { useLabels } from '../../../../../tedi/providers/label-provider'; -import Icon from '../../../icon/icon'; -import { TableContext } from '../../table-context'; -import styles from './pagination.module.scss'; - -export interface PaginationNextButtonProps { - type: 'next' | 'previous'; -} - -const PaginationNextButton = ({ type }: PaginationNextButtonProps) => { - const { table } = React.useContext(TableContext); - const { getLabel } = useLabels(); - - const { getCanPreviousPage, getCanNextPage, nextPage, previousPage, toggleAllRowsExpanded } = - table as TableType<unknown>; - - const isNext = type === 'next'; - - return ( - <li className={styles['pagination__arrow-item']}> - <button - type="button" - className={styles['pagination__arrow']} - disabled={isNext ? !getCanNextPage() : !getCanPreviousPage()} - onClick={() => { - isNext ? nextPage() : previousPage(); - toggleAllRowsExpanded(false); - }} - > - <span className="visually-hidden">{getLabel(`pagination.${isNext ? 'next' : 'prev'}-page`)}</span> - <Icon name={isNext ? 'arrow_forward' : 'arrow_back'} size={16} /> - </button> - </li> - ); -}; - -export default PaginationNextButton; diff --git a/libs/react-components/src/community/components/table/components/pagination/PaginationPageButton.tsx b/libs/react-components/src/community/components/table/components/pagination/PaginationPageButton.tsx deleted file mode 100644 index 3b9d054b5..000000000 --- a/libs/react-components/src/community/components/table/components/pagination/PaginationPageButton.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { Table as TableType } from '@tanstack/table-core'; -import cn from 'classnames'; -import React from 'react'; - -import { useLabels } from '../../../../../tedi/providers/label-provider'; -import { TableContext } from '../../table-context'; -import styles from './pagination.module.scss'; -import { UsePaginationItem } from './use-pagination'; - -export interface PaginationPageButtonProps { - item: UsePaginationItem; -} - -const PaginationPageButton = ({ item }: PaginationPageButtonProps) => { - const { table } = React.useContext(TableContext); - const { getLabel } = useLabels(); - const pageNumber = item.page || 0; - const pageLabel = getLabel('pagination.page', pageNumber, item.selected); - - const { setPageIndex, toggleAllRowsExpanded } = table as TableType<unknown>; - - return ( - <li> - <button - {...item} - type="button" - className={cn(styles['pagination__page'], { - [styles['pagination__page--current']]: item.selected, - })} - aria-label={pageLabel} - onClick={() => { - setPageIndex(pageNumber - 1); - toggleAllRowsExpanded(false); - }} - > - {pageNumber} - </button> - </li> - ); -}; - -export default PaginationPageButton; diff --git a/libs/react-components/src/community/components/table/components/pagination/pagination.module.scss b/libs/react-components/src/community/components/table/components/pagination/pagination.module.scss deleted file mode 100644 index d24eed35b..000000000 --- a/libs/react-components/src/community/components/table/components/pagination/pagination.module.scss +++ /dev/null @@ -1,96 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -.pagination__wrapper { - display: flex; - align-items: center; - justify-content: space-between; - padding: 0.625rem 0.875rem; -} - -.pagination__pages { - display: flex; - align-items: center; - margin: 0; - list-style: none; -} - -.pagination__page { - display: none; - min-width: 1.5rem; - min-height: 1.5rem; - padding: 0 0.125rem; - margin: 0 0.125rem; - color: var(--color-text-muted); - text-align: center; - background: var(--color-transparent); - - // Only styles applied to button elements (not ellipsis) - &:is(button) { - cursor: pointer; - border: none; - border-radius: 1.5rem; - transition-timing-function: ease; - transition-duration: 0.2s; - transition-property: color, background-color; - } - - &:hover:is(button) { - color: var(--color-primary-main); - background-color: var(--color-bg-subtle); - } - - @media print { - display: block; - } - - &:focus { - border-radius: 1.5rem; - } - - &--current { - display: block; - color: var(--color-text-inverted); - background-color: var(--color-primary-active); - - @media print { - color: var(--color-text-inverted) !important; - background-color: var(--color-text-muted); - } - } - - @include breakpoints.media-breakpoint-up(md) { - display: block; - } -} - -.pagination__arrow-item { - display: flex; - - &:first-of-type { - padding-right: 1rem; - } - - &:last-child { - padding-left: 1rem; - } -} - -.pagination__arrow { - height: 1rem; - font-weight: 700; - color: var(--color-text-muted); - cursor: pointer; - background-color: var(--color-transparent); - border: none; - transition: color 0.2s ease; - - &:disabled { - color: var(--color-text-disabled); - cursor: initial; - } - - &:hover:not(:disabled) { - color: var(--color-primary-active); - } -} diff --git a/libs/react-components/src/community/components/table/components/pagination/pagination.tsx b/libs/react-components/src/community/components/table/components/pagination/pagination.tsx deleted file mode 100644 index 8ad8af6de..000000000 --- a/libs/react-components/src/community/components/table/components/pagination/pagination.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { Table as TableType } from '@tanstack/table-core'; -import cn from 'classnames'; -import React from 'react'; - -import { useLabels } from '../../../../../tedi/providers/label-provider'; -import Select, { ISelectOption, TSelectValue } from '../../../form/select/select'; -import Text from '../../../typography/text/text'; -import { DefaultTData } from '../../table.types'; -import { TableContext } from '../../table-context'; -import styles from './pagination.module.scss'; -import PaginationNextButton from './PaginationNextButton'; -import PaginationPageButton from './PaginationPageButton'; -import usePagination, { UsePaginationItem } from './use-pagination'; - -export interface PaginationProps { - totalRows: number; -} - -const Pagination = <TData extends DefaultTData<TData>>(props: PaginationProps): JSX.Element | null => { - const { getLabel } = useLabels(); - const { table, id } = React.useContext(TableContext); - const resultsLabel = getLabel('pagination.results', props.totalRows); - - const { setPageSize, getState, getPageCount } = table as TableType<TData>; - const { pageIndex, pageSize } = getState().pagination; - const paginationOptions = [ - { value: '5', label: '5' }, - { value: '10', label: '10' }, - { value: '20', label: '20' }, - { value: '50', label: '50' }, - { value: '100', label: '100' }, - ]; - const totalPages = Math.ceil(props.totalRows / pageSize); - - const { paginationItems } = usePagination({ - page: pageIndex + 1, - count: totalPages, - }); - - // selected value must have a JS reference to one of the options. Otherwise, we don't have a correct focus on the selected item when menu is opened with a tab - const selectedValue = paginationOptions.find((o) => o.value === String(pageSize)) ?? { - value: String(pageSize), - label: String(pageSize), - }; - - const changePageSize = (option: TSelectValue) => { - const value = parseInt((option as ISelectOption)?.value || '10'); - setPageSize(value); - }; - - const renderPaginationButton = (item: UsePaginationItem, index: number) => { - if (item.type === 'previous' || item.type === 'next') { - return <PaginationNextButton type={item.type} key={index} />; - } - - if (item.type === 'ellipsis') { - return ( - <li key={index} className={cn(styles['pagination__page'])}> - ... - </li> - ); - } - - return <PaginationPageButton item={item} key={index} />; - }; - - return ( - <div className={styles['pagination__wrapper']}> - <Text color="muted" modifiers="small"> - {props.totalRows} {resultsLabel} - </Text> - {getPageCount() > 1 && ( - <nav role="navigation" aria-label={getLabel('pagination.title')} className={styles['pagination']}> - <ul className={styles['pagination__pages']}> - {paginationItems.map((item, key) => renderPaginationButton(item, key))} - </ul> - </nav> - )} - <Select - id={`page-size-${id}`} - label={getLabel('pagination.page-size')} - hideLabel={true} - isSearchable={false} - isClearable={false} - onChange={(value) => changePageSize(value)} - value={selectedValue} - size="small" - options={paginationOptions} - /> - </div> - ); -}; - -export default Pagination; diff --git a/libs/react-components/src/community/components/table/components/pagination/use-pagination.ts b/libs/react-components/src/community/components/table/components/pagination/use-pagination.ts deleted file mode 100644 index a34454661..000000000 --- a/libs/react-components/src/community/components/table/components/pagination/use-pagination.ts +++ /dev/null @@ -1,127 +0,0 @@ -export interface UsePaginationProps { - /** - * The current page. - */ - page: number; - /** - * The total number of pages. - */ - count: number; - /** - * Number of always visible pages at the beginning and end. - * @default 1 - */ - boundaryCount?: number; - /** - * Number of always visible pages before and after the current page. - * @default 1 - */ - siblingCount?: number; -} - -export type PageType = 'page' | 'next' | 'previous' | 'ellipsis'; - -export interface UsePaginationItem { - type: PageType; - page: number | null; - selected: boolean; -} - -export interface UsePaginationResult { - paginationItems: UsePaginationItem[]; -} - -export const usePagination = (props: UsePaginationProps): UsePaginationResult => { - const { boundaryCount = 1, count = 5, page, siblingCount = 1 } = props; - - const range = (start: number, end: number) => { - const length = end - start + 1; - return Array.from({ length }, (_, i) => start + i); - }; - - const startPages = range(1, Math.min(boundaryCount, count)); - const endPages = range(Math.max(count - boundaryCount + 1, boundaryCount + 1), count); - - const siblingsStart = Math.max( - Math.min( - // Natural start - page - siblingCount, - // Lower boundary when page is high - count - boundaryCount - siblingCount * 2 - 1 - ), - // Greater than startPages - boundaryCount + 2 - ); - - const siblingsEnd = Math.min( - Math.max( - // Natural end - page + siblingCount, - // Upper boundary when page is low - boundaryCount + siblingCount * 2 + 2 - ), - // Less than endPages - endPages.length > 0 ? endPages[0] - 2 : count - 1 - ); - - // Basic list of items to render - // e.g. itemList = ['previous', 1, 'ellipsis', 4, 5, 6, 'ellipsis', 10, 'next'] - const itemList: Array<PageType | number> = [ - ...(['previous'] as PageType[]), - ...startPages, - - // Start ellipsis - // eslint-disable-next-line no-nested-ternary - ...(siblingsStart > boundaryCount + 2 - ? (['ellipsis'] as PageType[]) - : boundaryCount + 1 < count - boundaryCount - ? [boundaryCount + 1] - : []), - - // Sibling pages - ...range(siblingsStart, siblingsEnd), - - // End ellipsis - // eslint-disable-next-line no-nested-ternary - ...(siblingsEnd < count - boundaryCount - 1 - ? (['ellipsis'] as PageType[]) - : count - boundaryCount > boundaryCount - ? [count - boundaryCount] - : []), - - ...endPages, - ...(['next'] as PageType[]), - ]; - - // Map the button type to its page number - const buttonPage = (type: PageType | number): number | null => { - switch (type) { - case 'previous': - return page - 1; - case 'next': - return page + 1; - default: - return null; - } - }; - - // Convert the basic item list to PaginationItem props objects - const items: UsePaginationItem[] = itemList.map((item) => { - return typeof item === 'number' - ? { - type: 'page', - page: item, - selected: item === page, - 'aria-current': item === page ? 'true' : undefined, - } - : { - type: item, - page: buttonPage(item), - selected: false, - }; - }); - - return { paginationItems: items }; -}; - -export default usePagination; diff --git a/libs/react-components/src/community/components/table/components/table-filter/components/table-date-filter.tsx b/libs/react-components/src/community/components/table/components/table-filter/components/table-date-filter.tsx deleted file mode 100644 index e6e1f26fe..000000000 --- a/libs/react-components/src/community/components/table/components/table-filter/components/table-date-filter.tsx +++ /dev/null @@ -1,136 +0,0 @@ -import dayjs from 'dayjs'; -import { useFormik } from 'formik'; -import React from 'react'; -import * as Yup from 'yup'; - -import { Col, Row } from '../../../../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../../../../tedi/components/layout/vertical-spacing'; -import { useLabels } from '../../../../../../tedi/providers/label-provider'; -import { IntentionalAny } from '../../../../../types'; -import Button from '../../../../button/button'; -import { DatePicker, DatePickerProps } from '../../../../form/pickers'; -import Text from '../../../../typography/text/text'; -import { TableFilterContext } from '../table-filter-context'; - -// DatePicker props that we allow to override through the column.meta -export type PickerOverridableProps = Partial< - Pick< - DatePickerProps, - | 'label' - | 'minDate' - | 'maxDate' - | 'disableFuture' - | 'disablePast' - | 'shouldDisableDate' - | 'shouldDisableMonth' - | 'shouldDisableYear' - > ->; - -export const TableDateFilter = () => { - const { getLabel } = useLabels(); - const { column, open, setOpen, values: contextValues } = React.useContext(TableFilterContext); - - const initialValues = { - dateRangeField: contextValues?.dateRange, - }; - - const meta = column?.columnDef?.meta; - const startFieldProps = meta?.startDatePicker ?? {}; - const endFieldProps = meta?.endDatePicker ?? {}; - - const filterLabel = getLabel('table.filter'); - const filterLabelFrom = getLabel('table.filter.from'); - const filterLabelTo = getLabel('table.filter.to'); - const filterIdFrom = `filter-date-${column?.id}-from`; - const filterIdTo = `filter-date-${column?.id}-to`; - const filterEndBeforeStart = getLabel('table.filter.validation.to-before-from'); - - const validationSchema: Yup.Schema<typeof initialValues> = Yup.object().shape({ - dateRangeField: Yup.object().shape({ - from: Yup.string().defined().nullable(), - to: Yup.string() - .defined() - .nullable() - .test('to-before-from', filterEndBeforeStart, function (value) { - const { from } = this.parent; - return !(value && from && dayjs(value).isBefore(dayjs(from), 'day')); - }), - }), - }); - - const { values, errors, setFieldValue, handleReset, handleSubmit } = useFormik({ - initialValues, - validationSchema, - onSubmit: (values: typeof initialValues) => { - column?.setFilterValue(values.dateRangeField); - setOpen?.(false); - }, - onReset: () => { - column?.setFilterValue(''); - setOpen?.(false); - }, - }); - - React.useEffect(() => { - if (open && !values.dateRangeField) { - const filterField = document.getElementById(filterIdFrom); - filterField?.focus?.({ preventScroll: true }); - } - }, [column?.id, values.dateRangeField, open, filterIdFrom]); - - return ( - <form onSubmit={handleSubmit}> - <VerticalSpacing> - <Text modifiers="h5">{filterLabel}</Text> - <DatePicker - id={filterIdFrom} - label={filterLabelFrom} - {...startFieldProps} - name={filterLabelFrom} - value={values.dateRangeField?.from ? dayjs(values.dateRangeField.from) : null} - input={{ - autoComplete: 'off', - }} - onChange={(value) => { - setFieldValue('dateRangeField.from', value?.toISOString() ?? null); - - // if start date is after end date, then clear the end date - if (value && values.dateRangeField?.to && dayjs(value).isAfter(dayjs(values.dateRangeField?.to), 'day')) { - setFieldValue('dateRangeField.to', null); - } - }} - /> - <DatePicker - id={filterIdTo} - label={filterLabelTo} - shouldDisableDate={(date) => - !!(values.dateRangeField?.from && dayjs(date).isBefore(dayjs(values.dateRangeField?.from), 'day')) - } - {...endFieldProps} - name={filterLabelTo} - value={values.dateRangeField?.to ? dayjs(values.dateRangeField?.to) : null} - input={{ - autoComplete: 'off', - }} - onChange={(value) => setFieldValue('dateRangeField.to', value?.toISOString() ?? null)} - helper={ - (errors.dateRangeField as IntentionalAny)?.to - ? { text: (errors.dateRangeField as IntentionalAny).to, type: 'error' } - : undefined - } - /> - <Row gutter={2} justifyContent="end"> - <Col width="auto"> - <Button visualType="secondary" onClick={handleReset}> - {getLabel('clear')} - </Button> - </Col> - <Col width="auto"> - <Button type="submit">{getLabel('table.filter')}</Button> - </Col> - </Row> - </VerticalSpacing> - </form> - ); -}; diff --git a/libs/react-components/src/community/components/table/components/table-filter/components/table-select-filter.tsx b/libs/react-components/src/community/components/table/components/table-filter/components/table-select-filter.tsx deleted file mode 100644 index 1ac8513fc..000000000 --- a/libs/react-components/src/community/components/table/components/table-filter/components/table-select-filter.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import { useFormik } from 'formik'; -import React from 'react'; - -import { Col, Row } from '../../../../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../../../../tedi/components/layout/vertical-spacing'; -import { useLabels } from '../../../../../../tedi/providers/label-provider'; -import Button from '../../../../button/button'; -import Card from '../../../../card/card'; -import CardContent from '../../../../card/card-content/card-content'; -import { ChoiceGroup, ChoiceGroupItemProps, TChoiceGroupValue } from '../../../../form/choice-group'; -import Heading from '../../../../typography/heading/heading'; -import styles from '../../../table.module.scss'; -import { TableFilterContext } from '../table-filter-context'; - -const sanitizeRowValues = (rowValues: unknown[]): unknown[] => { - return ( - rowValues - ?.filter(Boolean) - // Filter out non-unique values - ?.filter((item, index, array) => array?.indexOf(item) === index) - // Basic sort for strings and numbers - ?.sort((a, b) => { - if (typeof a === 'number' && typeof b === 'number') { - return a - b; - } else if (typeof a === 'string' && typeof b === 'string') { - return a?.localeCompare?.(b); - } else { - return 0; - } - }) - ); -}; - -export const TableSelectFilter = () => { - const { getLabel } = useLabels(); - const { column, rows, setOpen, values: contextValues } = React.useContext(TableFilterContext); - const filterLabel = getLabel('table.filter'); - const inputType = column?.columnDef?.filterFn; - const fieldName: keyof typeof initialValues = inputType === 'select' ? 'selectFilter' : 'multiSelectFilter'; - - const initialValues = { - inputType, - selectFilter: contextValues?.selectField, - multiSelectFilter: contextValues?.multiSelectField, - }; - - const meta = column?.columnDef?.meta; - const externalRowValues = meta?.filterOptions; - - const isChoiceGroupItem = (value: unknown): value is ChoiceGroupItemProps => { - return typeof value === 'object' && value !== null && 'id' in value && 'label' in value && 'value' in value; - }; - - const internalRowValues = - // Get all values for the corresponding column id - rows?.length && typeof column?.columnDef?.id === 'string' - ? rows.map((i) => i?.getValue?.(column?.columnDef?.id as string)) - : []; - - const rowValues = externalRowValues?.length - ? isChoiceGroupItem(externalRowValues[0]) - ? externalRowValues // Do not sanitize if custom filterOptions are choicegroupItems - : sanitizeRowValues(externalRowValues) - : sanitizeRowValues(internalRowValues); - - // If custom filterOptions are choicegroupItems then use them, otherwise create choicegroupItems from the values - const options = rowValues?.map((i, index) => - isChoiceGroupItem(i) ? i : { id: `${column?.columnDef?.id}-choice-${index}`, label: String(i), value: String(i) } - ); - - const { values, setFieldValue, handleReset, handleSubmit, errors } = useFormik({ - initialValues, - onSubmit: (values: typeof initialValues) => { - column?.setFilterValue(values[fieldName]?.length ? values[fieldName] : ''); - setOpen?.(false); - }, - onReset: () => { - column?.setFilterValue(''); - setOpen?.(false); - }, - }); - - const onSelectChange = (item: TChoiceGroupValue) => setFieldValue(fieldName, item); - - return ( - <form onSubmit={handleSubmit}> - <VerticalSpacing> - <Heading element="h6">{getLabel('table.filter')}</Heading> - <Card className={styles['filter__content']}> - <CardContent> - <ChoiceGroup - id={`filter-${fieldName}-${column?.id}`} - name={filterLabel} - label={filterLabel} - hideLabel - inputType={inputType === 'select' ? 'radio' : 'checkbox'} - size="small" - value={values[fieldName]} - indeterminateCheck={true} - indeterminateCheckProps={{ - indented: false, - className: styles['filter__indeterminate'], - }} - items={options} - onChange={onSelectChange} - helper={ - errors[fieldName]?.length !== 0 ? { text: errors[fieldName] as string, type: 'error' } : { text: '' } - } - /> - </CardContent> - </Card> - <Row gutter={2} justifyContent="end"> - <Col width="auto"> - <Button visualType="secondary" onClick={handleReset}> - {getLabel('clear')} - </Button> - </Col> - <Col width="auto"> - <Button type="submit">{getLabel('table.filter')}</Button> - </Col> - </Row> - </VerticalSpacing> - </form> - ); -}; diff --git a/libs/react-components/src/community/components/table/components/table-filter/components/table-text-filter.tsx b/libs/react-components/src/community/components/table/components/table-filter/components/table-text-filter.tsx deleted file mode 100644 index 93836ce7d..000000000 --- a/libs/react-components/src/community/components/table/components/table-filter/components/table-text-filter.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { useFormik } from 'formik'; -import React from 'react'; -import * as Yup from 'yup'; - -import { TextField } from '../../../../../../tedi/components/form/textfield/textfield'; -import { Col, Row } from '../../../../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../../../../tedi/components/layout/vertical-spacing'; -import { useLabels } from '../../../../../../tedi/providers/label-provider'; -import Button from '../../../../button/button'; -import { TableFilterContext } from '../table-filter-context'; - -export const TableTextFilter = () => { - const { getLabel } = useLabels(); - const { column, open, setOpen, values: contextValues } = React.useContext(TableFilterContext); - const initialValues = { filter: contextValues?.filter }; - - const filterId = `text-filter-${column?.id}`; - const filterLabel = getLabel('table.filter'); - const filterPlaceholder = getLabel('search'); - const filterMinLengthVal = getLabel('table.filter.validation.min-length', 3); - - const validationSchema: Yup.Schema = Yup.object().shape({ - filter: Yup.string() - .notRequired() - .matches(/^(?!\s+$).*/, getLabel('table.filter.validation.no-spaces')) - .min(3, filterMinLengthVal) - .nullable() - .transform((value) => (value ? value : null)), - }); - - const { values, setFieldValue, handleReset, handleSubmit, touched, errors } = useFormik({ - initialValues, - validationSchema, - onSubmit: (values: typeof initialValues) => { - column?.setFilterValue(values.filter); - setOpen?.(false); - }, - onReset: () => { - column?.setFilterValue(''); - setOpen?.(false); - }, - }); - - React.useEffect(() => { - if (open && !values.filter) { - const filterField = document.getElementById(filterId); - filterField?.focus?.({ preventScroll: true }); - } - }, [column?.id, values.filter, open, filterId]); - - return ( - <form onSubmit={handleSubmit}> - <VerticalSpacing> - <TextField - id={filterId} - label={filterLabel} - placeholder={filterPlaceholder} - icon="close" - onIconClick={handleReset} - value={(values.filter as string) || ''} - onChange={(value) => setFieldValue('filter', value)} - helper={ - touched.filter && errors.filter ? { text: errors.filter, type: 'error' } : { text: filterMinLengthVal } - } - input={{ - autoComplete: 'off', - }} - /> - <Row gutter={2} justifyContent="end"> - <Col width="auto"> - <Button visualType="secondary" onClick={handleReset}> - {getLabel('clear')} - </Button> - </Col> - <Col width="auto"> - <Button type="submit">{getLabel('table.filter')}</Button> - </Col> - </Row> - </VerticalSpacing> - </form> - ); -}; diff --git a/libs/react-components/src/community/components/table/components/table-filter/filter-fn.ts b/libs/react-components/src/community/components/table/components/table-filter/filter-fn.ts deleted file mode 100644 index 1a972a0ab..000000000 --- a/libs/react-components/src/community/components/table/components/table-filter/filter-fn.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { Row } from '@tanstack/react-table'; -import dayjs, { ConfigType } from 'dayjs'; - -import { IntentionalAny } from '../../../../types'; -import { DateRangeFilterValues } from './table-filter-context'; - -export const textFilterFn = (filterValue: string, data: unknown) => - typeof data === 'string' || typeof data === 'number' - ? filterValue?.toLowerCase().includes(String(data).toLowerCase()) - : true; - -export const selectFilterFn = (filterValue: string, data: unknown) => filterValue === data; - -export const multiSelectFilterFn = (filterValue: string[], data: unknown) => filterValue?.some((i) => i === data); - -export const dateRangeFilterFn = (filterValue: DateRangeFilterValues, data: unknown) => { - const date = data ? dayjs(data as string) : null; - const from = filterValue?.from ? dayjs(filterValue.from) : null; - const to = filterValue?.to ? dayjs(filterValue.to) : null; - - if ((from || to) && !date) return false; - if (from && !to) { - return from.isSameOrBefore(date, 'day'); - } else if (!from && to) { - return to.isSameOrAfter(date, 'day'); - } else if (from && to) { - return from.isSameOrBefore(date, 'day') && to.isSameOrAfter(date, 'day'); - } else return true; -}; - -export const dateRangePeriodFilterFn = (filterValue: DateRangeFilterValues, data: unknown) => { - if ( - typeof data !== 'object' || - !Object.keys(data as object).includes('from') || - !Object.keys(data as object).includes('to') - ) { - console.error( - 'Accessor function should return an object { from: Dayjs | Date | string | null | undefined, to: Dayjs | Date | string | null | undefined }' - ); - return true; - } - const date = data as { from: ConfigType; to: ConfigType } | null; - - const filterFrom = filterValue?.from ? dayjs(filterValue.from) : null; - const filterTo = filterValue?.to ? dayjs(filterValue.to) : null; - const valueFrom = date?.from; - const valueTo = date?.to; - - // in case when one of the cell values(from or to) is not set, we still check the match for the value that does exist - // when neither of the cell values are present then we don't show the row during filtering - if (filterFrom && filterTo) { - return valueFrom && valueTo - ? (filterFrom.isSameOrBefore(valueFrom, 'day') && filterTo.isSameOrAfter(valueFrom, 'day')) || - (filterTo.isSameOrAfter(valueTo, 'day') && filterFrom.isSameOrBefore(valueTo, 'day')) - : valueFrom - ? filterFrom.isSameOrBefore(valueFrom, 'day') && filterTo.isSameOrAfter(valueFrom, 'day') - : valueTo - ? filterFrom.isSameOrBefore(valueTo, 'day') && filterTo.isSameOrAfter(valueTo, 'day') - : false; - } else if (filterFrom && !filterTo) { - return valueTo - ? filterFrom.isSameOrBefore(valueTo, 'day') - : valueFrom - ? filterFrom.isSameOrBefore(valueFrom, 'day') - : false; - } else if (!filterFrom && filterTo) { - return valueFrom - ? filterTo.isSameOrAfter(valueFrom, 'day') - : valueTo - ? filterTo.isSameOrAfter(valueTo, 'day') - : false; - } else { - return true; - } -}; - -// we use a separate map function internally, so the actual filterFn can be pure, so they can also be reused in the apps if needed -export const mapFilterFn = ( - row: Row<unknown>, - columnId: string, - filterValue: unknown, - filterFn: (filterValue: IntentionalAny, data: unknown) => boolean -) => { - const value = row?.getValue?.(columnId); - return filterFn(filterValue, value); -}; diff --git a/libs/react-components/src/community/components/table/components/table-filter/table-filter-context.tsx b/libs/react-components/src/community/components/table/components/table-filter/table-filter-context.tsx deleted file mode 100644 index 010e7d72d..000000000 --- a/libs/react-components/src/community/components/table/components/table-filter/table-filter-context.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Column, Row } from '@tanstack/react-table'; -import React from 'react'; - -import { DefaultTData } from '../../table.types'; - -// hold the filter value in ISOString instead of Dayjs object, so it is easier to store in places like localstorage -export interface DateRangeFilterValues { - from: string | null; - to: string | null; -} - -export interface TableFilterFields { - filter: string; - selectField: string; - multiSelectField: string[]; - dateRange: DateRangeFilterValues; -} - -export interface ITableFilterContext<TData extends DefaultTData<TData>> { - column: Column<TData, unknown> | null; - rows: Row<TData>[] | null; - values: TableFilterFields | null; - open: boolean; - setOpen: ((open: boolean) => void) | null; -} - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export const TableFilterContext = React.createContext<ITableFilterContext<any>>({ - column: null, - rows: null, - values: null, - open: false, - setOpen: null, -}); diff --git a/libs/react-components/src/community/components/table/components/table-filter/table-filter.tsx b/libs/react-components/src/community/components/table/components/table-filter/table-filter.tsx deleted file mode 100644 index f4a63a10f..000000000 --- a/libs/react-components/src/community/components/table/components/table-filter/table-filter.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { Column, Row as TableRow } from '@tanstack/react-table'; -import { FilterFns } from '@tanstack/table-core'; -import cn from 'classnames'; -import React from 'react'; - -import { Col } from '../../../../../tedi/components/layout/grid'; -import { useLabels } from '../../../../../tedi/providers/label-provider'; -import Button from '../../../button/button'; -import { Tooltip, TooltipProvider, TooltipTrigger } from '../../../tooltip'; -import styles from '../../table.module.scss'; -import { DefaultTData } from '../../table.types'; -import { TableDateFilter } from './components/table-date-filter'; -import { TableSelectFilter } from './components/table-select-filter'; -import { TableTextFilter } from './components/table-text-filter'; -import { DateRangeFilterValues, TableFilterContext, TableFilterFields } from './table-filter-context'; - -export interface TableFilterProps<TData extends DefaultTData<TData>> { - column: Column<TData, unknown>; - rows: TableRow<TData>[]; -} - -const TableFilter = <TData extends DefaultTData<TData>>(props: TableFilterProps<TData>): JSX.Element | null => { - const { column, rows } = props; - const [open, setOpen] = React.useState(false); - const { getLabel } = useLabels(); - const inputType = column.columnDef.filterFn; - const filterValue = column.getFilterValue(); - - const isText = (value: unknown): value is string => { - return typeof value === 'string'; - }; - - const isMultiSelect = (value: unknown): value is string[] => { - return Array.isArray(value); - }; - - const isDateRange = (value: unknown): value is DateRangeFilterValues => { - return typeof value === 'object' && value !== null && ('from' in value || 'to' in value); - }; - - const values: TableFilterFields = React.useMemo( - () => ({ - filter: (inputType === 'auto' || inputType === 'text') && isText(filterValue) ? filterValue : '', - selectField: inputType === 'select' && isText(filterValue) ? filterValue : '', - multiSelectField: inputType === 'multi-select' && isMultiSelect(filterValue) ? filterValue : [], - dateRange: - ['date-range', 'date-range-period'].includes(inputType as keyof FilterFns) && isDateRange(filterValue) - ? filterValue - : { from: null, to: null }, - }), - [inputType, filterValue] - ); - - const renderFilter = () => { - switch (inputType) { - case 'date-range': - case 'date-range-period': - return <TableDateFilter />; - case 'multi-select': - case 'select': - return <TableSelectFilter />; - default: - return <TableTextFilter />; - } - }; - - return ( - <TableFilterContext.Provider value={{ column, rows, values, open, setOpen }}> - <Col width="auto"> - <TooltipProvider - openWith="click" - open={open} - onToggle={setOpen} - focusManager={{ order: ['content'], initialFocus: 0, modal: true }} - > - <TooltipTrigger> - <Button - visualType="link" - icon={{ - filled: !!column.getFilterValue() || open, - name: 'filter_alt', - className: cn(styles['filter__icon'], { - [styles['filter__icon--active']]: !!column.getFilterValue() || open, - }), - }} - className={cn(styles['filter__button'], 'show-print')} - > - <span className="sr-only">{getLabel('table.filter')}</span> - </Button> - </TooltipTrigger> - <Tooltip maxWidth="large" cardProps={{ padding: { horizontal: 1, vertical: 0.5 } }}> - {renderFilter()} - </Tooltip> - </TooltipProvider> - </Col> - </TableFilterContext.Provider> - ); -}; - -export default TableFilter; diff --git a/libs/react-components/src/community/components/table/components/table-layout/table-layout.tsx b/libs/react-components/src/community/components/table/components/table-layout/table-layout.tsx deleted file mode 100644 index 59c8906d8..000000000 --- a/libs/react-components/src/community/components/table/components/table-layout/table-layout.tsx +++ /dev/null @@ -1,279 +0,0 @@ -import { flexRender, Header, HeaderGroup, Row as TSRow, SortDirection } from '@tanstack/react-table'; -import cn from 'classnames'; -import React from 'react'; - -import { Col, Row } from '../../../../../tedi/components/layout/grid'; -import Print from '../../../../../tedi/components/misc/print/print'; -import { useLabels } from '../../../../../tedi/providers/label-provider'; -import Button from '../../../button/button'; -import Placeholder from '../../../placeholder/placeholder'; -import styles from '../../table.module.scss'; -import { DefaultTData } from '../../table.types'; -import { ITableContext, TableContext } from '../../table-context'; -import TableFilter from '../table-filter/table-filter'; -import TableLoader from '../table-loader/table-loader'; - -const TableLayout = <TData extends DefaultTData<TData>>(): JSX.Element | null => { - const { getLabel } = useLabels(); - const { - table, - id, - caption, - renderSubComponent, - isFooterVisible, - renderGroupHeading, - onRowClick, - isLoading, - isError, - hideRowBorder, - placeholder, - errorPlaceholder, - size, - } = React.useContext<ITableContext<TData>>(TableContext); - - if (table === null) { - return null; - } - - const { getHeaderGroups, getFooterGroups, getRowModel } = table; - - const getSortIcon = (sortingDirection: false | SortDirection, cb?: (event: unknown) => void): JSX.Element => { - const sortingLabel = getLabel('table.sort', sortingDirection); - const SortIconBEM = cn(styles['sort__icon'], { - [styles['sort__icon--active']]: !!sortingDirection, - [styles['sort__icon--desc']]: sortingDirection === 'desc', - [styles['sort__icon--asc']]: sortingDirection === 'asc', - }); - return ( - <Print visibility="show"> - <Button - visualType="link" - icon={{ - name: sortingDirection ? 'expand_more' : 'unfold_more', - className: SortIconBEM, - }} - className={cn(styles['sort__button'])} - onClick={cb} - > - <span className="sr-only">{sortingLabel}</span> - </Button> - </Print> - ); - }; - - const footerColSpan = (headers: Header<TData, unknown>[]) => { - const index = headers?.findIndex((h) => h.column.columnDef.footer); - - return (index !== -1 ? index : headers?.length) + 1; - }; - - const groupedRows = (): TSRow<TData>[] => { - let lastKey: string | undefined; - - // find rows that should be in a group - return getRowModel().rows.map((r, index) => { - const { rowGroupKey, ...rest } = r.original; - const newRow = (original: TData) => ({ - ...r, - original: { - ...original, - rowClassName: cn( - original.rowClassName, - styles['table__row--group-item'], - { [styles['table__row--last-group-item']]: getRowModel().rows[index + 1]?.original.rowGroupKey !== lastKey } // if row is last group item - ), - }, - }); - - if (rowGroupKey && lastKey !== rowGroupKey) { - lastKey = rowGroupKey; - // group headers - return newRow(r.original); - } else if (rowGroupKey) { - // group items - return newRow(rest as typeof r.original); - } - - lastKey = rowGroupKey; - return r; - }); - }; - - const handleRowClick = (row: TSRow<TData>) => { - row.original.onClick?.(row.original); - onRowClick?.(row.original); - }; - - const renderTableFilterSortRow = (header: Header<TData, unknown>): JSX.Element => ( - <Col width="auto"> - <Row justifyContent="end" alignItems="center" gutter={1}> - {header.column.getCanFilter() ? ( - <TableFilter<TData> column={header.column} rows={table?.getCoreRowModel()?.rows} /> - ) : null} - {header.column.getCanSort() && ( - <Col align="center" width="auto"> - {getSortIcon(header.column.getIsSorted(), header.column.getToggleSortingHandler())} - </Col> - )} - </Row> - </Col> - ); - - const renderPlaceholderRow = () => { - const children = isError ? <Placeholder {...errorPlaceholder} /> : <Placeholder {...placeholder} />; - - return ( - <tr> - <td colSpan={table?.getAllColumns().length}>{children}</td> - </tr> - ); - }; - - const renderRow = (row: TSRow<TData>) => { - /** - * Renders row with custom component if it is defined in row data - */ - const CustomRow = row.original.CustomRowComponent; - - return ( - <React.Fragment key={row.id}> - {row.original.rowGroupKey && ( - <Print breakAfter="avoid"> - <tr - className={cn( - row.original.rowClassName - ?.replace(styles['table__row--group-item'], '') - .replace(styles['table__row--last-group-item'], ''), - styles['table__row--group-header'], - { [styles['table__row--border-hidden']]: hideRowBorder } - )} - > - {renderGroupHeading ? ( - renderGroupHeading(row) - ) : ( - <td colSpan={row.getVisibleCells().length}>{row.original.rowGroupKey}</td> - )} - </tr> - </Print> - )} - {CustomRow ? ( - <Print breakInside="avoid"> - <CustomRow {...row} /> - </Print> - ) : ( - <Print breakInside="avoid"> - <tr - className={cn(row.original.rowClassName, { - [styles['table__row--clickable']]: !!row.original.onClick || !!onRowClick, - [styles['table__row--border-hidden']]: hideRowBorder, - })} - onClick={() => handleRowClick(row)} - > - {row.getVisibleCells().map((cell) => ( - <td - key={cell.id} - style={{ - width: cell.column.getSize(), - }} - className={cn({ - [styles['sticky-column']]: cell.column.getIsPinned(), - [styles['sticky-column--left']]: cell.column.getIsPinned() === 'left', - [styles['sticky-column--right']]: cell.column.getIsPinned() === 'right', - })} - > - {flexRender(cell.column.columnDef.cell, cell.getContext())} - </td> - ))} - </tr> - </Print> - )} - {row.getIsExpanded() && renderSubComponent ? ( - <Print breakBefore="avoid">{renderSubComponent?.(row)}</Print> - ) : null} - </React.Fragment> - ); - }; - - return ( - <table id={id}> - {caption && <caption className="sr-only">{caption}</caption>} - <thead> - {(getHeaderGroups() as HeaderGroup<TData>[]).map((headerGroup) => ( - <tr key={headerGroup.id}> - {headerGroup.headers.map((header) => ( - <th - scope="col" - key={header.id} - style={{ - width: header.getSize(), - }} - className={cn({ - [styles['th--sortable']]: header.column.getCanSort(), - [styles['sticky-column']]: header.column.getIsPinned(), - [styles['sticky-column--left']]: header.column.getIsPinned() === 'left', - [styles['sticky-column--right']]: header.column.getIsPinned() === 'right', - })} - aria-sort={ - header.column.getIsSorted() === 'asc' - ? 'ascending' - : header.column.getIsSorted() === 'desc' - ? 'descending' - : undefined - } - > - {header.isPlaceholder ? null : ( - <Row - gutter={size === 'small' ? 2 : undefined} - alignItems="center" - justifyContent="between" - wrap="nowrap" - > - <Col onClick={header.column.getToggleSortingHandler()}> - {flexRender(header.column.columnDef.header, header.getContext())} - </Col> - {(header.column.getCanFilter() || header.column.getCanSort()) && renderTableFilterSortRow(header)} - </Row> - )} - </th> - ))} - </tr> - ))} - </thead> - <tbody> - {isLoading ? ( - <TableLoader /> - ) : groupedRows()?.length ? ( - groupedRows().map((row) => renderRow(row)) - ) : ( - renderPlaceholderRow() - )} - </tbody> - {isFooterVisible && ( - <tfoot> - {getFooterGroups().map((footerGroup) => ( - <tr key={footerGroup.id}> - {footerGroup.headers.map((header, index) => - header.column.columnDef.footer ? ( - <th - scope="col" - key={header.id} - colSpan={footerColSpan(footerGroup.headers.slice(index + 1))} - className={cn({ - [styles['sticky-column']]: header.column.getIsPinned(), - [styles['sticky-column--left']]: header.column.getIsPinned() === 'left', - [styles['sticky-column--right']]: header.column.getIsPinned() === 'right', - })} - > - {header.isPlaceholder ? null : flexRender(header.column.columnDef.footer, header.getContext())} - </th> - ) : null - )} - </tr> - ))} - </tfoot> - )} - </table> - ); -}; - -export default TableLayout; diff --git a/libs/react-components/src/community/components/table/components/table-loader/table-loader.tsx b/libs/react-components/src/community/components/table/components/table-loader/table-loader.tsx deleted file mode 100644 index c57024a28..000000000 --- a/libs/react-components/src/community/components/table/components/table-loader/table-loader.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react'; - -import { SkeletonBlock } from '../../../../../tedi/components/loaders/skeleton'; -import { PAGE_SIZE_WITHOUT_PAGINATION } from '../../table'; -import { TableContext } from '../../table-context'; - -export const TableLoader = (): JSX.Element => { - const { table, loadingLabel } = React.useContext(TableContext); - // If table is without pagination, we want to show 10 rows as a placeholder when loading - const pageSize = table?.getState().pagination.pageSize || 10; - const loadingRowCount = pageSize === PAGE_SIZE_WITHOUT_PAGINATION ? 10 : pageSize; - - return ( - <> - <tr className="sr-only"> - <td>{loadingLabel}</td> - </tr> - {Array.from(Array(loadingRowCount).keys()).map((i) => ( - <tr key={i} aria-hidden={true}> - {Array.from(Array(table?.getAllColumns().length).keys()).map((j) => ( - <td key={j}> - <SkeletonBlock width={100} height={21} /> - </td> - ))} - </tr> - ))} - </> - ); -}; - -export default TableLoader; diff --git a/libs/react-components/src/community/components/table/index.ts b/libs/react-components/src/community/components/table/index.ts deleted file mode 100644 index d2c60b88d..000000000 --- a/libs/react-components/src/community/components/table/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './components/customize-table-cell/customize-table-cell'; -export * from './components/helpers'; -export * from './components/table-filter/filter-fn'; -export * from './table'; -export * from './table.types'; diff --git a/libs/react-components/src/community/components/table/table-context.tsx b/libs/react-components/src/community/components/table/table-context.tsx deleted file mode 100644 index c1f8af05c..000000000 --- a/libs/react-components/src/community/components/table/table-context.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { Table as TableType } from '@tanstack/table-core'; -import React from 'react'; - -import { IntentionalAny } from '../../types'; -import { DefaultTData, TableProps } from './table.types'; - -export interface ITableContext<TData extends DefaultTData<TData>> - extends Pick< - TableProps<TData>, - | 'id' - | 'isLoading' - | 'isError' - | 'hideRowBorder' - | 'caption' - | 'placeholder' - | 'errorPlaceholder' - | 'renderSubComponent' - | 'renderGroupHeading' - | 'onRowClick' - | 'size' - > { - table: TableType<TData> | null; - loadingLabel?: string; - isFooterVisible?: boolean; -} - -export const TableContext = React.createContext<ITableContext<IntentionalAny>>({ - isLoading: false, - isError: false, - table: null, - id: '', - hideRowBorder: false, -}); diff --git a/libs/react-components/src/community/components/table/table.module.scss b/libs/react-components/src/community/components/table/table.module.scss deleted file mode 100644 index 52c641dce..000000000 --- a/libs/react-components/src/community/components/table/table.module.scss +++ /dev/null @@ -1,169 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.table { - --table-bottom-border: 0.01px solid var(--color-border-contrast); - --table-cell-horizontal-padding: 0.875rem; - --table-cell-vertical-padding: 0.75rem; - --table-cell-padding: var(--table-cell-vertical-padding) var(--table-cell-horizontal-padding); - - // 0.01px fix https://bugs.chromium.org/p/chromium/issues/detail?id=1201762 - --table-row-border: 0.01px solid var(--color-border-default); - - width: 100%; - overflow-x: auto; -} - -.table > table { - width: 100%; - padding: 0; - border-spacing: 0; - border-collapse: collapse; - border: 0; - - @include mixins.table-cell-selector { - padding: var(--table-cell-padding); - } - - @include mixins.table-cell-selector(thead) { - font-weight: 400; - color: var(--color-text-muted); - text-align: left; - - @include mixins.print-grayscale; - - &.th--sortable { - cursor: pointer; - } - - .sort__button { - display: block; - } - - .sort__icon, - .filter__icon { - --icon-variation-size: 1.5rem; - - color: var(--color-text-subtle); - transition: 200ms ease; - transition-property: color; - - &:hover, - &--active { - color: var(--color-primary-main); - } - } - - .sort__icon--asc { - transform: rotate(180deg); - } - - .sort__icon--desc { - transition-duration: 600ms; - transition-property: transform; - transform: rotate(0); - } - } - - & > tbody > tr { - // 0.01px fix https://bugs.chromium.org/p/chromium/issues/detail?id=1201762 - border-top: var(--table-row-border); - - &:first-of-type { - border-color: var(--color-border-contrast); - } - - &:last-child { - border-bottom: var(--table-bottom-border); - } - - &.table__row--border-hidden { - --table-row-border: none; - --table-bottom-border: none; - } - - &.table__row--clickable:hover { - cursor: pointer; - background-color: var(--color-bg-subtle); - } - } - - @include mixins.table-cell-selector(tfoot) { - font-weight: normal; - text-align: left; - } -} - -.table--vertical-align-base-line > table { - @include mixins.table-cell-selector { - vertical-align: baseline; - } -} - -.table--hidden-bottom-border { - --table-bottom-border: none; -} - -.table--footer-bottom-border > table > tfoot > tr { - border-bottom: var(--table-bottom-border); -} - -.table--small { - --table-cell-vertical-padding: 0.25rem; - --table-cell-horizontal-padding: 0.5rem; -} - -.table__expand { - @include mixins.button-reset; -} - -.table__row--group-header { - --table-cell-padding: var(--table-cell-vertical-padding) var(--table-cell-horizontal-padding) 0; - - font-size: 0.875rem; - color: var(--color-text-muted); -} - -.table__row--group-item { - --table-row-border: none; - --table-cell-padding: 0 var(--table-cell-horizontal-padding); -} - -.table__row--last-group-item { - --table-cell-padding: 0 var(--table-cell-horizontal-padding) var(--table-cell-vertical-padding); -} - -.filter__content { - position: relative; - max-width: 20rem; - max-height: 16rem; - overflow: auto; -} - -.filter__button { - display: block; -} - -.filter__indeterminate { - position: sticky; - top: 0; - z-index: 1; - padding: 0.5rem 1rem 0.125rem; - margin: -1rem -1rem 0.5rem; - background: var(--color-bg-default); - border-bottom: 1px solid var(--color-border-default); -} - -.sticky-column { - position: sticky; - z-index: 1; - background-color: var(--color-bg-default); - opacity: 0.95; -} - -.sticky-column--left { - left: 0; -} - -.sticky-column--right { - right: 0; -} diff --git a/libs/react-components/src/community/components/table/table.stories.tsx b/libs/react-components/src/community/components/table/table.stories.tsx deleted file mode 100644 index 0c46470c6..000000000 --- a/libs/react-components/src/community/components/table/table.stories.tsx +++ /dev/null @@ -1,740 +0,0 @@ -import { faker } from '@faker-js/faker'; -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import { - ColumnDef, - ColumnFiltersState, - createColumnHelper, - PaginationState, - RowSelectionState, - SortingState, - VisibilityState, -} from '@tanstack/react-table'; -import dayjs from 'dayjs'; -import React from 'react'; - -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import { getBackgroundColorClass } from '../../helpers/background-colors/background-colors'; -import { IntentionalAny } from '../../types'; -import Anchor from '../anchor/anchor'; -import { Card, CardContent } from '../card'; -import Check from '../form/check/check'; -import Status from '../status/status'; -import Tag from '../tag/tag'; -import Heading from '../typography/heading/heading'; -import { CustomExpandRowExample } from './components/examples/custom-expand-row'; -import { - CustomizeTableCell, - getExpandColumn, - getRowSelectionColumn, - useDefaultPagination, - useDefaultSorting, -} from './index'; -import Table from './table'; -import { TableProps } from './table.types'; - -const meta: Meta<typeof Table> = { - component: Table, - title: 'Community/Table', - argTypes: { - data: { - control: false, - }, - }, -}; - -export default meta; -type Story = StoryObj<TableProps<Person>>; - -faker.seed(123); - -type Person = { - id: string; - firstName: string; - lastName: string; - personName: string; - age: number; - visits: number; - status: 'Single' | 'In Relationship' | 'Complicated'; - progress: number; - subRows?: Person[]; - rowClassName?: string; - rowGroupKey?: string; - dateOfBirth: string; - employment: { - startDate: string; - endDate: string; - }; -}; - -function calculateAge(birthday: Date) { - const ageDifMs = Date.now() - birthday.getTime(); - const ageDate = new Date(ageDifMs); - return Math.abs(ageDate.getUTCFullYear() - 1970); -} - -const createRandomPerson = (isSubRow: boolean): Person => { - const employmentStart = faker.date.past(); - - return { - id: faker.database.mongodbObjectId(), - firstName: faker.person.firstName(), - lastName: faker.person.lastName(), - personName: faker.person.fullName(), - age: calculateAge(faker.date.birthdate()), - visits: Number(faker.number.int(99)), - status: faker.helpers.arrayElement(['Single', 'Complicated', 'In Relationship']), - progress: faker.number.int({ min: 0, max: 100 }), - subRows: isSubRow - ? undefined - : faker.helpers.maybe( - () => faker.helpers.arrayElements(Array.from(Array(5).keys()).map(() => createRandomPerson(true))), - { - probability: 0.2, - } - ), - dateOfBirth: faker.date.past().toISOString(), - employment: { - startDate: employmentStart.toISOString(), - endDate: dayjs(employmentStart).add(5, 'days').toISOString(), - }, - }; -}; - -const data = (length = 507): Person[] => Array.from(Array(length).keys()).map(() => createRandomPerson(false)); - -const columnHelper = createColumnHelper<Person>(); - -const columns: ColumnDef<Person, IntentionalAny>[] = [ - columnHelper.accessor((row) => `${row.firstName} ${row.lastName}`, { - id: 'personName', - cell: (info) => { - return <Anchor href="#">{`${info.row.original.firstName} ${info.row.original.lastName}`}</Anchor>; - }, - header: () => 'Child', - sortingFn: (a, b) => { - return `${a.original.firstName} ${a.original.lastName}`.localeCompare( - `${b.original.firstName} ${b.original.lastName}` - ); - }, - }), - columnHelper.accessor((row) => `${row.age}`, { - id: 'age', - header: () => 'Age', - cell: (info) => info.renderValue(), - }), - columnHelper.accessor((row) => `${row.visits}`, { - header: () => <span>Visits</span>, - id: 'visits', - }), - columnHelper.accessor('status', { - header: 'Status', - cell: (info) => ( - <Status type={info.row.original.status === 'In Relationship' ? 'success' : 'inactive'}> - {info.renderValue()} - </Status> - ), - enableColumnFilter: false, - }), - columnHelper.accessor('progress', { - header: 'Profile Progress', - enableColumnFilter: false, - }), -]; - -const columnsWithFooter = [ - ...columns.slice(0, 1).map((c) => ({ ...c, footer: () => <strong>Average profile progress</strong> } as typeof c)), - ...columns.slice(1, 4), - ...columns.slice(4).map( - (c) => - ({ - ...c, - footer: (info) => { - const rows = info.table.getRowModel()?.rows; - const sum = rows?.reduce((a, c) => a + c.original.progress, 0); - return Math.round((sum / rows?.length) * 10) / 10; - }, - } as typeof c) - ), -]; - -const CardTemplate: StoryFn<TableProps<Person>> = (args) => ( - <Card> - <CardContent> - <VerticalSpacing> - <Heading>Table header</Heading> - <Table<Person> {...args} className="sb-unstyled" /> - </VerticalSpacing> - </CardContent> - </Card> -); - -export const Default: Story = { - args: { - data: data(), - columns, - id: 'table-1', - }, -}; - -export const Borderless: Story = { - render: CardTemplate, - - args: { - data: data(), - columns, - id: 'table-borderless', - hideCardBorder: true, - }, -}; - -export const RowsBorderless: Story = { - args: { - data: data(10), - columns: columns.map((column) => ({ ...column, enableSorting: false })), - id: 'borderless-table', - hidePagination: true, - hideRowBorder: true, - hideCardBorder: true, - }, -}; - -export const Loading: Story = { - args: { - data: [], - columns: columns, - id: 'table-loading', - isLoading: true, - }, -}; - -export const LoadingBorderless: Story = { - render: CardTemplate, - - args: { - data: [], - columns: columns, - id: 'table-loading-borderless', - cardProps: { - borderless: true, - }, - isLoading: true, - }, -}; - -export const LoadingWithoutPagination: Story = { - render: CardTemplate, - - args: { - data: [], - columns: columns, - id: 'table-loading-without-pagination', - isLoading: true, - hidePagination: true, - }, -}; - -export const Error: Story = { - args: { - data: [], - columns, - id: 'error-table', - isError: true, - }, -}; - -export const FullWidthSubComponent: Story = { - args: { - data: data(), - columns: [getExpandColumn(), ...columns], - renderSubComponent: (row) => { - return ( - <tr> - <td colSpan={row.getVisibleCells().length}> - <VerticalSpacing> - <Heading>{`${row.original.firstName} ${row.original.lastName}`}</Heading> - <p> - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et - dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip - ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu - fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia - deserunt mollit anim id est laborum. - </p> - </VerticalSpacing> - </td> - </tr> - ); - }, - getRowCanExpand: (row) => row.index % 4 !== 0, - id: 'table-2', - }, -}; - -export const WithSubComponent: Story = { - args: { - data: data(), - columns: [getExpandColumn(), ...columns], - renderSubComponent: (_row) => { - return ( - <tr> - <td></td> - <td colSpan={2}> - <div className="text-bold">Trainings</div> - <div>Firs trainging with long title</div> - <div>Second training</div> - <div>Third training</div> - </td> - <td colSpan={2}> - <div className="text-bold">Lorem ipsum</div> - <div>Lorem ipsum dolor sit amet</div> - <div>Lorem ipsum dolor sit amet</div> - <div>Lorem ipsum dolor sit amet</div> - </td> - <td> - <Tag type="secondary">Active</Tag> - </td> - </tr> - ); - }, - getRowCanExpand: (row) => row.index % 4 !== 0, - id: 'table-3', - }, -}; - -/** - * It's recommended to use getRowId when using row selection to ensure correct row selection state with server side pagination/filtering. <br /> - * When using select all toggle and serverSide pagination bear in mind that all rows are not loaded at once and select all will only select the rows that are in current page. - */ -export const RowSelection: Story = { - args: { - data: data(), - columns: [getRowSelectionColumn('test', true), ...columns], - id: 'row-selection-table', - getRowId: (row) => row.id, - }, -}; - -/** - * Row selection can be controlled from outside by passing 'rowSelection' and 'onRowSelectionChange' props. 'rowSelection' is an object with row id as key and boolean as value. <br /> - * enableRowSelection is a function that is called for each row to determine if row can be selected. @defaults to true <br /> - */ -export const RowSelectionControlledFromOutside: Story = { - args: { - data: data(), - columns: [getRowSelectionColumn('test-2', true), ...columns], - id: 'row-selection-table-outside', - getRowId: (row) => row.id, - enableRowSelection: (row) => row.original.age > 40, - }, - render: (args) => { - const [rowSelection, setRowSelection] = React.useState<RowSelectionState>({}); - - return ( - <Table - {...args} - rowSelection={rowSelection} - onRowSelectionChange={(rowSelection) => setRowSelection(rowSelection)} - /> - ); - }, -}; - -export const WithSubRow: Story = { - args: { - data: data(), - columns: [getExpandColumn(), ...columns], - id: 'table-4', - getRowCanExpand: (row) => !!row.original.subRows?.length, - }, -}; - -/** - * `<CustomizeTableCell>` component allows us to modify the td element in the table. - * It allows us to add custom classNames or change vertical alignment. - */ -export const WithCustomizedCells: Story = { - args: { - data: data(), - columns: [ - columnHelper.accessor('firstName', { - id: 'personName', - cell: (info) => ( - <CustomizeTableCell className={getBackgroundColorClass('primary-highlight')}> - <Anchor href="#">{`${info.row.original.firstName} ${info.row.original.lastName}`}</Anchor> - </CustomizeTableCell> - ), - header: () => 'Child', - }), - ...columns.slice(1), - ], - id: 'table-5', - }, -}; - -export const WithCustomizedRows: Story = { - args: { - data: data().map((entity) => ({ - ...entity, - rowClassName: entity.status === 'In Relationship' ? getBackgroundColorClass('primary-highlight') : '', - })), - columns: [getExpandColumn(), ...columns], - id: 'table-6', - }, -}; - -const clickableRowColumns = [...columns]; -clickableRowColumns[0] = columnHelper.accessor((row) => `${row.firstName} ${row.lastName}`, { - id: 'personName', - header: () => 'Child', -}); -clickableRowColumns.push( - columnHelper.accessor((row) => `${row.firstName}-${row.age}`, { - id: 'view', - cell: () => ( - <Anchor - iconLeft="visibility" - visualType="link" - href="#" - onClick={(e: React.MouseEvent<HTMLAnchorElement>) => { - e.stopPropagation(); - console.log('Clicking link in cell. Row click is not called'); - }} - > - Vaata - </Anchor> - ), - header: () => <span className="visually-hidden">Open profile</span>, - enableSorting: false, - }) -); - -export const WithClickableRows: Story = { - args: { - data: data(), - onRowClick: (row: Person) => console.log(row), - columns: clickableRowColumns, - id: 'clickable-rows-table', - }, -}; - -export const ServerSidePaginationAndSorting = (): JSX.Element => { - const { page, pagination, setPagination, size } = useDefaultPagination(); - const { sorting, setSorting } = useDefaultSorting(); - - const currentData = data(500); - const getData = React.useMemo(() => currentData.slice((page - 1) * size, page * size), [currentData, page, size]); - - return ( - <Table<Person> - columns={columns} - data={getData} - id="table-pagination" - pagination={pagination} - sorting={sorting} - totalRows={currentData.length} - onPaginationChange={setPagination} - onSortingChange={setSorting} - /> - ); -}; - -export const Small: Story = { - args: { - data: data(), - columns, - id: 'small-table', - size: 'small', - }, -}; - -/** - * Grouped rows render a group header row and make grouped rows more compact. Rows, that match `groupRowsBy` condition, are grouped in place of first occurrence without modifying the order of rest of the data. - */ -export const GroupedRows: Story = { - args: { - data: data(50), - columns, - id: 'grouped-rows-table', - cardProps: { - padding: 1, - }, - enableSorting: false, - groupRowsBy: 'status', - renderGroupHeading: (row) => ( - <td> - <span className="sr-only">Status group: </span> - <span>{row.original.rowGroupKey}</span> - </td> - ), - }, -}; - -/** - * Row grouping can also be achieved by having rowGroupKey in data objects. It is possible to group only some of the rows. - */ -export const GroupedRowsFromData: Story = { - args: { - data: data(50).map((entity, _index) => ({ - ...entity, - rowGroupKey: - entity.age < 10 - ? '0 - 9' - : entity.age >= 10 && entity.age < 30 - ? '10 - 29' - : entity.age >= 30 && entity.age < 100 - ? '30 - 99' - : undefined, - })), - columns, - id: 'grouped-rows-from-data-table', - cardProps: { - padding: 1, - }, - enableSorting: false, - renderGroupHeading: (row) => <td>Age group: {row.original.rowGroupKey}</td>, - }, -}; - -export const Empty: Story = { - args: { - data: [], - columns, - id: 'empty-table', - placeholder: { - children: 'Table is empty', - }, - }, -}; - -export const WithFilters: Story = { - args: { - data: data(), - columns, - id: 'with-filters-table', - enableFilters: true, - }, -}; - -export const WithSelectFilters: Story = { - args: { - data: data(), - columns: columns.map((column) => ({ ...column, filterFn: 'select' })), - id: 'with-selected-filters-table', - enableFilters: true, - }, -}; - -export const WithMultiSelectFilters: Story = { - args: { - data: data(), - columns: columns.map((column) => ({ ...column, filterFn: 'multi-select' })), - id: 'with-multi-selected-filters-table', - enableFilters: true, - }, -}; - -export const WithDateFilters: Story = { - args: { - data: data(), - columns: [ - columnHelper.accessor((row) => `${row.firstName} ${row.lastName}`, { - id: 'personName', - cell: (info) => { - return <Anchor href="#">{`${info.row.original.firstName} ${info.row.original.lastName}`}</Anchor>; - }, - header: () => 'Child', - enableColumnFilter: false, - }), - columnHelper.accessor('dateOfBirth', { - header: () => 'Date of Birth', - cell: (info) => `${dayjs(info.row.original.dateOfBirth).format('DD.MM.YYYY')}`, - filterFn: 'date-range', - meta: { - startDatePicker: { - disableFuture: true, - }, - }, - }), - // Accessor value must be in the format { from: Dayjs | Date | string | null | undefined, to: Dayjs | Date | string | null | undefined } - columnHelper.accessor((row) => ({ from: row.employment.startDate, to: row.employment.endDate }), { - id: 'employment', - header: () => 'Period of Employment', - cell: (info) => - `${dayjs(info.row.original.employment.startDate).format('DD.MM')} - ${dayjs( - info.row.original.employment.endDate - ).format('DD.MM.YYYY')}`, - filterFn: 'date-range-period', - meta: { - startDatePicker: { - disableFuture: true, - }, - }, - sortingFn: ({ original: a }, { original: b }) => - dayjs(a.employment.endDate).isAfter(dayjs(b.employment.endDate)) ? 1 : -1, - }), - columnHelper.accessor('status', { - header: 'Status', - cell: (info) => ( - <Status type={info.row.original.status === 'In Relationship' ? 'success' : 'inactive'}> - {info.renderValue()} - </Status> - ), - enableColumnFilter: false, - }), - columnHelper.accessor('progress', { - header: 'Profile Progress', - enableColumnFilter: false, - }), - ], - id: 'with-date-filters-table', - enableFilters: true, - }, -}; - -/** - * Filters can be controlled from outside by passing 'columnFilters' and 'onColumnFiltersChange' props. 'columnFilters' is an array of objects with 'id' and 'value' properties. 'id' is the column id and 'value' is an array of selected values.<br /> - * 'onColumnFiltersChange' is a function that is called when filters are changed. It receives an array of objects with 'id' and 'value' properties. <br /> - * To customize column filter choiceGroup items pass meta.filterOptions to ColumnDef. It is an array of ChoiceGroupItems or string. - */ -export const WithFiltersControlledFromOutside: Story = { - args: { - id: 'with-multi-selected-filters-table-controlled-from-outside', - data: data(), - columnFilters: [{ id: 'age', value: ['1', '10'] }], - onColumnFiltersChange: (data) => console.log(data), - columns: columns.map((column) => ({ - ...column, - filterFn: 'multi-select', - meta: { - filterOptions: data() - .map((row) => row[column.id as keyof Person]) - .slice(0, 5) - .map((value) => ({ value, label: `${value}-label`, id: `${value}-filter` })), - }, - })) as ColumnDef<Person, IntentionalAny>[], - enableFilters: true, - }, -}; - -/** - * Entire table sorting/pagination/filtering/columnVisibility state can be stored outside the component.<br /> - * If you don't want to sort/paginate/filter the data yourself, you can set `manualFiltering={false}`, `manualSorting={false}` and `manualPagination={false}`.<br /> - * This way you have control of the table sorting/pagination/filtering state, but don't have to write your own logic for parsing the data. - */ -export const TableStateControlledFromOutside: Story = { - args: { - id: 'table-controlled-from-outside', - data: data(), - columns: columns.map((column) => ({ - ...column, - filterFn: 'multi-select', - meta: { - filterOptions: data() - .map((row) => row[column.id as keyof Person]) - .slice(0, 5) - .map((value) => ({ value, label: `${value}-label`, id: `${value}-filter` })), - }, - })) as ColumnDef<Person, IntentionalAny>[], - enableFilters: true, - }, - render: (args) => { - const [filters, setFilters] = React.useState<ColumnFiltersState>([]); - const [sorting, setSorting] = React.useState<SortingState>([]); - const [pagination, setPagination] = React.useState<PaginationState>({ pageIndex: 0, pageSize: 5 }); - const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({ - personName: true, - }); - - return ( - <VerticalSpacing> - <Check - id="hide-child" - label="Show child column" - value="hide-child" - name="hide-child" - checked={columnVisibility.personName} - onChange={(_, checked) => setColumnVisibility((prevState) => ({ ...prevState, ...{ personName: checked } }))} - /> - <Table - {...args} - manualFiltering={false} - manualSorting={false} - manualPagination={false} - columnFilters={filters} - sorting={sorting} - pagination={pagination} - onColumnFiltersChange={setFilters} - onSortingChange={setSorting} - onPaginationChange={setPagination} - columnVisibility={columnVisibility} - onColumnVisibilityChange={setColumnVisibility} - /> - </VerticalSpacing> - ); - }, -}; - -/** - * Sorting can be disabled for all columns using `<Table enableSorting={false} />` or by defining `enableSorting: false` in individual column. - */ -export const DisableSorting: Story = { - args: { - data: data(), - columns, - id: 'disabled-sort-table', - enableSorting: false, - }, -}; - -/** - * Default column visibility can be controlled by passing `defaultColumnVisibility` prop. It is an objects with key-value pairs where key is the column id and value is a boolean. - * By default all columns are visible. - * Can be used when you want to hide some columns on some use cases, when rendering table. - */ -export const ColumnVisibility: Story = { - args: { - data: data(), - columns, - id: 'disabled-sort-table', - defaultColumnVisibility: { - personName: false, - }, - }, -}; - -export const WithFooter: Story = { - args: { - id: 'footer-table', - hidePagination: true, - data: data(10), - columns: columnsWithFooter, - }, -}; - -export const WithFooterAndPagination: Story = { - args: { - id: 'footer-table', - data: data(), - columns: columnsWithFooter, - }, -}; - -export { CustomExpandRowExample }; - -/** - * Column pinning can be controlled from outside by passing 'columnPinning' prop. - * 'columnPinning' is an object with 'left' and 'right' properties, each containing an array of column ids to be pinned. - * 'onColumnPinningChange' is a function that is called when pinning is changed. - * Can be used to control column pinning and make them sticky to the left or right side of the table. - */ - -export const WithColumnPinning: Story = { - args: { - data: data(), - columns, - id: 'table-with-column-pinning', - columnPinning: { - left: ['personName'], - right: ['age'], - }, - }, -}; diff --git a/libs/react-components/src/community/components/table/table.tsx b/libs/react-components/src/community/components/table/table.tsx deleted file mode 100644 index 3e770cc82..000000000 --- a/libs/react-components/src/community/components/table/table.tsx +++ /dev/null @@ -1,323 +0,0 @@ -import { - ColumnFiltersState, - ColumnPinningState, - ExpandedState, - getCoreRowModel, - getExpandedRowModel, - getFilteredRowModel, - getPaginationRowModel, - getSortedRowModel, - HeaderGroup, - PaginationState, - RowSelectionState, - SortingState, - Updater, - useReactTable, - VisibilityState, -} from '@tanstack/react-table'; -import cn from 'classnames'; -import React from 'react'; - -import { usePrint } from '../../../tedi/helpers'; -import { useLabels } from '../../../tedi/providers/label-provider'; -import { IntentionalAny } from '../../types'; -import { Card, CardContent } from '../card'; -import { PlaceholderProps } from '../placeholder/placeholder'; -import Pagination from './components/pagination/pagination'; -import { - dateRangeFilterFn, - dateRangePeriodFilterFn, - mapFilterFn, - multiSelectFilterFn, - selectFilterFn, - textFilterFn, -} from './components/table-filter/filter-fn'; -import TableLayout from './components/table-layout/table-layout'; -import styles from './table.module.scss'; -import { DefaultTData, TableProps } from './table.types'; -import { TableContext } from './table-context'; - -export const PAGE_SIZE_WITHOUT_PAGINATION = 10000; -const emptyData: IntentionalAny[] = []; - -export function Table<TData extends DefaultTData<TData>>(props: TableProps<TData>): JSX.Element { - const { getLabel } = useLabels(); - const { - id, - data: externalData, - columns, - caption, - columnFilters: columnFiltersOuter, - onColumnFiltersChange, - cardProps: { padding: cardPadding = 0, ...restCardProps } = {}, - hidePagination, - defaultPagination = { - pageIndex: 0, - pageSize: hidePagination ? PAGE_SIZE_WITHOUT_PAGINATION : 10, // when pagination is hidden display all the rows - }, - pagination, - manualPagination = !!props.pagination, - manualSorting = !!props.sorting, - manualFiltering = !!props.columnFilters, - sorting: sortingOuter, - defaultSorting = [], - defaultExpanded = {}, - autoResetPageIndex, - onPaginationChange, - onSortingChange, - rowSelection: rowSelectionOuter, - onRowSelectionChange, - enableRowSelection, - defaultColumnVisibility = {}, - columnVisibility: columnVisibilityOuter, - onColumnVisibilityChange, - columnPinning: columnPinningOuter, - onColumnPinningChange, - getRowId, - onRowClick, - defaultRowSelection, - totalRows, - renderSubComponent, - getRowCanExpand, - groupRowsBy, - renderGroupHeading, - isLoading = false, - isError = false, - placeholder, - errorPlaceholder, - loadingLabel = getLabel('table.loading'), - verticalAlign = 'middle', - enableFilters = false, - enableSorting = true, - hideRowBorder = false, - size = 'medium', - hideCardBorder, - ...rest - } = props; - - // we need to memoize the data when it is an empty array or undefined to prevent infinite renders - // https://github.com/TanStack/table/issues/4240 - // https://github.com/TanStack/table/issues/4566 - const data = React.useMemo(() => (externalData?.length ? externalData : emptyData) ?? emptyData, [externalData]); - const isPrinting = usePrint(); - const [{ pageIndex, pageSize }, setPagination] = React.useState<PaginationState>(defaultPagination); - const [sorting, setSorting] = React.useState<SortingState>(defaultSorting); - const [expanded, setExpanded] = React.useState<ExpandedState>(defaultExpanded); - const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(defaultRowSelection || {}); - const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([]); - const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>(defaultColumnVisibility); - const [columnPinning, setColumnPinning] = React.useState<ColumnPinningState>({ - left: [], - right: [], - }); - - // during printing expand subRows/subComponents - const getExpanded = React.useMemo(() => (isPrinting ? true : expanded), [expanded, isPrinting]); - - const getPagination = React.useMemo(() => { - // If pagination is controlled outside, don't use local state - return pagination || { pageIndex, pageSize }; - }, [pageIndex, pageSize, pagination]); - - const getSorting = React.useMemo(() => { - // If sorting is controlled outside, don't use local state - return sortingOuter || sorting; - }, [sorting, sortingOuter]); - - const getColumnFilter = React.useMemo(() => { - // If filtering is controlled outside, don't use local state - return columnFiltersOuter || columnFilters; - }, [columnFilters, columnFiltersOuter]); - - const getRowSelection = React.useMemo(() => { - // If row selection is controlled outside, don't use local state - return rowSelectionOuter || rowSelection; - }, [rowSelection, rowSelectionOuter]); - - const getColumnVisibility = React.useMemo(() => { - // If columnVisibility is controlled outside, don't use local state - return columnVisibilityOuter || columnVisibility; - }, [columnVisibility, columnVisibilityOuter]); - - const getColumnPinning = React.useMemo(() => { - // If columnPinning is controlled outside, don't use local state - return columnPinningOuter || columnPinning; - }, [columnPinning, columnPinningOuter]); - - const handlePaginationChange = (data: Updater<PaginationState>): void => { - if (typeof data !== 'function') return; - const newData = data(getPagination); - pagination && onPaginationChange ? onPaginationChange(newData) : setPagination(newData); - }; - - const handleSortingChange = (data: Updater<SortingState>): void => { - if (typeof data !== 'function') return; - const newData = data(getSorting); - sortingOuter && onSortingChange ? onSortingChange(newData) : setSorting(newData); - }; - - const handleRowSelectionChange = (data: Updater<RowSelectionState>): void => { - if (typeof data !== 'function') return; - const newData = data(getRowSelection); - rowSelectionOuter && onRowSelectionChange ? onRowSelectionChange(newData) : setRowSelection(newData); - }; - - const handleColumnFilteringChange = (data: Updater<ColumnFiltersState>): void => { - if (typeof data !== 'function') return; - const newData = data(getColumnFilter); - columnFiltersOuter && onColumnFiltersChange ? onColumnFiltersChange(newData) : setColumnFilters(newData); - }; - - const handleColumnVisibilityChange = (data: Updater<VisibilityState>): void => { - if (typeof data !== 'function') return; - const newData = data(getColumnVisibility); - columnVisibilityOuter && onColumnVisibilityChange - ? onColumnVisibilityChange(newData) - : setColumnVisibility(newData); - }; - - const handleColumnPinningChange = (data: Updater<ColumnPinningState>): void => { - if (typeof data !== 'function') return; - const newData = data(getColumnPinning); - columnPinningOuter && onColumnPinningChange ? onColumnPinningChange(newData) : setColumnPinning(newData); - }; - - const groupedData = React.useMemo(() => { - // add rowGroupKey when using groupRowsBy - const groupList = - data?.map((r) => { - if (typeof groupRowsBy === 'string') { - return { ...r, rowGroupKey: r[groupRowsBy] }; - } else if (groupRowsBy) { - return { ...r, rowGroupKey: groupRowsBy(r) }; - } - - return r; - }) ?? []; - - // group rows with same rowGroupKeys but keep original array order - return groupList.reduce<{ keys: string[]; list: TData[] }>( - (a, c) => { - if (c.rowGroupKey && a.keys.includes(c.rowGroupKey)) { - return a; - } else if (c.rowGroupKey) { - a.keys = [...a.keys, c.rowGroupKey]; - a.list = [...a.list, ...groupList.filter((g) => g.rowGroupKey === c.rowGroupKey)]; - } else { - a.list = [...a.list, c]; - } - - return a; - }, - { keys: [], list: [] } - ).list; - }, [data, groupRowsBy]); - - const table = useReactTable({ - data: groupedData, - columns, - state: { - rowSelection: getRowSelection, - columnFilters: getColumnFilter, - pagination: getPagination, - sorting: getSorting, - expanded: getExpanded, - columnVisibility: getColumnVisibility, - columnPinning: getColumnPinning, - }, - manualSorting: manualSorting, - manualFiltering: manualFiltering, - pageCount: pagination && totalRows ? Math.ceil(totalRows / pagination.pageSize) : undefined, - autoResetPageIndex: autoResetPageIndex, - onRowSelectionChange: handleRowSelectionChange, - enableRowSelection, - onExpandedChange: setExpanded, - onPaginationChange: handlePaginationChange, - onSortingChange: handleSortingChange, - onColumnFiltersChange: handleColumnFilteringChange, - onColumnVisibilityChange: handleColumnVisibilityChange, - onColumnPinningChange: handleColumnPinningChange, - getCoreRowModel: getCoreRowModel(), - getSortedRowModel: getSortedRowModel(), - getPaginationRowModel: getPaginationRowModel(), - getFilteredRowModel: getFilteredRowModel(), - getExpandedRowModel: getExpandedRowModel(), - getRowCanExpand, - getSubRows: (row) => row.subRows, - manualPagination: manualPagination, - enableFilters, - enableSorting, - getRowId, - filterFns: { - text: (row, id, value) => mapFilterFn(row, id, value, textFilterFn), - select: (row, id, value) => mapFilterFn(row, id, value, selectFilterFn), - 'multi-select': (row, id, value) => mapFilterFn(row, id, value, multiSelectFilterFn), - 'date-range': (row, id, value) => mapFilterFn(row, id, value, dateRangeFilterFn), - 'date-range-period': (row, id, value) => mapFilterFn(row, id, value, dateRangePeriodFilterFn), - }, - }); - - const isFooterVisible = !!(table.getFooterGroups() as HeaderGroup<TData>[]).find( - (g) => !!g.headers.find((h) => h.column.columnDef.footer) - ); - - const hideBottomBorder = !!(!hideCardBorder && hidePagination && !isFooterVisible); - const showFooterBorder = !hideRowBorder && isFooterVisible && !hidePagination; - - const tableBEM = cn(styles['table'], styles[`table--vertical-align-${verticalAlign}`], styles[`table--${size}`], { - [styles['table--hidden-bottom-border']]: hideBottomBorder, - [styles['table--footer-bottom-border']]: showFooterBorder, - }); - - const getPlaceholderProps = (type: 'error' | 'empty', props?: PlaceholderProps) => { - const { - children: placeholderChildren = getLabel(`table.${type}`), - isNested: placeholderIsNested = true, - icon: placeholderIcon = type === 'error' ? 'error' : undefined, - cardProps: { padding: placeholderCardPropsPadding = 1, ...restPlaceholderCardProps } = {}, - ...restPlaceholder - } = props || { cardProps: {} }; - - return { - children: placeholderChildren, - isNested: placeholderIsNested, - icon: placeholderIcon, - cardProps: { padding: placeholderCardPropsPadding, ...restPlaceholderCardProps }, - ...restPlaceholder, - }; - }; - - return ( - <TableContext.Provider - value={{ - table, - id, - caption, - onRowClick, - renderSubComponent, - isFooterVisible, - renderGroupHeading, - placeholder: getPlaceholderProps('empty', placeholder), - errorPlaceholder: getPlaceholderProps('error', errorPlaceholder), - loadingLabel, - isLoading, - isError, - hideRowBorder, - size, - }} - > - <Card data-name="table" {...rest} borderless={hideCardBorder} padding={cardPadding} {...restCardProps}> - <CardContent> - <div className={tableBEM}> - <TableLayout<TData> /> - </div> - {!hidePagination && table && ( - <Pagination<TData> totalRows={totalRows || table.getFilteredRowModel().rows.length} /> - )} - </CardContent> - </Card> - </TableContext.Provider> - ); -} - -export default Table; diff --git a/libs/react-components/src/community/components/table/table.types.ts b/libs/react-components/src/community/components/table/table.types.ts deleted file mode 100644 index 6e0ba50f4..000000000 --- a/libs/react-components/src/community/components/table/table.types.ts +++ /dev/null @@ -1,307 +0,0 @@ -import { - ColumnDef, - ColumnFiltersState, - ColumnPinningState, - ExpandedState, - FilterFn, - PaginationState, - Row, - RowData, - RowSelectionState, - SortingState, - VisibilityState, -} from '@tanstack/react-table'; -import React from 'react'; - -import { IntentionalAny } from '../../types'; -import { CardProps } from '../card'; -import { ChoiceGroupItemProps } from '../form/choice-group'; -import { PlaceholderProps } from '../placeholder/placeholder'; -import { PickerOverridableProps } from './components/table-filter/components/table-date-filter'; - -declare module '@tanstack/table-core' { - interface FilterFns { - /** - * To filter out from text - */ - text: FilterFn<unknown>; - /** - * To filter out from select options - */ - select: FilterFn<unknown>; - /** - * To filter out from multi-select options - */ - 'multi-select': FilterFn<unknown>; - /** - * To filter out from date range (to - from) - */ - 'date-range': FilterFn<unknown>; - /** - * To filter out period from date range (to - from) - */ - 'date-range-period': FilterFn<unknown>; - } -} - -declare module '@tanstack/react-table' { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - interface ColumnMeta<TData extends RowData, TValue> { - /** - * Pass your own custom filterOptions to column.meta.filterOptions to override the default values. - * Used only when filterFn: 'select' - */ - filterOptions?: ChoiceGroupItemProps[] | string[]; - /** - * Pass selection of props to the start DatePicker. - * Used only when filterFn: 'date-range' | 'date-range-period' - */ - startDatePicker?: PickerOverridableProps; - /** - * Pass selection of props to the end DatePicker. - * Used only when filterFn: 'date-range' | 'date-range-period' - */ - endDatePicker?: PickerOverridableProps; - /** - * Unknown parameters - */ - [key: string]: IntentionalAny; - } -} - -export interface DefaultTData<TData> { - // To fix Type 'TableRowType' has no properties in common with type DefaultData<TableRowType> - [key: string]: IntentionalAny; - /** - * All row Subrows - */ - subRows?: TData[]; - /** - * Rows are grouped by this key - */ - rowGroupKey?: string; - /** - * Added to Row - */ - rowClassName?: string; - /** - * Custom row Component to render this row - */ - CustomRowComponent?: React.ComponentType<Row<TData>>; - /** - * Called when row is clicked - */ - onClick?: (row: TData) => void; -} - -export interface TableProps<TData extends DefaultTData<TData>> { - /** - * ID of table - */ - id: string; - /** - * Default table data. - * Should be memoized array - * @default [] - */ - data: TData[]; - /** - * Column object created with columnHelper - * https://tanstack.com/table/v8/docs/guide/column-defs - */ - columns: ColumnDef<TData, IntentionalAny>[]; - /** - * Table title for screen-readers - */ - caption?: string; - /** - * Additional classname - */ - className?: string; - /** - * Hide pagination - */ - hidePagination?: boolean; - /** - * Card props - */ - cardProps?: CardProps; - /** - * If internal pagination logic is ignored. If true, then pagination must be handled in the app. - * If omitted, then the value is inherited from `!!pagination` prop. - */ - manualPagination?: boolean; - /** - * If internal sorting logic is ignored. If true, then sorting must be handled in the app. - * If omitted, then the value is inherited from `!!sorting` prop. - */ - manualSorting?: boolean; - /** - * If internal filtering logic is ignored. If true, then filtering must be handled in the app. - * If omitted, then the value is inherited from `!!columnFilters` prop. - */ - manualFiltering?: boolean; - /** - * If set to true, pagination will be reset to the first page when page-altering state changes eg. data is updated, filters change, grouping changes, etc. - * This option defaults to false if manualPagination is set to true - * @default true - */ - autoResetPageIndex?: boolean; - /** - * Initial internal pagination state on render. This only applies when `pagination` prop is not defined. - */ - defaultPagination?: PaginationState; - /** - * Pagination data to server-side pagination use with `onPaginationChange` and `totalRows` - */ - pagination?: PaginationState; - /** - * Callback on Pagination data change. Use combined with `pagination` and `totalRows` props to make server-side pagination - */ - onPaginationChange?: (state: PaginationState) => void; - /** - * Initial internal sorting state on render. This only applies when `sorting` prop is not defined. - */ - defaultSorting?: SortingState; - /** - * Sorting data to server-side pagination use with onSortingChange - */ - sorting?: SortingState; - /** - * Callback on Sorting data change. Use combined with sorting prop to make server-side sorting. - */ - onSortingChange?: (state: SortingState) => void; - /** - * Sorting data to server-side pagination use with `onColumnFiltersChange` - */ - columnFilters?: ColumnFiltersState; - /** - * Callback on Sorting data change. Use combined with `columnFilters` prop to make server-side sorting. - */ - onColumnFiltersChange?: (state: ColumnFiltersState) => void; - /** - * Default selected rows - */ - defaultRowSelection?: RowSelectionState; - /** - * Row selection data use with `onRowSelectionChange`. - */ - rowSelection?: RowSelectionState; - /** - * Callback on row selection data change - */ - onRowSelectionChange?: (state: RowSelectionState) => void; - /** - * Enables/disables row selection for all rows in the table OR - * A function that given a row, returns whether to enable/disable row selection for that row - */ - enableRowSelection?: boolean | ((row: Row<TData>) => boolean); - /** - * Initial internal columnVisibility state on render. This only applies when `columnVisibility` prop is not defined. - */ - defaultColumnVisibility?: VisibilityState; - /** - * ColumnVisibility state, use with onColumnVisbilityChange - */ - columnVisibility?: VisibilityState; - /** - * Callback on column visibility change. Use combined with `columnVisibility` prop to hide/show columns. - */ - onColumnVisibilityChange?: (state: VisibilityState) => void; - /** - * Column pinning state, used to stick columns to the left or right side of the table - */ - columnPinning?: ColumnPinningState; - /** - * Callback on column pinning change - */ - onColumnPinningChange?: (state: ColumnPinningState) => void; - /** - * Called when row is clicked - */ - onRowClick?: (row: TData) => void; - /** - * This optional function is used to derive a unique ID for any given row. If not provided the rows index is used (nested rows join together with . using their grandparents' index eg. index.index.index). - * Its recommended to use Row ID when using row selection - */ - getRowId?: (originalRow: TData, index: number, parent?: Row<TData>) => string; - /** - * TotalRows - only needed to pass when server-side pagination is used. - */ - totalRows?: number; - /** - * Callback to render subComponent to expanded row. - * Component will be rendered inside `<tbody>` and spanned to whole row. - */ - renderSubComponent?: (row: Row<TData>) => React.ReactElement; - /** - * Initial internal expanding state on render. - */ - defaultExpanded?: ExpandedState; - /** - * Check if row can expand - */ - getRowCanExpand?: (row: Row<TData>) => boolean; - /** - * Is the table currently loading - */ - isLoading?: boolean; - /** - * Is the table currently in error state - * When true errorPlaceholder is displayed - */ - isError?: boolean; - /** - * Props for the `<PlaceholderBlock>` that is displayed when table is empty - */ - placeholder?: PlaceholderProps; - /** - * Props for the `<PlaceholderBlock>` that is displayed when table is in error state - */ - errorPlaceholder?: PlaceholderProps; - /** - * Label for the table loader skeleton - */ - loadingLabel?: string; - /** - * Controls cell padding to conserve space. - * Useful when nesting tables. - */ - size?: 'small' | 'medium'; - /** - * Group rows by key or comparison function that returns a group key. - */ - groupRowsBy?: Extract<keyof TData, string> | ((row: TData) => string); - /** - * Callback to render row groups header. - * Component will be rendered inside group headers `<tr>`. - * If omitted, then the `rowGroupKey` (inferred from `groupRowsBy`) value is rendered by default - */ - renderGroupHeading?: (row: Row<TData & Pick<DefaultTData<TData>, 'rowGroupKey'>>) => React.ReactElement; - /** - * Vertical align of columns - * @default 'middle - */ - verticalAlign?: 'base-line' | 'middle'; - /** - * Should table allow filtering columns. - * Defaults to false, because TableFilter is not yet final, and we cant add filtering to every table. - * @default false - */ - enableFilters?: boolean; - /** - * Should table allow sorting columns. - * When false then `enableSorting` in column props are ignored - * @default true - */ - enableSorting?: boolean; - /** - * Should show borders between rows. - * @default false - */ - hideRowBorder?: boolean; - /** - * Should hide card border. Over-ridden with `cardProps` - */ - hideCardBorder?: boolean; -} diff --git a/libs/react-components/src/community/components/tabs/index.ts b/libs/react-components/src/community/components/tabs/index.ts deleted file mode 100644 index 227b4c7f3..000000000 --- a/libs/react-components/src/community/components/tabs/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './tabs/tabs'; -export * from './tabs-item/tabs-item'; -export * from './tabs-nav/tabs-nav'; -export * from './tabs-nav/tabs-nav-item'; diff --git a/libs/react-components/src/community/components/tabs/tabs-context.tsx b/libs/react-components/src/community/components/tabs/tabs-context.tsx deleted file mode 100644 index 249d81c83..000000000 --- a/libs/react-components/src/community/components/tabs/tabs-context.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -interface ITabsContext { - currentTab: string; - setCurrentTab: (id: string) => void; -} - -export const TabsContext = React.createContext<ITabsContext>({ - currentTab: '', - setCurrentTab: () => null, -}); diff --git a/libs/react-components/src/community/components/tabs/tabs-item/tabs-item.tsx b/libs/react-components/src/community/components/tabs/tabs-item/tabs-item.tsx deleted file mode 100644 index bc11573d9..000000000 --- a/libs/react-components/src/community/components/tabs/tabs-item/tabs-item.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react'; - -import { BreakpointSupport, useBreakpointProps } from '../../../helpers'; -import { Card, CardContent, CardContentProps } from '../../card'; -import { TabsContext } from '../tabs-context'; - -type TabsItemBreakpointProps = Pick<CardContentProps, 'padding' | 'background'>; - -export interface TabsItemProps extends BreakpointSupport<TabsItemBreakpointProps> { - /** - * ID property. - */ - id: string; - /** - * Button label. - */ - label: string; - /** - * Content of tabs item. - */ - children: React.ReactNode; - /** - * Additional classes. - */ - className?: string; -} - -export const TabsItem = (props: TabsItemProps) => { - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - const { className, padding, background, id, children } = getCurrentBreakpointProps<TabsItemProps>(props, { - padding: { top: 1.5, right: 2, bottom: 2, left: 2 }, - background: 'white', - }); - const { currentTab } = React.useContext(TabsContext); - const isCurrent = id === currentTab; - - if (!isCurrent) { - return null; - } - - return ( - <div - data-name="tabs-item" - className={className} - id={`${id}-panel`} - tabIndex={0} - role="tabpanel" - aria-labelledby={id} - > - <Card padding={padding} background={background} borderRadius={{ top: false, right: false }} borderless> - <CardContent>{children}</CardContent> - </Card> - </div> - ); -}; - -export default TabsItem; diff --git a/libs/react-components/src/community/components/tabs/tabs-nav/tabs-nav-item.tsx b/libs/react-components/src/community/components/tabs/tabs-nav/tabs-nav-item.tsx deleted file mode 100644 index 215a92870..000000000 --- a/libs/react-components/src/community/components/tabs/tabs-nav/tabs-nav-item.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import Print from '../../../../tedi/components/misc/print/print'; -import { HashTrigger } from '../../../../tedi/components/navigation/hash-trigger/hash-trigger'; -import Anchor, { AnchorProps } from '../../anchor/anchor'; -import { TabsContext } from '../tabs-context'; -import { TabsItemProps } from '../tabs-item/tabs-item'; -import styles from './tabs-nav.module.scss'; - -export type TabsNavItemProps<C extends React.ElementType = 'a'> = AnchorProps<C> & Pick<TabsItemProps, 'id'>; - -export const TabsNavItem = <C extends React.ElementType = 'a'>(props: TabsNavItemProps<C>): JSX.Element => { - const { isActive, children, id, ...rest } = props; - const TabsNavItemBEM = cn(styles['tabs__nav-item'], { [styles['tabs__nav-item--current']]: isActive }); - - const { setCurrentTab } = React.useContext(TabsContext); - - return ( - <li data-name="tabs-nav-item" className={TabsNavItemBEM} role="presentation"> - <HashTrigger id={id} onMatch={(id) => setCurrentTab(id)}> - <Print visibility="show"> - {/* - // // TODO: Remove ts-ignore - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error: 'rest' props do not fully match Anchor's expected props, but they are validated elsewhere */} - <Anchor {...rest} id={id} className={cn(styles['tabs__nav-link'])}> - {children} - </Anchor> - </Print> - </HashTrigger> - </li> - ); -}; - -export default TabsNavItem; diff --git a/libs/react-components/src/community/components/tabs/tabs-nav/tabs-nav.module.scss b/libs/react-components/src/community/components/tabs/tabs-nav/tabs-nav.module.scss deleted file mode 100644 index 75edefbc3..000000000 --- a/libs/react-components/src/community/components/tabs/tabs-nav/tabs-nav.module.scss +++ /dev/null @@ -1,37 +0,0 @@ -.tabs__nav { - display: flex; - align-items: center; - margin: 0; - overflow-y: auto; - list-style: none; - background-color: var(--color-bg-muted); -} - -.tabs__nav-item { - --global-outline-offset: -2px; -} - -.tabs__nav-item--current { - background-color: var(--color-bg-default); - border-top-left-radius: var(--border-radius-default); - border-top-right-radius: var(--border-radius-default); -} - -a.tabs__nav-link:not(:disabled) { - display: inline-block; - padding: 1rem; - color: var(--color-text-default); - white-space: nowrap; - - .tabs__nav-item--current & { - color: var(--color-primary-main); - } - - &:hover:not(:disabled) span span { - text-decoration: none; - } - - .tabs__nav-item:not(.tabs__nav-item--current) &:hover { - background-color: var(--color-bg-subtle); - } -} diff --git a/libs/react-components/src/community/components/tabs/tabs-nav/tabs-nav.tsx b/libs/react-components/src/community/components/tabs/tabs-nav/tabs-nav.tsx deleted file mode 100644 index 2ba84578c..000000000 --- a/libs/react-components/src/community/components/tabs/tabs-nav/tabs-nav.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import cn from 'classnames'; - -import styles from './tabs-nav.module.scss'; -import TabsNavItem, { TabsNavItemProps } from './tabs-nav-item'; - -export interface TabsNavProps { - /** - * Additional classes. - */ - className?: string; - /** - * See @tabs-nav-item. - */ - items: TabsNavItemProps[]; - /** - * ID of heading labelling the tabs. - */ - 'aria-labelledby': string; -} - -export const TabsNav = (props: TabsNavProps): JSX.Element => { - const { items, className, 'aria-labelledby': ariaLabelledBy } = props; - - const BEM = cn(styles['tabs__nav'], className); - - return ( - <ul data-name="tabs-nav" className={BEM} role="tablist" aria-labelledby={ariaLabelledBy}> - {items.map((item, index) => ( - <TabsNavItem {...item} key={index} /> - ))} - </ul> - ); -}; - -export default TabsNav; diff --git a/libs/react-components/src/community/components/tabs/tabs.stories.tsx b/libs/react-components/src/community/components/tabs/tabs.stories.tsx deleted file mode 100644 index 0f0209a2c..000000000 --- a/libs/react-components/src/community/components/tabs/tabs.stories.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import Heading from '../typography/heading/heading'; -import { Tabs, TabsItem, TabsItemProps, TabsProps } from '.'; - -const meta: Meta<typeof Tabs> = { - component: Tabs, - title: 'Community/Tabs', - subcomponents: { TabsItem } as never, -}; - -export default meta; - -export interface TabsStory { - tabs: Omit<TabsProps, 'aria-labelledby' | 'children'>; - tabsItem: Partial<Omit<TabsItemProps, 'id' | 'label'>>; -} - -type Story = StoryObj<TabsStory>; - -const Template: StoryFn<TabsStory> = ({ tabs, tabsItem }: TabsStory) => ( - <> - <Heading id="tabs-heading" className="visually-hidden"> - Tabs title - </Heading> - <Tabs defaultCurrentTab="tab-1" {...tabs} aria-labelledby="tabs-heading"> - <TabsItem {...tabsItem} id="tab-1" label="Tab 1"> - <VerticalSpacing> - <Heading element="h2">Tab 1</Heading> - <p>Content 1</p> - </VerticalSpacing> - </TabsItem> - <TabsItem {...tabsItem} id="tab-2" label="Tab 2"> - <VerticalSpacing> - <Heading element="h2">Tab 2</Heading> - <p>Content 2</p> - <p>Content 2</p> - <p>Content 2</p> - <p>Content 2</p> - <p>Content 2</p> - </VerticalSpacing> - </TabsItem> - <TabsItem {...tabsItem} id="tab-3" label="Tab 3"> - <VerticalSpacing> - <Heading element="h2">Tab 3</Heading> - <p>Content 3</p> - <p>Content 3</p> - <p>Content 3</p> - <p>Content 3</p> - <p>Content 3</p> - <p>Content 3</p> - <p>Content 3</p> - <p>Content 3</p> - <p>Content 3</p> - <p>Content 3</p> - </VerticalSpacing> - </TabsItem> - </Tabs> - </> -); - -export const Default: Story = { - render: Template, - args: {}, -}; - -/** - * Since TabsItem uses Card internally it also supports `padding` and `background` props - */ -export const Padding: Story = { - render: Template, - args: { - tabsItem: { - padding: 1, - }, - }, -}; - -/** - * Hides navigation when printing - */ -export const HideNavOnPrint: Story = { - render: Template, - args: { - tabs: { - hideNavOnPrint: 'hide', - }, - }, -}; diff --git a/libs/react-components/src/community/components/tabs/tabs/tabs.module.scss b/libs/react-components/src/community/components/tabs/tabs/tabs.module.scss deleted file mode 100644 index fc817596d..000000000 --- a/libs/react-components/src/community/components/tabs/tabs/tabs.module.scss +++ /dev/null @@ -1,9 +0,0 @@ -.tabs { - background: var(--color-bg-default); - border: 1px solid var(--color-border-default); - border-radius: var(--border-radius-default); -} - -.tabs__content { - transition: height 300ms cubic-bezier(0.22, 0.61, 0.35, 1); -} diff --git a/libs/react-components/src/community/components/tabs/tabs/tabs.tsx b/libs/react-components/src/community/components/tabs/tabs/tabs.tsx deleted file mode 100644 index 717d6006d..000000000 --- a/libs/react-components/src/community/components/tabs/tabs/tabs.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import Print, { PrintProps } from '../../../../tedi/components/misc/print/print'; -import { usePrint } from '../../../../tedi/helpers'; -import { TabsContext } from '../tabs-context'; -import TabsItem, { TabsItemProps } from '../tabs-item/tabs-item'; -import TabsNav from '../tabs-nav/tabs-nav'; -import { TabsNavItemProps } from '../tabs-nav/tabs-nav-item'; -import styles from './tabs.module.scss'; - -export interface TabsProps { - /** - * Tabs content. Children should be TabsItems - */ - children: React.ReactNode; - /** - * Current tab id. Use to control the value. Only works with onTabChange prop. - */ - currentTab?: string; - /** - * Default current tab. Use for uncontrolled value. - * Changing the value won't update the component. - */ - defaultCurrentTab?: string; - /** - * Additional classes. - */ - className?: string; - /** - * On tab change handler. - */ - onTabChange?: (nextTab: string) => void; - /** - * ID of heading labelling the tabs. - */ - 'aria-labelledby': string; - /** - * Hide navigation and card when printing - * @default 'show' - */ - hideNavOnPrint?: PrintProps['visibility']; -} - -export const Tabs = (props: TabsProps): JSX.Element => { - const isPrinting = usePrint(); - const { defaultCurrentTab, onTabChange, className, children, hideNavOnPrint = 'show' } = props; - const [innerCurrentTab, setInnerCurrentTab] = React.useState(defaultCurrentTab || ''); - - const isCurrentTabControlled = (tab = props.currentTab): tab is string => { - return !!props.onTabChange && typeof tab !== 'undefined'; - }; - const currentTab: string = isCurrentTabControlled(props.currentTab) ? props.currentTab : innerCurrentTab; - - const setCurrentTab = (id: string): void => { - if (currentTab !== id) { - if (!isCurrentTabControlled()) { - setInnerCurrentTab(id); - } - - onTabChange?.(id); - } - }; - - const navItems = React.Children.toArray(props.children) - .filter((child: React.ReactNode): child is React.ReactElement<TabsItemProps> => { - return React.isValidElement(child) && child.type === TabsItem; - }) - .map((item) => item.props as TabsItemProps); - - const handleNavItemKeyDown = (e: React.KeyboardEvent<HTMLAnchorElement>) => { - const activeItemIndex = navItems.findIndex((item) => item.id === e.currentTarget?.id); - const currentIndex = activeItemIndex !== -1 ? activeItemIndex : 0; - let newIndex = -1; - - switch (e.key) { - case ' ': - e.preventDefault(); - setCurrentTab(e.currentTarget?.id); - break; - case 'ArrowLeft': - if (currentIndex === 0) { - newIndex = navItems.length - 1; - } else { - newIndex = currentIndex - 1; - } - break; - case 'ArrowRight': - if (currentIndex === navItems.length - 1) { - newIndex = 0; - } else { - newIndex = currentIndex + 1; - } - break; - case 'Home': - newIndex = 0; - break; - case 'End': - newIndex = navItems.length - 1; - break; - } - - if (newIndex !== -1) { - e.preventDefault(); - document.getElementById(navItems[newIndex].id)?.focus(); - } - }; - - const navItemAnchors: TabsNavItemProps[] = navItems.map((item: TabsItemProps, index) => { - const { children, label, id, ...rest } = item; - - return { - ...rest, - id, - isActive: currentTab === id, - onClick: (event) => { - event.preventDefault(); - setCurrentTab(id); - }, - onKeyDown: handleNavItemKeyDown, - children: label, - href: `#${id}`, - role: 'tab', - tabIndex: (!currentTab && index === 0) || currentTab === id ? undefined : -1, - 'aria-controls': `${id}-panel`, - 'aria-label': label, - 'aria-selected': currentTab === id, - }; - }); - - return ( - <TabsContext.Provider - value={{ - currentTab, - setCurrentTab, - }} - > - <div - data-name="tabs" - className={isPrinting && hideNavOnPrint === 'hide' ? className : cn(styles['tabs'], className)} - > - <Print visibility={hideNavOnPrint}> - <TabsNav items={navItemAnchors} aria-labelledby={props['aria-labelledby']} /> - </Print> - <div className={styles['tabs__content']}>{children}</div> - </div> - </TabsContext.Provider> - ); -}; - -export default Tabs; diff --git a/libs/react-components/src/community/components/tag/tag-examples.tsx b/libs/react-components/src/community/components/tag/tag-examples.tsx deleted file mode 100644 index 905b1fee3..000000000 --- a/libs/react-components/src/community/components/tag/tag-examples.tsx +++ /dev/null @@ -1,320 +0,0 @@ -import { Col, ColProps, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import { Skeleton } from '../../../tedi/components/loaders/skeleton'; -import { Separator } from '../../../tedi/components/misc/separator/separator'; -import { Card, CardContent, CardProps, Heading, Icon, Tag, TagProps } from '../../index'; - -const TagExamples = () => { - return ( - <VerticalSpacing size={2}> - <VerticalSpacing size={0.5}> - <Heading element="h3">Example: copy</Heading> - <Row> - <TagExampleCard - tags={[{ children: 'Submitted', color: 'positive' }]} - card={{ background: 'positive-highlight' }} - description={ - <p> - Use: <br /> - Short, clear and descriptive tags. - </p> - } - /> - <TagExampleCard - tags={[{ children: 'Application is now submitted', color: 'primary' }]} - card={{ background: 'important-highlight' }} - description={ - <p> - Avoid: - <br /> Long and non-descriptive text. - </p> - } - /> - </Row> - </VerticalSpacing> - - <VerticalSpacing size={0.5}> - <Heading element="h3">Example: accent tag & accessibility</Heading> - <Row> - <TagExampleCard - tags={[{ children: 'J', color: 'accent' }]} - card={{ background: 'positive-highlight' }} - description={ - <p> - Use: - <br /> - The accent tag should only be used as an illustrative element, due to it's readability issues. - </p> - } - content="John Smith" - /> - <TagExampleCard - tags={[{ children: 'Paid', color: 'accent' }]} - card={{ background: 'important-highlight' }} - description={ - <p> - Avoid: <br /> - Do not use an accent tag alone or to convey meaningful information, since it's hard to read and - it's not compliant with WCAG AA contrast standards - </p> - } - /> - </Row> - </VerticalSpacing> - - <Separator spacing={5} /> - <VerticalSpacing size={0.5}> - <Heading element="h2">Variants</Heading> - <VerticalSpacing> - <Row> - <TagExampleCard - card={{ background: 'bg-muted' }} - tags={[{ children: 'J' }, { children: 'J', size: 'large' }]} - /> - <Col width="auto"> - <VerticalSpacing size={0.5}> - <p> - <b>Size</b> - </p> - <ul> - <li>Default: 24px</li> - <li>Large: 40px</li> - </ul> - </VerticalSpacing> - </Col> - </Row> - <Row> - <TagExampleCard - card={{ background: 'bg-muted' }} - tags={[ - { children: 'J' }, - { children: 'J', color: 'primary' }, - { children: 'J', color: 'accent' }, - { children: 'J', color: 'positive' }, - { children: 'J', color: 'warning' }, - { children: 'J', color: 'important' }, - ]} - /> - <Col width="auto"> - <VerticalSpacing size={0.5}> - <p> - <b>Color</b> - </p> - <ul> - <li>Default</li> - <li>Primary</li> - <li>Accent</li> - <li>Positive</li> - <li>Warning</li> - <li>Important</li> - </ul> - </VerticalSpacing> - </Col> - </Row> - <Row> - <TagExampleCard - card={{ background: 'bg-muted' }} - tags={[ - { children: 'J', color: 'primary' }, - { children: 'J', color: 'primary', type: 'secondary' }, - { children: 'J', color: 'primary', type: 'ghost' }, - { children: 'J', color: 'primary', type: 'invisible' }, - ]} - /> - <Col width="auto"> - <VerticalSpacing size={0.5}> - <p> - <b>Type</b> - </p> - <ul> - <li>Default</li> - <li>Secondary</li> - <li>Ghost</li> - <li>Invisible</li> - </ul> - </VerticalSpacing> - </Col> - </Row> - </VerticalSpacing> - </VerticalSpacing> - <VerticalSpacing size={0.5}> - <Heading element="h2">Additional variations</Heading> - <Row> - <TagExampleCard - card={{ background: 'bg-muted' }} - tags={[ - { children: 'J', hasArrow: true }, - { children: 'Sent', color: 'primary', hasArrow: true }, - ]} - col={{ lg: 3 }} - description={ - <p> - <b>Arrow</b> <br />- True/False - </p> - } - /> - <TagExampleCard - card={{ background: 'bg-muted' }} - tags={[ - { children: 'J', rounded: true }, - { children: 'Sent', color: 'primary', rounded: true }, - ]} - col={{ lg: 3 }} - description={ - <p> - <b>Rounded</b> <br />- True/False - </p> - } - /> - <TagExampleCard - card={{ background: 'bg-muted' }} - tags={[ - { children: <Icon name="add" filled size={12} />, iconOnly: true }, - { children: <Icon name="add" filled size={12} />, color: 'primary', iconOnly: true }, - ]} - col={{ lg: 3 }} - description={ - <p> - <b>Icon only</b> <br />- True/False - </p> - } - /> - <TagExampleCard - card={{ background: 'bg-muted' }} - tags={[ - { children: 'J', status: 'success' }, - { children: 'John', color: 'primary', status: 'success' }, - ]} - col={{ lg: 3 }} - description={ - <p> - <b>Status</b> <br />- True/False <br /> - Type: Active, Error, Inactive - </p> - } - /> - </Row> - </VerticalSpacing> - <VerticalSpacing size={0.5}> - <Heading element="h2">Width</Heading> - <Row> - <TagExampleCard - card={{ background: 'bg-muted' }} - tags={[{ children: 'Long text' }, { children: 'Long text', size: 'large' }]} - col={{ lg: 6 }} - description={ - <p> - <b>Width behavior</b> - <br /> - Width adjusts to the content width. - </p> - } - /> - <TagExampleCard - card={{ background: 'bg-muted' }} - tags={[{ children: 'J' }, { children: 'J', size: 'large' }]} - col={{ lg: 6 }} - description={ - <p> - <b>Min width</b> - <ul> - <li>Medium: 24px.</li> - <li>Large: 40px</li> - </ul> - </p> - } - /> - </Row> - </VerticalSpacing> - <VerticalSpacing size={0.5}> - <Heading element="h2">States</Heading> - <Skeleton> - <Row> - <TagExampleCard - card={{ background: 'bg-muted' }} - tags={[ - { children: 'J', type: 'secondary', isLoading: true, color: 'default' }, - { children: 'J', type: 'secondary', isLoading: true, color: 'primary' }, - { children: 'J', type: 'secondary', isLoading: true, color: 'accent' }, - { children: 'J', type: 'secondary', isLoading: true, color: 'positive' }, - { children: 'J', type: 'secondary', isLoading: true, color: 'warning' }, - { children: 'J', type: 'secondary', isLoading: true, color: 'important' }, - ]} - col={{ lg: 6 }} - description={ - <p> - <b>Loading</b> - <br /> - Subtle gradient movement - </p> - } - /> - <TagExampleCard - card={{ background: 'bg-muted' }} - tags={[ - { children: 'J', isDisabled: true, color: 'default' }, - { children: 'J', isDisabled: true, color: 'primary' }, - { children: 'J', isDisabled: true, color: 'accent' }, - { children: 'J', isDisabled: true, color: 'positive' }, - { children: 'J', isDisabled: true, color: 'warning' }, - { children: 'J', isDisabled: true, color: 'important' }, - { children: 'J', type: 'secondary', isDisabled: true, color: 'default' }, - { children: 'J', type: 'secondary', isDisabled: true, color: 'primary' }, - { children: 'J', type: 'secondary', isDisabled: true, color: 'accent' }, - { children: 'J', type: 'secondary', isDisabled: true, color: 'positive' }, - { children: 'J', type: 'secondary', isDisabled: true, color: 'warning' }, - { children: 'J', type: 'secondary', isDisabled: true, color: 'important' }, - ]} - col={{ lg: 6 }} - description={ - <VerticalSpacing size={0.5}> - <p> - <b>Disabled:</b> <br />- Opacity: 0.5 - </p> - <p> - Note that a tag is not an interactive element, but it can be placed into one, for example, into a - select dropdown. We use the disabled tag style only if its interactive parent element is disabled. - </p> - </VerticalSpacing> - } - /> - </Row> - </Skeleton> - </VerticalSpacing> - </VerticalSpacing> - ); -}; - -interface TagExampleCardProps { - tags: TagProps[]; - card: CardProps; - col?: ColProps; - description?: React.ReactNode; - content?: React.ReactNode; -} - -const TagExampleCard = ({ tags, card, description, content, col }: TagExampleCardProps) => ( - <Col lg={6} {...col}> - <VerticalSpacing> - <Card borderless={true} padding={1.5} {...card}> - <CardContent> - <Row justifyContent="center" alignItems="center"> - <Col width="auto"> - <Row gutter={2} alignItems="center"> - {tags.map((tag, index) => ( - <Col width="auto" key={index}> - <Tag {...tag} /> - </Col> - ))} - {!!content && <Col width="auto">{content}</Col>} - </Row> - </Col> - </Row> - </CardContent> - </Card> - {description} - </VerticalSpacing> - </Col> -); - -export default TagExamples; diff --git a/libs/react-components/src/community/components/tag/tag.mdx b/libs/react-components/src/community/components/tag/tag.mdx deleted file mode 100644 index 5eecab127..000000000 --- a/libs/react-components/src/community/components/tag/tag.mdx +++ /dev/null @@ -1,30 +0,0 @@ -import { Meta, Unstyled } from '@storybook/blocks'; -import TagExamples from './tag-examples.tsx'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import * as TagStories from './tag.stories.tsx'; - -<Meta of={TagStories} name="Tag Usage" /> - -<Unstyled> - <VerticalSpacing> - ## Tag usage - - ### Where to use: - - - Organizing information by categorizing or labeling content. - - Illustrative tags. Ex: name initials. - - ### Where not to use: - - - As a navigation element. Use: link, button. Tags are not interactive elements and should not be used that way. - - ### How to use: - - - Use descriptive short tags, ideally one or two words. - - Avoid excessive use of tags as it can lead to visual clutter and cognitive overload, diminishing the overall user experience. - - Accent tags should only be used for illustrative purposes adjacent to text. - - <TagExamples /> - - </VerticalSpacing> -</Unstyled> diff --git a/libs/react-components/src/community/components/tag/tag.module.scss b/libs/react-components/src/community/components/tag/tag.module.scss deleted file mode 100644 index a8d8dc26e..000000000 --- a/libs/react-components/src/community/components/tag/tag.module.scss +++ /dev/null @@ -1,193 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -@mixin tag-variant($primary-bg, $secondary-bg, $primary-text, $secondary-text) { - &, - &.tag--type-default { - color: $secondary-text; - background-color: $primary-bg; - } - - &.tag--type-secondary { - color: $primary-text; - background-color: $secondary-bg; - } - - &.tag--type-ghost { - color: $primary-bg; - background-color: var(--color-bg-default); - border: 1px solid $primary-bg; - - &.tag--color-accent { - color: $primary-text; - } - } - - &.tag--type-borderless { - color: $primary-bg; - background-color: var(--color-bg-default); - } - - &.tag--type-invisible, - &.tag--icon-only { - padding: 0; - } - - &.tag--type-invisible { - color: $primary-bg; - background-color: var(--color-transparent); - border-color: var(--color-transparent); - } - - &.tag--disabled { - opacity: 0.5; - } - - &.tag--type-secondary, - &.tag--type-invisible, - &.tag--type-borderless, - &.tag--type-ghost { - &.tag--with-arrow::after { - border-bottom-color: $secondary-text; - } - } -} - -.tag, -.tag--default { - position: relative; - display: inline-flex; - align-items: center; - justify-content: center; - width: max-content; - min-width: 1.5rem; - max-width: 100%; - min-height: 1.5rem; - padding: 0.125rem 0.5rem; - font-size: 0.875rem; - text-align: center; - text-decoration: none; - vertical-align: bottom; // Removes extra pixel added to height by inline-flex - border-radius: var(--border-radius-default); - - @include mixins.print-grayscale; - - &.tag--type-ghost { - padding: calc(0.125rem - 1px) calc(0.5rem - 1px); // padding - ghost border - } -} - -.tag--large { - min-width: 2.5rem; - min-height: 2.5rem; - font-size: 1rem; -} - -.tag--color-default { - @include tag-variant( - var(--color-bg-inverted), - var(--color-bg-subtle), - var(--color-text-subtle), - var(--color-text-inverted) - ); -} - -.tag--color-primary { - @include tag-variant( - var(--color-primary-main), - var(--color-primary-highlight-subtle), - var(--color-primary-active), - var(--color-text-inverted) - ); -} - -.tag--color-accent { - @include tag-variant( - var(--color-accent-main), - var(--color-accent-highlight), - var(--color-accent-active), - var(--color-text-inverted) - ); -} - -.tag--color-positive { - @include tag-variant( - var(--color-positive-main), - var(--color-positive-highlight), - var(--color-positive-active), - var(--color-text-inverted) - ); -} - -.tag--color-warning { - @include tag-variant( - var(--color-warning-main), - var(--color-warning-highlight), - var(--color-warning-active), - var(--color-text-inverted) - ); -} - -.tag--color-important { - @include tag-variant( - var(--color-important-main), - var(--color-important-highlight), - var(--color-important-active), - var(--color-text-inverted) - ); -} - -.tag--with-arrow { - &::after { - position: absolute; - top: 2px; - right: 0; - content: ''; - border-right: 4px solid var(--color-transparent); - border-bottom: 4px solid var(--color-text-inverted); - border-left: 4px solid var(--color-transparent); - transform: rotate(45deg); - } - - &.tag--large::after { - right: -1px; - border-width: 7px; - } -} - -.tag--status-error, -.tag--status-success, -.tag--status-inactive { - &::before { - position: absolute; - top: -0.125rem; - right: -0.125rem; - width: 0.625rem; - height: 0.625rem; - content: ''; - border: 1px solid var(--color-bg-default); - border-radius: 50%; - } - - &.tag--large::before { - top: -0.1875rem; - right: -0.1875rem; - width: 0.875rem; - height: 0.875rem; - } -} - -.tag--status-success::before { - background-color: var(--color-positive-main); -} - -.tag--status-error::before { - background-color: var(--color-important-main); -} - -.tag--status-inactive::before { - background-color: var(--color-text-disabled); -} - -.tag--rounded { - border-radius: 1.5rem; -} diff --git a/libs/react-components/src/community/components/tag/tag.stories.tsx b/libs/react-components/src/community/components/tag/tag.stories.tsx deleted file mode 100644 index 2d597bfd1..000000000 --- a/libs/react-components/src/community/components/tag/tag.stories.tsx +++ /dev/null @@ -1,192 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import React from 'react'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import Card from '../card/card'; -import CardContent from '../card/card-content/card-content'; -import Icon from '../icon/icon'; -import { Text, TextProps } from '../typography/text/text'; -import Tag, { TagColor, TagProps, TagSize, TagStatus, TagType } from './tag'; - -type TagTemplateProps<Type = string | boolean> = React.ComponentProps<typeof Tag> & { - array: Type[]; - property: keyof TagProps; -}; - -const TagColors: TagColor[] = ['default', 'primary', 'accent', 'positive', 'warning', 'important']; -const TagTypes: TagType[] = ['default', 'secondary', 'ghost', 'invisible', 'borderless']; -const TagStatuses: TagStatus[] = ['error', 'inactive', 'success']; -const TagSizes: TagSize[] = ['default', 'large']; - -const Capitalize = ({ children, ...rest }: TextProps) => ( - <Text element="span" modifiers={['small', 'capitalize']} color="muted" {...rest}> - {children} - </Text> -); - -const Template: StoryFn<TagTemplateProps> = (args) => { - const { array, property, ...tagProps } = args; - return ( - <VerticalSpacing size={0.25}> - <Row> - <Col></Col> - {TagColors.map((color) => ( - <Col key={`${color}-title`}> - <Capitalize>{color}</Capitalize> - </Col> - ))} - </Row> - - {array.map((type, key) => ( - <Card borderless padding={0.5} background={type === 'borderless' ? 'bg-inverted' : 'transparent'} key={key}> - <CardContent> - <Row> - <Col> - <Capitalize color={type === 'borderless' ? 'inverted' : undefined}>{type}</Capitalize> - </Col> - {TagColors.map((color, index) => ( - <Col key={`${color}-${index}`}> - <Tag color={color} {...{ [property]: type }} {...tagProps}> - {property === 'iconOnly' || tagProps.iconOnly ? <Icon name="add" filled size={12} /> : 'J'} - </Tag> - </Col> - ))} - </Row> - </CardContent> - </Card> - ))} - </VerticalSpacing> - ); -}; - -/** - * <b>Community Tag is now deprecated</b><br/> - * Use TEDI-Ready <a href="/docs/tedi-ready-components-tag--docs">Tag</a> or <a href="/docs/tedi-ready-components-statusbadge--docs">StatusBadge</a> instead - */ -const meta: Meta<TagTemplateProps> = { - component: Tag, - title: 'Community/Tag', - argTypes: { - array: { table: { disable: true } }, - property: { table: { disable: true } }, - }, - render: Template, - parameters: { - status: { - type: 'deprecated', - }, - }, -}; - -export default meta; -type Story = StoryObj<TagTemplateProps>; - -export const Default: Story = { - args: { - array: TagTypes, - property: 'type', - }, -}; - -export const Status: Story = { - args: { - array: TagStatuses, - property: 'status', - }, -}; - -export const Size: Story = { - args: { - array: TagSizes, - property: 'size', - }, -}; - -export const SizeTypeGhost: Story = { - args: { - array: TagSizes, - property: 'size', - type: 'ghost', - }, -}; - -export const Rounded: Story = { - args: { - array: TagTypes, - property: 'type', - rounded: true, - }, -}; - -export const IconOnly: Story = { - args: { - array: TagTypes, - property: 'type', - iconOnly: true, - }, -}; - -export const WithArrow: Story = { - args: { - array: TagTypes, - property: 'type', - hasArrow: true, - }, -}; - -export const Loading: Story = { - args: { - array: TagTypes, - property: 'type', - isLoading: true, - }, -}; - -export const LoadingRoundLarge: Story = { - render: (args) => <Tag {...args} />, - args: { - children: 'J', - isLoading: true, - rounded: true, - size: 'large', - type: 'secondary', - }, -}; - -export const Disabled: Story = { - args: { - array: TagTypes, - property: 'type', - isDisabled: true, - }, -}; - -export const WithLongText: Story = { - render: (args) => <Tag {...args} />, - args: { - children: 'With Long text', - }, -}; - -export const WithLongTextRounded: Story = { - render: (args) => <Tag {...args} />, - args: { - children: 'With Long text', - rounded: true, - }, -}; - -/** - * Size large, disabled and rounded example with icon. - */ -export const CustomTag: Story = { - render: (args) => <Tag {...args} />, - args: { - children: <Icon name="check" size={24} />, - size: 'large', - isDisabled: true, - rounded: true, - iconOnly: true, - }, -}; diff --git a/libs/react-components/src/community/components/tag/tag.tsx b/libs/react-components/src/community/components/tag/tag.tsx deleted file mode 100644 index 06018b696..000000000 --- a/libs/react-components/src/community/components/tag/tag.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import cn from 'classnames'; -import React, { forwardRef } from 'react'; - -import { SkeletonBlock } from '../../../tedi/components/loaders/skeleton'; -import styles from './tag.module.scss'; - -export type TagColor = 'default' | 'primary' | 'accent' | 'positive' | 'warning' | 'important'; -export type TagType = 'default' | 'secondary' | 'ghost' | 'invisible' | 'borderless'; -export type TagSize = 'default' | 'large'; -export type TagStatus = 'error' | 'success' | 'inactive'; - -export interface TagProps { - /** - * Content of Tag. - */ - children: React.ReactNode; - /** - * Additional classes. - */ - className?: string; - /** - * Color of Tag. - * @default default - */ - color?: TagColor; - /** - * Type of Tag. - * @default default - */ - type?: TagType; - /** - * Status of Tag. - */ - status?: TagStatus; - /** - * Size of Tag. - * @default default - */ - size?: TagSize; - /** - * Title if Tag is Abbreviation. - */ - title?: string; - /** - * If tag is rounded - * @default false - */ - rounded?: boolean; - /** - * If tag has icon only - * @default false - */ - iconOnly?: boolean; - /** - * If Tag has arrow on top-right corner - * @default false - */ - hasArrow?: boolean; - /** - * If Tag should be skeleton - * @default false - */ - isLoading?: boolean; - /** - * If tag is disabled - * @default false - */ - isDisabled?: boolean; - /** - * ID attribute - */ - id?: string; -} - -export const Tag = forwardRef<HTMLDivElement, TagProps>((props, ref): JSX.Element => { - const { - children, - size, - className, - title, - color = 'default', - status, - type = 'default', - rounded = false, - hasArrow = false, - isLoading = false, - isDisabled = false, - iconOnly = false, - id, - } = props; - - const TagElement = isLoading ? SkeletonBlock : title ? 'abbr' : 'div'; - - const TagsBEM = cn( - styles['tag'], - className, - { [styles[`tag--${size}`]]: size }, - { [styles[`tag--type-${type}`]]: type }, - { [styles[`tag--color-${color}`]]: color }, - { [styles[`tag--status-${status}`]]: status }, - { [styles['tag--rounded']]: rounded }, - { [styles['tag--icon-only']]: iconOnly }, - { [styles['tag--disabled']]: isDisabled }, - { [styles['tag--with-arrow']]: hasArrow && !rounded } - ); - - return ( - <TagElement id={id} data-name="tag" className={TagsBEM} title={title} ref={ref}> - {children} - </TagElement> - ); -}); - -Tag.displayName = 'Tag'; - -export default Tag; diff --git a/libs/react-components/src/community/components/toggle-open/toggle-open.module.scss b/libs/react-components/src/community/components/toggle-open/toggle-open.module.scss deleted file mode 100644 index f09cce4aa..000000000 --- a/libs/react-components/src/community/components/toggle-open/toggle-open.module.scss +++ /dev/null @@ -1,14 +0,0 @@ -.toggle--open { - margin-left: 0.5rem; - transition-timing-function: ease-in-out; - transition-duration: 600ms; - transition-property: transform; - transform: rotate(180deg); -} - -.toggle--close { - margin-left: 0.5rem; - transition-timing-function: ease-in-out; - transition-duration: 600ms; - transition-property: transform; -} diff --git a/libs/react-components/src/community/components/toggle-open/toggle-open.stories.tsx b/libs/react-components/src/community/components/toggle-open/toggle-open.stories.tsx deleted file mode 100644 index 32b359bc6..000000000 --- a/libs/react-components/src/community/components/toggle-open/toggle-open.stories.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import React from 'react'; - -import ToggleOpen from './toggle-open'; - -/** - * Toggle helper that toggles the button open-close with expand_more icon. Toggle is already used in Accordion component. - */ -const meta: Meta<typeof ToggleOpen> = { - component: ToggleOpen, - title: 'Community/ToggleOpen', -}; - -export default meta; -type Story = StoryObj<typeof ToggleOpen>; - -const Template: StoryFn<typeof ToggleOpen> = (args) => { - const [open, setOpen] = React.useState<boolean>(false); - return <ToggleOpen {...args} isOpen={open} onClick={() => setOpen(!open)} />; -}; - -export const Default: Story = { - render: Template, - args: { - openText: 'Open', - closeText: 'Close', - visualType: 'secondary', - }, -}; - -export const TypeLink: Story = { - render: Template, - args: { - openText: 'Open', - closeText: 'Close', - visualType: 'link', - }, -}; diff --git a/libs/react-components/src/community/components/toggle-open/toggle-open.tsx b/libs/react-components/src/community/components/toggle-open/toggle-open.tsx deleted file mode 100644 index 77f41f1bb..000000000 --- a/libs/react-components/src/community/components/toggle-open/toggle-open.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import Button, { ButtonProps } from '../button/button'; -import { IconProps } from '../icon/icon'; -import styles from './toggle-open.module.scss'; - -export interface ToggleOpenProps extends Omit<ButtonProps, 'children' | 'iconRight'> { - /** - * Name on the button to open the item - */ - openText: string; - /** - * Name on the button to close the item - */ - closeText: string; - /** - * If the element currently open - */ - isOpen: boolean; - /** - * Name of the icon we want to show on the right. - * Overidden from ButtonProps, because we dont support string as icon name here - */ - iconRight?: Partial<IconProps>; -} - -export const ToggleOpen = ({ openText, closeText, isOpen, iconRight, ...rest }: ToggleOpenProps): JSX.Element => { - const ToggleOpenBEM = cn( - { [styles['toggle--open']]: isOpen }, - { [styles['toggle--close']]: !isOpen }, - iconRight?.className - ); - - return ( - <Button data-name="button" iconRight={{ ...iconRight, className: ToggleOpenBEM, name: 'expand_more' }} {...rest}> - {isOpen ? closeText : openText} - </Button> - ); -}; - -export default ToggleOpen; diff --git a/libs/react-components/src/community/components/tooltip/index.ts b/libs/react-components/src/community/components/tooltip/index.ts deleted file mode 100644 index b7d1d6ec3..000000000 --- a/libs/react-components/src/community/components/tooltip/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './tooltip'; -export * from './tooltip-provider'; -export * from './tooltip-trigger'; diff --git a/libs/react-components/src/community/components/tooltip/tooltip-provider.tsx b/libs/react-components/src/community/components/tooltip/tooltip-provider.tsx deleted file mode 100644 index c93a1060b..000000000 --- a/libs/react-components/src/community/components/tooltip/tooltip-provider.tsx +++ /dev/null @@ -1,224 +0,0 @@ -import { - arrow, - autoUpdate, - flip, - FloatingContext, - FloatingFocusManager, - offset, - OffsetOptions, - Placement, - ReferenceType, - safePolygon, - shift, - Strategy, - useClick, - useDismiss, - useFloating, - useFocus, - useHover, - useInteractions, - useRole, - UseRoleProps, -} from '@floating-ui/react'; -import React from 'react'; - -import { useIsMounted } from '../../../tedi/helpers'; -import { useIsTouchDevice } from '../../../tedi/helpers'; -import { useLabels } from '../../../tedi/providers/label-provider'; - -export type TooltipOpenWith = 'click' | 'hover'; -export const ARROW_HEIGHT = 7; -export const ARROW_WIDTH = 14; -export const GAP = 3; -export const DEFAULT_TOOLTIP_OFFSET = GAP + ARROW_HEIGHT; - -export interface TooltipProviderProps { - /** - * TooltipTrigger and Tooltip components - */ - children: React.ReactNode | React.ReactNode[]; - /** - * Placement of tooltip - * @default bottom - */ - placement?: Placement; - /** - * Adds correct event listeners that change the open state - * @default hover - */ - openWith?: TooltipOpenWith; - /** - * Props passed to FloatingFocusManager - */ - focusManager?: Omit<React.ComponentProps<typeof FloatingFocusManager>, 'context' | 'children'>; - /** - * Should Tooltip be initially shown. Won't work with open and onToggle. - * @default false - */ - defaultOpen?: boolean; - /** - * Should the Tooltip be open or closed. - * Use to handle state outside of component, should use with onToggle prop. - */ - open?: boolean; - /** - * Callback when Tooltip is toggled. - * Use to handle state outside of component, should use with open prop. - */ - onToggle?: (open: boolean) => void; - /** - * Changes aria attributes on trigger and tooltip based on the components role - * @default tooltip - */ - role?: UseRoleProps['role']; - /** - * Allows to overwrite offSet options. - * Used to align HeaderDropdown with bottom of the Header. - * @default GAP + ARROW_HEIGHT (3px + 7px) - */ - offset?: OffsetOptions; -} - -export interface ITooltipContext { - open: boolean; - isMounted: boolean; - openWith: TooltipOpenWith; - focusManager?: TooltipProviderProps['focusManager']; - reference: (node: ReferenceType | null) => void; - floating: (node: HTMLElement | null) => void; - arrowRef: React.MutableRefObject<SVGSVGElement | null>; - x: number | null; - y: number | null; - strategy: Strategy; - getReferenceProps: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown>; - getFloatingProps: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown>; - arrow?: { - x?: number | undefined; - y?: number | undefined; - centerOffset?: number | undefined; - }; - placement: Placement; - context: FloatingContext<ReferenceType>; -} - -export const TooltipContext = React.createContext<ITooltipContext>({ - open: false, - isMounted: false, - openWith: 'hover', - reference: () => null, - floating: () => null, - focusManager: {}, - arrowRef: { current: null }, - x: null, - y: null, - strategy: 'absolute', - getReferenceProps: () => ({}), - getFloatingProps: () => ({}), - arrow: { - x: 0, - y: 0, - centerOffset: 0, - }, - placement: 'top', - context: {} as FloatingContext, -}); - -export const TooltipProvider = (props: TooltipProviderProps): JSX.Element => { - const { getLabel } = useLabels(); - const isTouchDevice = useIsTouchDevice(); - const { - children, - placement: placementDefault = 'bottom', - openWith = isTouchDevice ? 'click' : 'hover', - defaultOpen = false, - open: openOuter, - onToggle, - role = 'tooltip', - offset: offsetOptions = DEFAULT_TOOLTIP_OFFSET, - } = props; - const { - order = ['reference', 'content'], - modal = false, - initialFocus = -1, - ...restFocusManager - } = props.focusManager ?? {}; - const { visuallyHiddenDismiss = modal ? getLabel('close') : false } = restFocusManager ?? {}; - const [open, setOpen] = React.useState(defaultOpen); - const arrowRef = React.useRef<SVGSVGElement | null>(null); - - const isOpen = onToggle && typeof openOuter !== 'undefined' ? openOuter : open; - - const onOpenChange = (open: boolean): void => { - if (typeof openOuter === 'undefined') { - setOpen(open); - } - - onToggle?.(open); - }; - - const isMounted = useIsMounted(); - const { x, y, refs, strategy, context, middlewareData, placement } = useFloating({ - placement: placementDefault, - open: isOpen, - onOpenChange, - middleware: [ - offset(offsetOptions), - flip(), - shift({ padding: 8 }), - arrow({ - element: arrowRef, - padding: 4, - }), - ], - whileElementsMounted: autoUpdate, - }); - - const { getReferenceProps, getFloatingProps } = useInteractions([ - useHover(context, { - handleClose: safePolygon(), - enabled: openWith === 'hover', - }), - useClick(context), - useFocus(context, { - enabled: openWith === 'hover', - }), - useRole(context, { role }), - useDismiss(context, { - outsidePressEvent: openWith === 'click' ? 'mousedown' : 'pointerdown', // https://floating-ui.com/docs/dialog#interaction-hooks - }), - ]); - - return ( - <TooltipContext.Provider - value={{ - open: isOpen, - isMounted, - openWith, - reference: refs.setReference, - floating: refs.setFloating, - arrowRef, - focusManager: { - order, - initialFocus, - modal, - visuallyHiddenDismiss, - ...restFocusManager, - }, - x, - y, - strategy, - getReferenceProps, - getFloatingProps, - arrow: { - ...middlewareData.arrow, - }, - context, - placement, - }} - > - {children} - </TooltipContext.Provider> - ); -}; - -export default TooltipProvider; diff --git a/libs/react-components/src/community/components/tooltip/tooltip-trigger.tsx b/libs/react-components/src/community/components/tooltip/tooltip-trigger.tsx deleted file mode 100644 index 3bb47309b..000000000 --- a/libs/react-components/src/community/components/tooltip/tooltip-trigger.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useMergeRefs } from '@floating-ui/react'; -import cn from 'classnames'; -import React from 'react'; - -import { useLabels } from '../../../tedi/providers/label-provider'; -import Icon from '../icon/icon'; -import styles from './tooltip.module.scss'; -import { TooltipContext } from './tooltip-provider'; - -export interface TooltipTriggerProps { - /** - * The element that opens tooltip. - */ - children: JSX.Element; -} - -export const TooltipTrigger = (props: TooltipTriggerProps): JSX.Element => { - const { children } = props; - const { getLabel } = useLabels(); - const { getReferenceProps, reference, openWith } = React.useContext(TooltipContext); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const refs = useMergeRefs([reference, (children as React.ComponentPropsWithRef<any>).ref]); - - return React.cloneElement( - children, - getReferenceProps({ - ref: refs, - tabIndex: 0, - label: children.type === Icon ? getLabel('tooltip.icon-trigger') : undefined, - ...children.props, - className: cn( - styles['tooltip__trigger'], - { [styles['tooltip__trigger--click']]: openWith === 'click' }, - children.props.className - ), - }) - ); -}; - -export default TooltipTrigger; diff --git a/libs/react-components/src/community/components/tooltip/tooltip.module.scss b/libs/react-components/src/community/components/tooltip/tooltip.module.scss deleted file mode 100644 index 25c5f60b0..000000000 --- a/libs/react-components/src/community/components/tooltip/tooltip.module.scss +++ /dev/null @@ -1,50 +0,0 @@ -$tooltip-max-width: ( - 'none': none, - 'small': 10rem, - 'medium': 15rem, - 'large': 30rem, -); - -.tooltip { - z-index: var(--z-index-tooltip); - word-break: break-word; - background-color: var(--color-bg-default); - filter: drop-shadow(0 4px 10px rgb(0 0 0 / 14%)); - border-radius: var(--border-radius-default); - transform: translateZ(0); -} - -@each $name, $width in $tooltip-max-width { - .tooltip--#{$name} { - max-width: $width; - } -} - -.tooltip__arrow { - z-index: 1; - - .tooltip[data-placement='top'] &.tooltip__arrow--stroke { - top: calc(100% - 4px) !important; - } - - .tooltip[data-placement='bottom'] &.tooltip__arrow--stroke { - bottom: calc(100% - 4px) !important; - } - - .tooltip[data-placement='right'] &.tooltip__arrow--stroke { - right: calc(100% - 8px) !important; - } - - .tooltip[data-placement='left'] &.tooltip__arrow--stroke { - left: calc(100% - 8px) !important; - } -} - -.tooltip__trigger:not(button, a) { - cursor: default; - user-select: text; -} - -.tooltip__trigger--click { - cursor: pointer; -} diff --git a/libs/react-components/src/community/components/tooltip/tooltip.stories.tsx b/libs/react-components/src/community/components/tooltip/tooltip.stories.tsx deleted file mode 100644 index 669d1be99..000000000 --- a/libs/react-components/src/community/components/tooltip/tooltip.stories.tsx +++ /dev/null @@ -1,255 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Icon } from '../../../tedi/components/base/icon/icon'; -import { Col, Row } from '../../../tedi/components/layout/grid'; -import Anchor from '../anchor/anchor'; -import Button from '../button/button'; -import { Card, CardContent } from '../card'; -import Toggle from '../form/toggle/toggle'; -import Heading from '../typography/heading/heading'; -import Tooltip, { TooltipProps } from './tooltip'; -import TooltipProvider, { TooltipProviderProps } from './tooltip-provider'; -import TooltipTrigger from './tooltip-trigger'; - -const meta: Meta<TemplateProps> = { - component: TooltipProvider, - title: 'Community/Tooltip', - subcomponents: { Tooltip, TooltipTrigger } as never, - parameters: { - layout: 'padded', - status: { - type: ['deprecated', 'ExistsInTediReady'], - }, - }, -}; - -export default meta; -type Story = StoryObj<TemplateProps>; - -interface TemplateProps extends TooltipProviderProps { - trigger?: JSX.Element; - tooltipProps?: Partial<TooltipProps>; -} - -const Template: StoryFn<TemplateProps> = (args) => { - const { trigger, tooltipProps, ...rest } = args; - return ( - <div className="text-center"> - <TooltipProvider {...rest}> - <TooltipTrigger>{trigger || <span>Very long Tooltip Trigger</span>}</TooltipTrigger> - <Tooltip {...tooltipProps}>{tooltipProps?.children || 'Tooltip Content'}</Tooltip> - </TooltipProvider> - </div> - ); -}; - -export const Default: Story = { - render: Template, - - args: {}, -}; - -export const OpenWithClick: Story = { - render: Template, - - args: { - openWith: 'click', - }, -}; - -export const DefaultOpen: Story = { - render: Template, - - args: { - defaultOpen: true, - }, -}; - -export const OuterControlled: Story = { - render: Template, - - args: { - open: true, - onToggle: (open) => console.log(open), - }, -}; - -export const TriggerIcon: Story = { - render: Template, - - args: { - trigger: <Icon name="info" display="inline" />, - }, -}; - -export const TriggerButton: Story = { - render: Template, - - args: { - trigger: <Button onClick={() => console.log('onClick action triggered')}>Hover me</Button>, - }, -}; - -export const TriggerAnchor: Story = { - render: Template, - - args: { - trigger: <Anchor onClick={() => console.log('onClick action triggered')}>Hover me</Anchor>, - }, -}; - -export const TriggerToggle: Story = { - render: Template, - - args: { - trigger: ( - <Toggle - ariaLabel="Some toggle" - label="test" - onChange={() => console.log('Toggle clicked - Action should be not made when Tooltip is shown on click')} - checked={true} - /> - ), - openWith: 'click', - }, -}; - -export const TriggerCardCustomContent: Story = { - render: Template, - - args: { - ...Default.args, - trigger: ( - <Card> - <CardContent> - Whole card <br /> can trigger tooltip - </CardContent> - </Card> - ), - tooltipProps: { - children: ( - <Row> - <Col width="auto"> - <Icon name="person" /> - </Col> - <Col width="auto"> - <Heading>You can add any content to Tooltip!</Heading> - <Anchor href="https://www.w3schools.com" target="_blank"> - Even links! - </Anchor> - </Col> - </Row> - ), - }, - }, -}; - -/** - * Tooltip accepts CardProps to Card which wraps TooltipContent.<br /> - * This can be used to add border, padding, background color, etc. to TooltipContent.<br /> - * **Note**: It is added to use in HeaderDropdown, use it with caution. - */ -export const WithCardBorder: Story = { - render: Template, - - args: { - ...Default.args, - openWith: 'click', - trigger: <Button visualType="tertiary">Click me</Button>, - tooltipProps: { - cardProps: { - border: 'top-primary-main', - }, - }, - }, -}; - -export const TooltipWidth: StoryFn = () => { - const tooltiptext = `Lorem ipsum dolor sit amet, consectetur adipisicing elit. Atque commodi consectetur cupiditate dolorum ex - facere harum id, impedit in maxime minus provident, ratione rem rerum sint unde veritatis voluptatibus - voluptatum!`; - - return ( - <Row justifyContent="center" gap={5}> - <Col width="auto"> - <TooltipProvider> - <TooltipTrigger> - <p>Tooltip with no width limit</p> - </TooltipTrigger> - <Tooltip maxWidth="none">{tooltiptext}</Tooltip> - </TooltipProvider> - </Col> - - <Col width="auto"> - <TooltipProvider> - <TooltipTrigger> - <p>Small tooltip width</p> - </TooltipTrigger> - <Tooltip maxWidth="small">{tooltiptext}</Tooltip> - </TooltipProvider> - </Col> - - <Col width="auto"> - <TooltipProvider> - <TooltipTrigger> - <p>Medium tooltip width</p> - </TooltipTrigger> - <Tooltip>{tooltiptext}</Tooltip> - </TooltipProvider> - </Col> - - <Col width="auto"> - <TooltipProvider> - <TooltipTrigger> - <p>Large tooltip width</p> - </TooltipTrigger> - <Tooltip maxWidth="large">{tooltiptext}</Tooltip> - </TooltipProvider> - </Col> - </Row> - ); -}; - -export const TooltipPosition: StoryFn = () => { - const tooltiptext = 'Lorem ipsum dolor sit amet'; - - return ( - <Row justifyContent="center" gap={5}> - <Col width="auto"> - <TooltipProvider placement="top"> - <TooltipTrigger> - <p>Tooltip top</p> - </TooltipTrigger> - <Tooltip>{tooltiptext}</Tooltip> - </TooltipProvider> - </Col> - - <Col width="auto"> - <TooltipProvider placement="bottom"> - <TooltipTrigger> - <p>Tooltip bottom</p> - </TooltipTrigger> - <Tooltip>{tooltiptext}</Tooltip> - </TooltipProvider> - </Col> - - <Col width="auto"> - <TooltipProvider placement="right"> - <TooltipTrigger> - <p>Tooltip right</p> - </TooltipTrigger> - <Tooltip>{tooltiptext}</Tooltip> - </TooltipProvider> - </Col> - - <Col width="auto"> - <TooltipProvider placement="left"> - <TooltipTrigger> - <p>Tooltip left</p> - </TooltipTrigger> - <Tooltip>{tooltiptext}</Tooltip> - </TooltipProvider> - </Col> - </Row> - ); -}; diff --git a/libs/react-components/src/community/components/tooltip/tooltip.tsx b/libs/react-components/src/community/components/tooltip/tooltip.tsx deleted file mode 100644 index 2b5c8d5dd..000000000 --- a/libs/react-components/src/community/components/tooltip/tooltip.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import { FloatingArrow, FloatingFocusManager, FloatingPortal } from '@floating-ui/react'; -import cn from 'classnames'; -import React from 'react'; - -import { Card, CardContent, CardProps } from '../card'; -import { getCardBorderPlacementColor } from '../card/utility'; -import { TColorsBackground, TColorsBorder } from '../commonTypes'; -import styles from './tooltip.module.scss'; -import { ARROW_HEIGHT, ARROW_WIDTH, TooltipContext } from './tooltip-provider'; - -export interface TooltipProps { - /** - * Content. - */ - children: React.ReactNode; - /** - * Additional class name. - */ - className?: string; - /** - * card props to pass down to card component. - * By default padding=0.5 & borderless=true. - * Its highly recommended to use same cardProps all over the application. - */ - cardProps?: CardProps; - /** - * Tooltips max width - * @default medium - */ - maxWidth?: 'none' | 'small' | 'medium' | 'large'; -} - -export const Tooltip = (props: TooltipProps): JSX.Element | null => { - const { children, maxWidth = 'medium', cardProps, className } = props; - const { open, x, y, strategy, focusManager, floating, arrowRef, getFloatingProps, placement, context } = - React.useContext(TooltipContext); - - const [cardBorderPlacement, cardBorderColor] = getCardBorderPlacementColor(cardProps?.border); - - const getArrowStrokeColor = (): 'none' | `var(--color-${TColorsBorder})` => { - if (cardBorderPlacement && cardBorderColor) { - return `var(--color-${cardBorderColor})`; - } - - return 'none'; - }; - - const hasArrowStroke = getArrowStrokeColor() !== 'none'; - - const getArrowFill = (): `var(--color-${TColorsBackground})` => { - if (cardProps?.background) { - return `var(--color-${cardProps?.background})`; - } - - return 'var(--color-bg-default)'; - }; - - const renderTooltip = (): JSX.Element | null => { - const content = ( - <FloatingFocusManager {...focusManager} context={context}> - <div - {...getFloatingProps({ - ref: floating, - style: { - position: strategy, - left: x ?? 0, - top: y ?? 0, - }, - className: cn(styles['tooltip'], className, { [styles[`tooltip--${maxWidth}`]]: maxWidth }), - })} - data-placement={placement} - > - <FloatingArrow - ref={(el) => (arrowRef.current = el)} - context={context} - fill={getArrowFill()} - stroke={getArrowStrokeColor()} - strokeWidth={hasArrowStroke ? 4 : 0} - className={cn(styles['tooltip__arrow'], { [styles['tooltip__arrow--stroke']]: hasArrowStroke })} - height={ARROW_HEIGHT} - width={ARROW_WIDTH} - /> - <Card padding={0.5} borderless={true} {...cardProps}> - <CardContent>{children}</CardContent> - </Card> - </div> - </FloatingFocusManager> - ); - - return open ? content : null; - }; - - return <FloatingPortal data-name="tooltip">{renderTooltip()}</FloatingPortal>; -}; - -export default Tooltip; diff --git a/libs/react-components/src/community/components/typography/heading/heading.spec.tsx b/libs/react-components/src/community/components/typography/heading/heading.spec.tsx deleted file mode 100644 index 5b153e792..000000000 --- a/libs/react-components/src/community/components/typography/heading/heading.spec.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { render } from '@testing-library/react'; - -import Heading from './heading'; - -describe('Heading', () => { - it('should render successfully', () => { - const { baseElement } = render(<Heading>Title</Heading>); - expect(baseElement).toBeTruthy(); - }); -}); diff --git a/libs/react-components/src/community/components/typography/heading/heading.stories.tsx b/libs/react-components/src/community/components/typography/heading/heading.stories.tsx deleted file mode 100644 index f62b16177..000000000 --- a/libs/react-components/src/community/components/typography/heading/heading.stories.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Col, Row } from '../../../../tedi/components/layout/grid'; -import Heading, { HeadingProps } from './heading'; - -/** - * This component is a wrapper for the `<Text>` component. It should only be used when we want to semantically render h1-h6 tags.<br /> - * The same result can be achieved by using the `<Text element="h1">`, but using this component gives a better indicator in code that we are using semantic headings.<br/> - * **NB!** Headings have dynamic font styles, which means that they have different font-size/font-weight/line-height values for desktop/mobile. - */ -const meta: Meta<typeof Heading> = { - component: Heading, - title: 'Community/Typography/Heading', - parameters: { - status: { - type: ['deprecated', 'ExistsInTediReady'], - }, - }, -}; - -export default meta; -type Story = StoryObj<typeof Heading>; - -const LevelTemplate: StoryFn<typeof Heading> = () => { - const items: HeadingProps[] = [ - { children: 'This is heading element h1', element: 'h1' }, - { children: 'This is heading element h2', element: 'h2' }, - { children: 'This is heading element h3', element: 'h3' }, - { children: 'This is heading element h4', element: 'h4' }, - { children: 'This is heading element h5', element: 'h5' }, - { children: 'This is heading element h6', element: 'h6' }, - ]; - - return ( - <div> - {items.map((args, key) => ( - <Heading key={key} {...args} /> - ))} - </div> - ); -}; - -export const Default: Story = { - args: { - children: 'This is heading', - }, -}; - -export const DifferentElements: Story = { - render: LevelTemplate, -}; - -export const CustomModifier: Story = { - args: { - children: 'This is heading element h1, with looks of h4', - modifiers: 'h4', - }, -}; - -export const SemanticHeadings: Story = { - render: () => ( - <> - <Row> - <Col> - <h1>Heading 1</h1> - </Col> - <Col> - <Heading element="h1">Heading 1</Heading> - </Col> - </Row> - <Row> - <Col> - <h2>Heading 2</h2> - </Col> - <Col> - <Heading element="h2">Heading 2</Heading> - </Col> - </Row> - <Row> - <Col> - <h3>Heading 3</h3> - </Col> - <Col> - <Heading element="h3">Heading 3</Heading> - </Col> - </Row> - <Row> - <Col> - <h4>Heading 4</h4> - </Col> - <Col> - <Heading element="h4">Heading 4</Heading> - </Col> - </Row> - <Row> - <Col> - <h5>Heading 5</h5> - </Col> - <Col> - <Heading element="h5">Heading 5</Heading> - </Col> - </Row> - <Row> - <Col> - <h6>Heading 6</h6> - </Col> - <Col> - <Heading element="h6">Heading 6</Heading> - </Col> - </Row> - </> - ), -}; diff --git a/libs/react-components/src/community/components/typography/heading/heading.tsx b/libs/react-components/src/community/components/typography/heading/heading.tsx deleted file mode 100644 index 71b3d8b15..000000000 --- a/libs/react-components/src/community/components/typography/heading/heading.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import Text, { HeadingModifiers, TextProps } from '../text/text'; - -export type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6; - -export type HeadingProps = Omit<TextProps, 'element'> & { - /** - * Semantic heading tag. h1-h6 are allowed values. - * @default h1 - */ - element?: Extract<TextProps['element'], HeadingModifiers>; -}; - -export const Heading = (props: HeadingProps) => { - const { children, element = 'h1', ...rest } = props; - - return ( - <Text element={element} {...rest}> - {children} - </Text> - ); -}; - -export default Heading; diff --git a/libs/react-components/src/community/components/typography/text/text.stories.tsx b/libs/react-components/src/community/components/typography/text/text.stories.tsx deleted file mode 100644 index 24fd8e038..000000000 --- a/libs/react-components/src/community/components/typography/text/text.stories.tsx +++ /dev/null @@ -1,438 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import { ColumnDef, createColumnHelper } from '@tanstack/react-table'; - -import { Col, Row } from '../../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../../tedi/components/layout/vertical-spacing'; -import { Table } from '../../table'; -import Text, { TextProps } from './text'; - -/** - * Text is helper component to use different color and modifiers on text.<br/> - * Modifiers prop accepts array of modifiers or single modifier. It helps you to combine modifiers if needed.<br/> - * Every modifier and color of text has its own global css class also, but using Text component is highly recommended.<br/> - * **NB!** Headings have dynamic font styles, which means that they have different font-size/font-weight/line-height values for desktop/mobile. - */ -const meta: Meta<typeof Text> = { - component: Text, - title: 'Community/Typography/Text', - parameters: { - status: { - type: ['deprecated', 'ExistsInTediReady'], - }, - }, -}; - -export default meta; -type Story = StoryObj<typeof Text>; - -interface TextTableRow { - name: string; - desktop: { - fontSize: number; - lineHeight: number; - }; - mobile: { - fontSize: number; - lineHeight: number; - }; - props: Partial<TextProps>; -} - -const DefaultRows: TextTableRow[] = [ - { - name: 'Heading 1', - desktop: { - fontSize: 2, - lineHeight: 2.875, - }, - mobile: { - fontSize: 1.5, - lineHeight: 2, - }, - props: { element: 'h1' }, - }, - { - name: 'Heading 2', - desktop: { - fontSize: 1.75, - lineHeight: 2.25, - }, - mobile: { - fontSize: 1.375, - lineHeight: 1.75, - }, - props: { element: 'h2' }, - }, - { - name: 'Heading 3', - desktop: { - fontSize: 1.5, - lineHeight: 2, - }, - mobile: { - fontSize: 1.25, - lineHeight: 1.625, - }, - props: { element: 'h3' }, - }, - { - name: 'Heading 4', - desktop: { - fontSize: 1.25, - lineHeight: 1.625, - }, - mobile: { - fontSize: 1.125, - lineHeight: 1.5, - }, - props: { element: 'h4' }, - }, - { - name: 'Heading 5', - desktop: { - fontSize: 1.125, - lineHeight: 1.5, - }, - mobile: { - fontSize: 1, - lineHeight: 1.5, - }, - props: { element: 'h5' }, - }, - { - name: 'Heading 6', - desktop: { - fontSize: 1, - lineHeight: 1.5, - }, - mobile: { - fontSize: 1, - lineHeight: 1.5, - }, - props: { element: 'h6' }, - }, - { - name: 'Body Regular', - desktop: { - fontSize: 1, - lineHeight: 1.5, - }, - mobile: { - fontSize: 1, - lineHeight: 1.5, - }, - props: { element: 'p' }, - }, - { - name: 'Body Regular Italic', - desktop: { - fontSize: 1, - lineHeight: 1.5, - }, - mobile: { - fontSize: 1, - lineHeight: 1.5, - }, - props: { modifiers: ['italic'] }, - }, - { - name: 'Body Regular Bold', - desktop: { - fontSize: 1, - lineHeight: 1.5, - }, - mobile: { - fontSize: 1, - lineHeight: 1.5, - }, - props: { modifiers: ['bold'] }, - }, - { - name: 'Body Small', - desktop: { - fontSize: 0.875, - lineHeight: 1.25, - }, - mobile: { - fontSize: 0.875, - lineHeight: 1.25, - }, - props: { modifiers: ['small'] }, - }, - { - name: 'Body Small Italic', - desktop: { - fontSize: 0.875, - lineHeight: 1.25, - }, - mobile: { - fontSize: 0.875, - lineHeight: 1.25, - }, - props: { modifiers: ['small', 'italic'] }, - }, - { - name: 'Body Small Bold', - desktop: { - fontSize: 0.875, - lineHeight: 1.25, - }, - mobile: { - fontSize: 0.875, - lineHeight: 1.25, - }, - props: { modifiers: ['small', 'bold'] }, - }, - { - name: 'Subtitles regular', - desktop: { - fontSize: 1, - lineHeight: 1.5, - }, - mobile: { - fontSize: 1, - lineHeight: 1.5, - }, - props: { modifiers: ['uppercase', 'bold'] }, - }, - { - name: 'Subtitles small', - desktop: { - fontSize: 0.875, - lineHeight: 1.25, - }, - mobile: { - fontSize: 0.875, - lineHeight: 1.25, - }, - props: { modifiers: ['uppercase', 'small'] }, - }, -]; - -const FontVariantRows: TextProps[] = [ - { children: 'roboto-300', modifiers: ['thin'] }, - { children: 'roboto-300-italic', modifiers: ['thin', 'italic'] }, - { children: 'roboto-400', modifiers: [] }, - { children: 'roboto-400-italic', modifiers: ['italic'] }, - { children: 'roboto-700', modifiers: ['bold'] }, - { children: 'roboto-700-italic', modifiers: ['bold', 'italic'] }, -]; - -const columnHelper = createColumnHelper<TextTableRow>(); - -// eslint-disable-next-line -const columns: ColumnDef<TextTableRow, any>[] = [ - columnHelper.accessor('name', { - header: 'Name', - cell: (info) => <Text {...info.row.original.props}>{info.renderValue()}</Text>, - }), - columnHelper.accessor('desktop', { - header: 'desktop', - cell: (info) => { - const { fontSize, lineHeight } = info.row.original.desktop ?? {}; - return ( - <VerticalSpacing size={0}> - <Text> - font-size: <Text element="span" modifiers="bold">{`${fontSize * 16}px/${fontSize}rem`}</Text> - </Text> - <Text> - line-height: <Text element="span" modifiers="bold">{`${lineHeight * 16}px/${lineHeight}rem`}</Text> - </Text> - </VerticalSpacing> - ); - }, - }), - columnHelper.accessor('mobile', { - header: 'mobile', - cell: (info) => { - const { fontSize, lineHeight } = info.row.original.mobile ?? {}; - return ( - <VerticalSpacing size={0}> - <Text> - font-size: <Text element="span" modifiers="bold">{`${fontSize * 16}px/${fontSize}rem`}</Text> - </Text> - <Text> - line-height: <Text element="span" modifiers="bold">{`${lineHeight * 16}px/${lineHeight}rem`}</Text> - </Text> - </VerticalSpacing> - ); - }, - }), -]; - -const DefaultTemplate: StoryFn = () => { - return ( - <Table<TextTableRow> - id="default-text-table" - data={DefaultRows} - columns={columns} - hideCardBorder - hidePagination - enableSorting={false} - /> - ); -}; - -const AlphabetTemplate: StoryFn = () => { - const etAlphabet = 'ABCDEFGHIJKLMNOPQRSŠZŽTUVWÕÄÖÜXYabcdefghijklmnopqrsšzžtuvwõäöüxy'; - const ruAlphabet = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя'; - - return ( - <VerticalSpacing> - {FontVariantRows.map(({ children, ...variant }, index) => ( - <Row key={index} alignItems="center"> - <Col width={2}>{children}</Col> - <Col> - <VerticalSpacing size={0}> - <Text {...variant}> - <Text element="span" modifiers="break-word"> - {etAlphabet} - </Text> - </Text> - <Text {...variant}> - <Text element="span" modifiers="break-word"> - {ruAlphabet} - </Text> - </Text> - </VerticalSpacing> - </Col> - </Row> - ))} - </VerticalSpacing> - ); -}; - -interface ModifiersTemplateProps { - examples: TextProps[]; -} -const ModifiersTemplate: StoryFn<ModifiersTemplateProps> = (args) => { - return ( - <VerticalSpacing> - {args.examples.map(({ children, ...rest }, key) => ( - <div key={key} style={rest.color === 'inverted' ? { background: 'var(--color-bg-inverted)' } : undefined}> - <Text {...rest}>{children}</Text> - </div> - ))} - </VerticalSpacing> - ); -}; - -export const Default: Story = { - render: DefaultTemplate, -}; - -export const Colors: StoryObj<ModifiersTemplateProps> = { - render: ModifiersTemplate, - - args: { - examples: [ - { color: 'default', children: 'Default color text' }, - { color: 'muted', children: 'Muted color text' }, - { color: 'subtle', children: 'Subtle color text' }, - { color: 'disabled', children: 'Disabled color text' }, - { color: 'inverted', children: 'Inverted color text' }, - { color: 'primary', children: 'Primary color text' }, - { color: 'positive', children: 'Positive color text' }, - { color: 'important', children: 'Important color text' }, - { color: 'warning', children: 'Warning color text' }, - ], - }, -}; - -export const Modifiers: StoryObj<ModifiersTemplateProps> = { - render: ModifiersTemplate, - - args: { - examples: [ - { modifiers: 'normal', children: 'Normal text' }, - { modifiers: 'small', children: 'Small text' }, - { modifiers: 'bold', children: 'Bold text' }, - { modifiers: 'italic', children: 'Italic text' }, - ], - }, -}; - -export const Alignment: StoryObj<ModifiersTemplateProps> = { - render: ModifiersTemplate, - - args: { - examples: [ - { modifiers: 'left', children: 'This text is left' }, - { modifiers: 'center', children: 'This text is center' }, - { modifiers: 'right', children: 'This text is right' }, - ], - }, -}; - -export const Capitalize: StoryObj<ModifiersTemplateProps> = { - render: ModifiersTemplate, - - args: { - examples: [ - { modifiers: 'capitalize', children: 'this text is Capitalized' }, - { modifiers: 'capitalize-first', children: 'this text is Capitalize-first' }, - { modifiers: 'lowercase', children: 'THIS text is Lowercase' }, - { modifiers: 'uppercase', children: 'this text is Uppercase' }, - ], - }, -}; - -const breakingLongText = - ' Honorificabilitudinitatibus califragilisticexpialidocious Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu 次の単語グレートブリテンおよび北アイルランド連合王国で本当に大きな言葉;'; - -export const Breaking: StoryObj<ModifiersTemplateProps> = { - render: ModifiersTemplate, - - args: { - examples: [ - { - modifiers: 'break-all', - children: 'Break-all' + breakingLongText, - }, - { - modifiers: 'break-word', - children: 'break-word' + breakingLongText, - }, - { - modifiers: 'nowrap', - children: 'no-wrap' + breakingLongText, - }, - ], - }, -}; - -export const WithBreakpointProps: StoryObj<ModifiersTemplateProps> = { - render: ModifiersTemplate, - - args: { - examples: [ - { - element: 'h1', - modifiers: 'small', - sm: { modifiers: 'normal' }, - md: { modifiers: 'h5' }, - lg: { modifiers: 'h3' }, - xl: { modifiers: 'h1' }, - children: 'Smaller text on smaller screens', - }, - { - modifiers: 'h1', - sm: { modifiers: 'h3' }, - md: { modifiers: 'h5' }, - lg: { modifiers: 'normal' }, - xl: { modifiers: 'small' }, - children: 'Bigger text on bigger screens', - }, - ], - }, -}; - -/** - * Displays all the different Roboto font variations that we support. In total there are 24 different font files. - * * Font weight: 300, 400, 700 - * * Font style: normal, italic - * * Characters: latin, latin-extended, cyrillic, cyrillic-extended - */ -export const FontVariants: Story = { - render: AlphabetTemplate, -}; diff --git a/libs/react-components/src/community/components/typography/text/text.tsx b/libs/react-components/src/community/components/typography/text/text.tsx deleted file mode 100644 index 04acee632..000000000 --- a/libs/react-components/src/community/components/typography/text/text.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import cn from 'classnames'; - -import { BreakpointSupport, useBreakpointProps } from '../../../helpers'; -import type { HeadingLevel } from '../heading/heading'; - -export type HeadingModifiers = `h${HeadingLevel}`; - -export type TextModifiers = - | HeadingModifiers - | 'normal' - | 'small' - | 'bold' - | 'thin' - | 'italic' - | 'center' - | 'left' - | 'right' - | 'nowrap' - | 'break-all' - | 'break-word' - | 'break-spaces' - | 'uppercase' - | 'lowercase' - | 'capitalize' - | 'capitalize-first' - | 'inline-block' - | 'inline' - | 'line-normal' - | 'line-condensed'; - -export type TextColor = - | 'default' - | 'primary' - | 'muted' - | 'subtle' - | 'disabled' - | 'inverted' - | 'positive' - | 'important' - | 'warning'; - -export type TextElement = 'div' | 'p' | 'span' | 'li' | HeadingModifiers; - -type TextBreakpointProps = { - /** - * Additional class. - */ - className?: string; - /** - * Base element. - * @default p - */ - element?: TextElement; - /** - * Single or multiple modifiers to change the text behavior. - */ - modifiers?: TextModifiers[] | TextModifiers; - /** - * Which color text should be. - * Use 'positive', 'important' or 'warning' with caution, usually they should not be in application UI. - * @default default - */ - color?: TextColor; -}; - -export interface TextProps extends BreakpointSupport<TextBreakpointProps> { - /** - * Children of the text. - */ - children: React.ReactNode; - /** - * ID attribute. - */ - id?: string; - /** - * Allows to focus the element - */ - tabIndex?: number; -} - -export const Text = (props: TextProps): JSX.Element => { - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - const { - children, - className, - tabIndex, - element: Element = 'p', - modifiers, - color, - ...rest - } = getCurrentBreakpointProps<TextProps>(props, { - tabIndex: props.id ? -1 : undefined, // when id is set on a text element we most likely want to jump to it with a reference link - }); - - const modifiersArray = typeof modifiers === 'string' ? [modifiers] : modifiers; - - const BEM = cn( - className, - modifiersArray?.map((modifier) => `text-${modifier}`), - { [`text-${color}`]: color } - ); - - return ( - <Element className={BEM} {...rest} tabIndex={tabIndex}> - {children} - </Element> - ); -}; - -export default Text; diff --git a/libs/react-components/src/community/components/vertical-progress/index.ts b/libs/react-components/src/community/components/vertical-progress/index.ts deleted file mode 100644 index 38d8392bb..000000000 --- a/libs/react-components/src/community/components/vertical-progress/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './vertical-progress'; -export * from './vertical-progress-item'; diff --git a/libs/react-components/src/community/components/vertical-progress/vertical-progress-item.stories.tsx b/libs/react-components/src/community/components/vertical-progress/vertical-progress-item.stories.tsx deleted file mode 100644 index 021fb8d25..000000000 --- a/libs/react-components/src/community/components/vertical-progress/vertical-progress-item.stories.tsx +++ /dev/null @@ -1,118 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import Button from '../button/button'; -import { Heading } from '../typography/heading/heading'; -import { Text } from '../typography/text/text'; -import { VerticalProgress, VerticalProgressItem } from '.'; - -const meta: Meta<typeof VerticalProgressItem> = { - component: VerticalProgressItem, - title: 'Community/VerticalProgress/VerticalProgressItem', -}; - -export default meta; -type Story = StoryObj<typeof VerticalProgressItem>; - -const Template: StoryFn<typeof VerticalProgressItem> = (args) => { - return ( - <VerticalProgress onItemOpen={(_id) => console.log('opened')}> - <VerticalProgressItem {...args} /> - </VerticalProgress> - ); -}; - -export const Default: Story = { - render: Template, - args: { - index: 0, - title: <Heading element="h4">Step title</Heading>, - }, -}; - -export const Active: Story = { - render: Template, - args: { - ...Default.args, - state: 'active', - children: ( - <VerticalSpacing> - <Text modifiers="bold">Custom active content</Text> - <Text> - Content can be visible in every states, application should decide which content to render and if to render. - <br /> - In active state there also should be always a next button. - </Text> - <Button>Next</Button> - </VerticalSpacing> - ), - }, -}; - -export const Completed: Story = { - render: Template, - args: { - ...Default.args, - state: 'completed', - children: ( - <VerticalSpacing> - <Text modifiers="bold">Completed content</Text> - <Text> - Content can be visible in every states, application should decide which content to render and if to render. - <br /> - In completed state there can be brief summary of step. Also There should not be any buttons or actions - usually. - </Text> - </VerticalSpacing> - ), - }, -}; - -export const Error: Story = { - render: Template, - args: { - ...Default.args, - state: 'error', - children: ( - <VerticalSpacing> - <Text modifiers="bold">Error content</Text> - <Text> - Content can be visible in every states, application should decide which content to render and if to render. - <br /> - In Error state there can be brief summary of the error. Also There should not be any buttons or actions - usually. User can move back to step by Edit button next to title. - </Text> - </VerticalSpacing> - ), - }, -}; - -export const Disabled: Story = { - render: Template, - args: { - ...Default.args, - state: 'disabled', - children: ( - <VerticalSpacing> - <Text modifiers="bold">Disabled content</Text> - <Text> - Content can be visible in every states, application should decide which content to render and if to render. - <br /> - In Disabled state there can be brief summary why this step is disabled. - <b>Usually there is no content in disabled states. </b> - <br /> <br /> - Disabled steps do not show edit button, because user should not be able to open disabled items. - </Text> - </VerticalSpacing> - ), - }, -}; - -export const DisabledWithoutContent: Story = { - render: Template, - args: { - ...Disabled.args, - state: 'disabled', - children: undefined, - }, -}; diff --git a/libs/react-components/src/community/components/vertical-progress/vertical-progress-item.tsx b/libs/react-components/src/community/components/vertical-progress/vertical-progress-item.tsx deleted file mode 100644 index a76b99445..000000000 --- a/libs/react-components/src/community/components/vertical-progress/vertical-progress-item.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import React from 'react'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { useLabels } from '../../../tedi/providers/label-provider'; -import Button from '../button/button'; -import { Card, CardContent } from '../card'; -import Icon, { IconProps } from '../icon/icon'; -import Tag, { TagProps } from '../tag/tag'; -import { VerticalProgressContext } from './vertical-progress'; - -export interface VerticalProgressItemProps { - /** - * The index of the item. Index is used to pass to onItemOpen callback - */ - index: number; - /** - * Title of the item. By design it should be visually h4 Heading component - */ - title: React.ReactNode; - /** - * VerticalProgressItem children. Its rendered out as content of the item. - * In whatever state Item is, application should handle in which state content is rendered or which content is rendered. - */ - children?: React.ReactNode; - /** - * State of the item - * - active - item is currently open item - * - completed - item is completed - * - error - item has error - * - disabled - item is disabled - * - undefined - item is not current, completed, no error and not disabled - */ - state?: 'active' | 'completed' | 'error' | 'disabled'; - /** - * Can item be toggled. If true, item can be opened with edit button. - * @default true, if state is not disabled or active - */ - isToggable?: boolean; -} - -export const VerticalProgressItemContext = React.createContext<VerticalProgressItemProps>({ - index: 0, - title: null, -}); - -export const VerticalProgressItem = (props: VerticalProgressItemProps) => { - const { children } = props; - return ( - <VerticalProgressItemContext.Provider value={props}> - <Card> - <CardContent padding={0.75} lg={{ padding: 1.5 }}> - <VerticalProgressItemHeader /> - {children && ( - <CardContent - padding={{ top: 1, right: 0, bottom: 0, left: 0 }} - lg={{ padding: { top: 2, right: 2.5, bottom: 0, left: 2.5 } }} - > - {children} - </CardContent> - )} - </CardContent> - </Card> - </VerticalProgressItemContext.Provider> - ); -}; - -const VerticalProgressItemHeader = () => { - const { title, state, index, isToggable = true } = React.useContext(VerticalProgressItemContext); - const { onItemOpen } = React.useContext(VerticalProgressContext); - const { getLabel } = useLabels(); - - const isDisabled = state === 'disabled'; - const isActive = state === 'active'; - const isToggableItem = isToggable && !isDisabled && !isActive; - - const getTagColor = (): TagProps['color'] => { - switch (state) { - case 'active': - return 'primary'; - case 'completed': - return 'positive'; - case 'error': - return 'important'; - default: - return 'default'; - } - }; - - const getTagType = (): TagProps['type'] => { - switch (state) { - case 'active': - case 'completed': - case 'error': - return 'default'; - default: - return 'ghost'; - } - }; - - const getIcon = (): IconProps['name'] => { - switch (state) { - case 'completed': - return 'check'; - case 'error': - return 'exclamation'; - default: - return 'chevron_right'; - } - }; - - return ( - <Row alignItems="center" justifyContent="between"> - <Col width="auto"> - <Row gutterX={3} gutterY={0} alignItems="center" wrap="nowrap"> - <Col width="auto"> - <Tag iconOnly rounded color={getTagColor()} type={getTagType()}> - <Icon name={getIcon()} size={16} /> - </Tag> - </Col> - <Col width="auto">{title}</Col> - </Row> - </Col> - {isToggableItem && ( - <Col width="auto"> - <Button visualType="link" iconRight="edit" onClick={() => onItemOpen(index)}> - {getLabel('vertical-progress.edit')} - </Button> - </Col> - )} - </Row> - ); -}; - -export default VerticalProgressItem; diff --git a/libs/react-components/src/community/components/vertical-progress/vertical-progress.stories.tsx b/libs/react-components/src/community/components/vertical-progress/vertical-progress.stories.tsx deleted file mode 100644 index 1a824f4e6..000000000 --- a/libs/react-components/src/community/components/vertical-progress/vertical-progress.stories.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import { faker } from '@faker-js/faker'; -import { Controls, Description, Primary, Stories, Title } from '@storybook/addon-docs'; -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import React from 'react'; - -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import Button from '../button/button'; -import Heading from '../typography/heading/heading'; -import Text from '../typography/text/text'; -import { VerticalProgress, VerticalProgressItem, VerticalProgressItemProps, VerticalProgressProps } from '.'; - -const meta: Meta<typeof VerticalProgress> = { - component: VerticalProgress, - title: 'Community/VerticalProgress', - subcomponents: { VerticalProgressItem } as never, - parameters: { - docs: { - page: () => ( - <> - <Title /> - <Description /> - <Primary /> - <Controls /> - <Stories includePrimary={false} /> - </> - ), - }, - }, -}; - -export default meta; - -const items = (isToggableFirst?: boolean): VerticalProgressItemProps[] => [ - { title: 'Step one', isToggable: isToggableFirst, index: 0 }, - { title: 'Step two', isToggable: true, index: 1 }, - { title: 'Step three is longer heading', isToggable: true, index: 2 }, - { title: 'Step four', isToggable: true, index: 3 }, -]; - -export interface VerticalProgressStory { - VerticalProgressProps: VerticalProgressProps; - items: VerticalProgressItemProps[]; - defaultActiveItem?: number; -} - -type Story = StoryObj<VerticalProgressStory>; -faker.seed(123); - -const Template: StoryFn<VerticalProgressStory> = ({ items, defaultActiveItem, VerticalProgressProps }) => { - const [activeItem, setActiveItem] = React.useState<number>(defaultActiveItem ?? 0); - const [completedItems, setCompletedItems] = React.useState<number[]>( - defaultActiveItem ? [defaultActiveItem - 1] : [] - ); - - const getItemState = (index: number): VerticalProgressItemProps['state'] => { - if (index === activeItem) { - return 'active'; - } - - if (completedItems.includes(index)) { - return 'completed'; - } - - if (activeItem < index && !completedItems.includes(index - 1)) { - return 'disabled'; - } - - return undefined; - }; - - return ( - <VerticalProgress {...VerticalProgressProps} onItemOpen={(id) => setActiveItem(id)}> - {items.map(({ title, isToggable }, index) => { - const state = getItemState(index); - const hasContent = state === 'active'; - return ( - <VerticalProgressItem - key={index} - isToggable={isToggable} - index={index} - title={<Heading element="h4">{title}</Heading>} - state={state} - > - {hasContent && ( - <VerticalProgressContent - onItemSubmit={() => { - setActiveItem(index + 1); - setCompletedItems((prev) => (prev.includes(index) ? prev : [...prev, index])); - }} - state={state} - /> - )} - </VerticalProgressItem> - ); - })} - </VerticalProgress> - ); -}; - -export const Default: Story = { - render: Template, - args: { - items: items(), - }, -}; - -export const FirstCompletedNotToggleable: Story = { - render: Template, - args: { - items: items(false), - defaultActiveItem: 1, - }, -}; - -interface VerticalProgressContentProps { - onItemSubmit: () => void; - state: VerticalProgressItemProps['state']; -} - -const VerticalProgressContent = (props: VerticalProgressContentProps) => { - const { onItemSubmit } = props; - - return ( - <VerticalSpacing> - <Text>{faker.lorem.paragraphs(4)}</Text> - <Button onClick={() => onItemSubmit()}>Save</Button> - </VerticalSpacing> - ); -}; diff --git a/libs/react-components/src/community/components/vertical-progress/vertical-progress.tsx b/libs/react-components/src/community/components/vertical-progress/vertical-progress.tsx deleted file mode 100644 index 4df351f62..000000000 --- a/libs/react-components/src/community/components/vertical-progress/vertical-progress.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; - -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; - -export interface VerticalProgressProps { - /** - * VerticalProgress children (VerticalProgressItem) - */ - children: React.ReactNode; - /** - * Callback when an item is opened - */ - onItemOpen: (index: number) => void; -} - -export interface IVerticalProgressContext { - onItemOpen: (index: number) => void; -} - -export const VerticalProgressContext = React.createContext<IVerticalProgressContext>({ - onItemOpen: () => null, -}); - -/** - * VerticalProgress is meant to be used with multi step Forms. It provides a visual representation of the steps and - * allows the user to navigate between them. Visually it's recommended to use <b>TableOfContent</b> component next to VerticalProgress to help user navigate <br /> - * Logic how the user can navigate between items is up to application. For example:<br /> - * - User can freely navigate between items back and forth - * - User can only navigate to next item when current item is completed and come back to previous items - * - * VerticalProgressItems can have 5 states: 'active', 'completed', 'error', 'disabled' and undefined. <br /> - * - active - Currently open item. No edit button is shown - * - completed - Item is completed. Edit button is shown when isToggable != false - * - error - Item has error. Edit button is shown when isToggable != false - * - disabled - Item is disabled, user can't yet move to this step. Edit button is not shown - * - undefined - Item is not current, completed, no error and not disabled. Edit button is shown when isToggable != false - * - * Every verticalProgressItem can have content, means that completed,disabled etc. state can also have cotent under Title - */ -export const VerticalProgress = (props: VerticalProgressProps) => { - const { children, onItemOpen } = props; - - return ( - <VerticalProgressContext.Provider value={{ onItemOpen }}> - <VerticalSpacing size={0.5}>{children}</VerticalSpacing> - </VerticalProgressContext.Provider> - ); -}; - -export default VerticalProgress; diff --git a/libs/react-components/src/community/components/vertical-stepper/index.ts b/libs/react-components/src/community/components/vertical-stepper/index.ts deleted file mode 100644 index 2f52d06e6..000000000 --- a/libs/react-components/src/community/components/vertical-stepper/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './step-item/step-item'; -export * from './vertical-stepper'; -export * from './sub-item/sub-item'; diff --git a/libs/react-components/src/community/components/vertical-stepper/step-item/step-item.tsx b/libs/react-components/src/community/components/vertical-stepper/step-item/step-item.tsx deleted file mode 100644 index 723abaa5a..000000000 --- a/libs/react-components/src/community/components/vertical-stepper/step-item/step-item.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Col, Row } from '../../../../tedi'; -import { Icon } from '../../../../tedi/components/base/icon/icon'; -import Collapse from '../../../../tedi/components/buttons/collapse/collapse'; -import styles from '../vertical-stepper.module.scss'; - -export interface StepItemProps { - /** - * SubItems - */ - children?: React.ReactNode; - /** - * Custom class name. - */ - className?: string; - - /** Shows the current step */ - isSelected?: boolean; - hasNumber?: boolean; - /**Step title text */ - title: string | React.ReactNode; - href?: string; - state?: 'default' | 'completed' | 'error' | 'disabled'; - hasIcon?: boolean; - onClick?: () => void; - /** - * Additional info components like StatusBadge, Button, Link or Text. - */ - info?: React.ReactNode; -} - -export const StepItem = ({ - children, - className, - isSelected, - hasIcon, - title, - href, - onClick, - state = 'default', - info, -}: StepItemProps): JSX.Element => { - const [open, selected] = React.useState(false); - const stepItemClassName = cn( - styles['stepper-item'], - { - [styles[state]]: state, - [styles['selected']]: isSelected, - [styles['has-info']]: info && !children, - [styles['info-with-children']]: info && children, - [styles['stepper-collapse-open']]: open, - }, - className - ); - - return ( - <li role="treeitem" aria-selected={isSelected} className={stepItemClassName}> - <span className={styles['stepper-counter']}></span> - <div className={styles['stepper-content']}> - {children ? ( - <Collapse - onToggle={(isOpen) => selected(isOpen)} - open={open} - hideCollapseText - id="vertical-stepper-collapse" - className={styles['stepper-item-collapse']} - title={ - <> - <Row alignItems="start"> - <Col className={styles['stepper-link']}> - {title} - {hasIcon && state === 'error' && ( - <Icon - name="error" - color="danger" - size={16} - display="inline" - className={styles['radio__tooltip-icon']} - /> - )} - {hasIcon && state === 'completed' && ( - <Icon - name="check" - color="success" - size={16} - display="inline" - className={styles['radio__tooltip-icon']} - /> - )} - </Col> - </Row> - <Row> - <Col>{info}</Col> - </Row> - </> - } - > - {children && <ul className={styles['sub-item-list']}>{children}</ul>} - </Collapse> - ) : ( - <> - <div className={styles['stepper-link-container']}> - <a - href={href} - onClick={(e) => { - e.preventDefault(); - if (onClick) { - onClick(); - } - }} - className={styles['stepper-link']} - > - {title} - </a> - <span className={styles['stepper-link-icon']}> - {hasIcon && state === 'error' && <Icon name="error" color="danger" size={16} display="inline" />} - {hasIcon && state === 'completed' && <Icon name="check" color="success" size={16} display="inline" />} - </span> - </div> - <Row> - <Col>{info}</Col> - </Row> - </> - )} - </div> - <div className={styles['stepper-line']}></div> - </li> - ); -}; diff --git a/libs/react-components/src/community/components/vertical-stepper/sub-item/sub-item.tsx b/libs/react-components/src/community/components/vertical-stepper/sub-item/sub-item.tsx deleted file mode 100644 index ae87d7bd5..000000000 --- a/libs/react-components/src/community/components/vertical-stepper/sub-item/sub-item.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import cn from 'classnames'; - -import { Icon } from '../../../../tedi/components/base/icon/icon'; -import styles from '../vertical-stepper.module.scss'; - -export interface SubItemProps { - /** - * Additional info components like StatusBadge, Button, Link or Text. - */ - children?: React.ReactNode; - /** - * Custom class name. - */ - className?: string; - isSelected?: boolean; - state?: 'default' | 'completed' | 'error' | 'disabled' | 'informative'; - hasIcon?: boolean; - title: string | React.ReactNode; - href?: string; - onClick?: () => void; - as?: 'a' | 'button'; -} - -export const SubItem = ({ - children, - className, - state = 'default', - isSelected, - hasIcon, - title, - href, - as = 'a', - onClick, -}: SubItemProps): JSX.Element => { - const Element = as; - - const subItemClassName = cn( - styles['sub-item'], - { - [styles[state]]: state, - [styles['selected']]: isSelected, - }, - className - ); - - return ( - <> - <li role="treeitem" className={subItemClassName} aria-selected={isSelected}> - <span className={styles['sub-item-dot-container']}> - <span className={styles['sub-item-dot']}></span> - </span> - - <span className={styles['sub-item-text']}> - <Element href={href} onClick={onClick} className={styles['sub-item-link']}> - {title} - </Element> - - {hasIcon && state === 'error' && ( - <Icon name="error" color="danger" size={16} display="inline" className={styles['radio__tooltip-icon']} /> - )} - - {hasIcon && state === 'completed' && ( - <Icon name="check" color="success" size={16} display="inline" className={styles['radio__tooltip-icon']} /> - )} - </span> - </li> - <div>{children}</div> - </> - ); -}; diff --git a/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.module.scss b/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.module.scss deleted file mode 100644 index b405e5ab4..000000000 --- a/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.module.scss +++ /dev/null @@ -1,610 +0,0 @@ -// ================== -// STEPPER CONTAINER -// ================== -.stepper { - display: flex; - flex-direction: column; - counter-reset: stepper; -} - -// ================== -// STEP-ITEM -// ================== -.stepper-item { - position: relative; - display: grid; - grid-template-rows: [text-row] auto [line-row] 0; - grid-template-columns: [counter-column] 24px [text-column] auto; - gap: 0 16px; - padding-bottom: 12px; - counter-increment: stepper; - - &:not(:has(+ .stepper-item)) { - padding-bottom: 0; - - &::before { - height: calc(100% - 20px); - } - } - - // ===== VERTICAL LINE ===== - &::before { - position: absolute; - top: 0; - left: 12px; - width: 1px; - height: 100%; - content: ' '; - background-color: var(--general-border-secondary); - transform-origin: 50% -100%; - } - - &:last-child { - &::before { - height: calc(100% - 25px); - } - } - - &:has(+ .stepper-separator) { - &::before { - height: 0; - } - } - - &.info-with-children { - &::before { - height: calc(100% - 25px); - } - } - - &.stepper-collapse-open:not(:has(+ .stepper-item)) { - &::before { - height: calc(100% - 20px); - } - } - - .stepper-line { - height: 12px; - } - - // ===== STATE MODIFIERS ===== - &.completed, - &.error, - &.disabled, - &.default, - &.selected { - .stepper-counter, - .stepper-link { - cursor: pointer; - transition: all 0.2s ease; - } - } - - &.completed { - .stepper-counter { - color: var(--color-white); - background-color: var(--color-positive-active); - } - - .stepper-link { - color: var(--color-text-default); - } - - &:hover { - .stepper-counter { - background-color: var(--green-800); - } - - .stepper-link { - color: var(--color-primary-active); - text-decoration: underline; - text-decoration-thickness: 1px; - } - } - } - - &.error { - .stepper-counter { - color: var(--color-white); - background-color: var(--color-important-active); - } - - .stepper-link { - color: var(--color-text-default); - } - - &:hover { - .stepper-counter { - background-color: var(--red-800); - } - - .stepper-link { - color: var(--color-primary-active); - text-decoration: underline; - text-decoration-thickness: 1px; - } - } - } - - &.disabled { - .stepper-counter { - color: var(--color-text-disabled); - background-color: var(--color-bg-disabled); - border: 1px solid var(--general-border-secondary); - } - - .stepper-link { - color: var(--color-text-disabled); - cursor: default; - } - } - - &.default { - .stepper-counter { - color: var(--color-text-muted); - background-color: var(--color-white); - border: 1px solid var(--general-border-secondary); - } - - .stepper-link { - color: var(--color-text-default); - } - - &:hover { - .stepper-counter { - border-color: var(--color-primary-main); - } - - .stepper-link { - color: var(--color-primary-active); - text-decoration: underline; - text-decoration-thickness: 1px; - } - } - } - - &.selected { - .stepper-counter { - color: var(--color-primary-active); - background-color: var(--color-white); - border: 2px solid var(--color-primary-active); - } - - .stepper-link { - font-weight: bold; - color: var(--color-primary-active); - } - - &:hover { - .stepper-counter { - border-color: var(--blue-800); - } - - .stepper-link { - text-decoration: underline; - text-decoration-thickness: 1px; - } - } - } -} - -// ================== -// STEP CONTENT -// ================== -.stepper-content { - display: flex; - flex-direction: column; - gap: 0; - - .stepper-item-collapse { - button span { - align-items: flex-start !important; - color: var(--color-text-default); - } - } -} - -.stepper-counter { - position: relative; - display: flex; - flex-shrink: 0; - align-items: center; - justify-content: center; - width: 24px; - height: 24px; - font-weight: 400; - color: var(--color-white); - background-color: var(--color-text-default); - border-radius: 50%; - - &::before { - position: absolute; - top: 50%; - left: 50%; - font-size: 14px; - content: counter(stepper); - transform: translate(-50%, -50%); - } -} - -.stepper-link { - display: flex; - align-items: center; - color: var(--color-text-default); - text-decoration: none; - - span { - margin-left: 6px; - } - - &:hover span { - border-color: var(--general-border-secondary); - } -} - -// ================== -// SUB-ITEM -// ================== -.sub-item-list { - position: relative; - left: -28px; - display: flex; - flex-direction: column; - gap: 0; - min-height: 12px; - padding-left: 12px; - margin: 0; - list-style: none; - - > :not(.sub-item, .sub-item-children, .sub-item-dot) { - width: fit-content; - margin-left: 16px; - } - - .sub-item-children { - margin-left: 18px; - } -} - -.sub-item { - display: flex; - gap: 8px; - align-items: center; - padding: 3px 0; - cursor: pointer; - - .sub-item-dot-container { - position: relative; - left: -17px; - width: 10px; - height: 10px; - border: 1px solid var(--color-white); - border-radius: 50%; - } - - .sub-item-dot { - position: absolute; - width: 9px; - height: 9px; - background-color: var(--color-white); - border: 1px solid var(--general-border-secondary); - border-radius: 50%; - } - - .sub-item-text { - display: flex; - align-items: center; - - & span { - margin-left: 6px; - } - } - - .sub-item-text a, - .sub-item-text button { - font-size: 16px; - color: var(--color-text-default); - text-decoration: none; - } - - .sub-item-text button { - padding: 0; - text-align: left; - background: none; - border: none; - } - - &:hover { - .sub-item-dot { - border-color: var(--color-primary-active); - } - - .sub-item-text a, - .sub-item-text button { - color: var(--color-primary-active); - text-decoration: underline; - text-decoration-thickness: 1px; - cursor: pointer; - } - } - - // ===== SUB ITEM STATES ===== - &.completed { - .sub-item-dot { - background-color: var(--color-positive-active); - border-color: var(--color-positive-active); - } - - &:hover .sub-item-dot { - background-color: var(--green-800); - border-color: var(--green-800); - } - } - - &.error { - .sub-item-dot { - background-color: var(--color-important-active); - border-color: var(--color-important-active); - } - - &:hover .sub-item-dot { - background-color: var(--red-800); - border-color: var(--red-800); - } - } - - &.disabled { - .sub-item-dot { - color: var(--color-text-disabled); - background-color: var(--color-bg-disabled); - border-color: var(--general-border-secondary); - } - - .sub-item-text a, - .sub-item-text button { - color: var(--color-text-disabled); - cursor: default; - } - - &:hover .sub-item-text a, - .sub-item-text button { - text-decoration: none; - } - } - - &.default { - .sub-item-dot { - color: var(--color-text-muted); - background-color: var(--color-white); - border-color: var(--general-border-secondary); - } - } - - &.default:hover .sub-item-dot { - border-color: var(--color-primary-active); - } - - &.selected { - .sub-item-dot { - color: var(--color-primary-active); - background-color: var(--color-white); - border: 2px solid var(--color-primary-active); - } - - .sub-item-text a, - .sub-item-text button { - font-weight: bold; - color: var(--color-primary-active); - } - - &:hover .sub-item-dot { - border-color: var(--blue-800); - } - - &:hover .sub-item-text a, - .sub-item-text button { - color: var(--blue-800); - } - } -} - -// ================== -// COMPACT VARIANT -// ================== -.stepper--compact .stepper-item { - grid-template-columns: [counter-column] 16px [text-column] auto; - - &:last-child { - &::before { - height: calc(100% - 20px); - } - } - - &.has-info:not(:has(+ .stepper-item)) { - &::before { - height: 1px; - } - } - - &.info-with-children { - &::before { - height: calc(100% - 20px); - } - } - - &:not(:has(+ .stepper-item)) { - &::before { - height: 0; - } - } - - &.stepper-collapse-open:not(:has(+ .stepper-item)) { - &::before { - height: calc(100% - 20px); - } - } -} - -/* ===== CHECKMARK ===== */ -.stepper--compact .stepper-item.completed .stepper-counter::before { - top: 2px; - left: 5.5px; - display: inline-block; - width: 5px; - height: 9px; - content: ''; - border-right: 2px solid var(--color-white); - border-bottom: 2px solid var(--color-white); - transform: rotate(45deg); -} - -/* ===== EXCLAMATION ICON ===== */ -.stepper--compact .stepper-item.error .stepper-counter::before { - font-size: 12px; - font-weight: bold; - content: '!'; -} - -.stepper--compact .stepper-item.selected .stepper-counter { - color: var(--color-primary-active); - background-color: var(--color-white); - border: 2px solid var(--color-primary-active); -} - -.stepper--compact .stepper-item .stepper-counter { - width: 16px; - height: 16px; - font-size: 0; -} - -.stepper--compact .stepper-item .stepper-counter::before { - content: none; -} - -.stepper--compact .stepper-item::before { - top: 10px; - left: 8px; -} - -/* ================== - COMPACT SUB-ITEM - ================== */ -.stepper--compact .stepper-item .sub-item-list { - left: -32px; -} - -.stepper--compact .stepper-content { - margin-top: -4px; -} - -.stepper--compact .stepper-item .sub-item { - padding: 3px 0; -} - -.stepper--compact .stepper-item .sub-item .sub-item-dot-container { - left: -9px; - width: 10px; - height: 10px; -} - -.stepper--compact .stepper-item .sub-item .sub-item-dot { - width: 9px; - height: 9px; - - &:hover { - border-color: var(--color-primary-main); - } -} - -.stepper--compact .stepper-item .sub-item:hover .sub-item-text a, -.stepper--compact .stepper-item .sub-item:hover .sub-item-text button { - color: var(--color-primary-active); - text-decoration: underline; - text-decoration-thickness: 1px; -} - -/* ===== COMPACT SUB ITEM STATES ===== */ -.stepper--compact .stepper-item .sub-item.completed .sub-item-dot { - background-color: var(--color-positive-active); - border-color: var(--color-positive-active); -} - -.stepper--compact .stepper-item .sub-item.completed:hover .sub-item-dot { - background-color: var(--green-800); - border-color: var(--green-800); -} - -.stepper--compact .stepper-item .sub-item.error .sub-item-dot { - background-color: var(--color-important-active); - border-color: var(--color-important-active); -} - -.stepper--compact .stepper-item .sub-item.error:hover .sub-item-dot { - background-color: var(--red-800); - border-color: var(--red-800); -} - -.stepper--compact .stepper-item .sub-item.disabled .sub-item-dot { - color: var(--color-text-disabled); - background-color: var(--color-bg-disabled); - border-color: var(--general-border-secondary); -} - -.stepper--compact .stepper-item.disabled .stepper-counter { - border: 1px solid var(--general-border-secondary); -} - -.stepper--compact .stepper-item .sub-item.disabled .sub-item-text a, -.stepper--compact .stepper-item .sub-item.disabled .sub-item-text button { - color: var(--color-text-disabled); - cursor: default; -} - -.stepper--compact .stepper-item .sub-item.disabled:hover .sub-item-text a, -.stepper--compact .stepper-item .sub-item.disabled:hover .sub-item-text button { - text-decoration: none; -} - -.stepper--compact .stepper-item .sub-item.default .sub-item-dot { - color: var(--color-text-muted); - background-color: var(--color-white); - border-color: var(--general-border-secondary); - - &:hover { - border-color: var(--color-primary-main); - } -} - -.stepper--compact .stepper-item .sub-item.default:hover .sub-item-dot { - border-color: var(--color-primary-main); -} - -.stepper--compact .stepper-item .sub-item.selected .sub-item-dot { - color: var(--color-primary-active); - background-color: var(--color-white); - border: 2px solid var(--color-primary-active); -} - -.stepper--compact .stepper-item .sub-item.selected .sub-item-text a, -.stepper--compact .stepper-item .sub-item.selected .sub-item-text button { - font-weight: bold; - color: var(--color-primary-active); -} - -.stepper--compact .stepper-item .sub-item.selected:hover .sub-item-dot { - border-color: var(--color-primary-active); -} - -.stepper--compact .stepper-link { - padding-top: 0; - cursor: pointer; -} - -.stepper--compact .stepper-link-container { - display: flex; - align-items: center; - - & .stepper-link-icon { - margin-left: 6px; - } -} diff --git a/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.stories.tsx b/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.stories.tsx deleted file mode 100644 index 0bb9e560e..000000000 --- a/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.stories.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import { Meta, StoryFn } from '@storybook/react'; - -import { StatusBadge, Text, VerticalSpacing } from '../../../tedi'; -import Separator from '../../../tedi/components/misc/separator/separator'; -import { StepItem, VerticalStepper } from '.'; -import { SubItem } from './sub-item/sub-item'; - -const meta: Meta<typeof VerticalStepper> = { - component: VerticalStepper, - title: 'Community/VerticalStepper', - subcomponents: { StepItem, SubItem } as never, - parameters: { - docs: { - description: { - component: 'Vertical Stepper with StepItem and SubItem. Currently supports desktop only. ', - }, - }, - }, -}; - -export default meta; - -const Template: StoryFn<typeof VerticalStepper> = ({ isCompact = false }) => ( - <div style={{ width: 350 }}> - <VerticalSpacing size={4}> - <VerticalStepper isCompact={isCompact}> - <StepItem title="Suhtlemine" isSelected> - <SubItem title="Sotsiaalsed suhted" state="completed" as="button"> - <StatusBadge color="warning" variant="filled"> - Mõõdukas probleem - </StatusBadge> - </SubItem> - <SubItem title="Ametlikud suhted" state="error" hasIcon> - <StatusBadge color="neutral" variant="filled"> - Probleem puudub - </StatusBadge> - </SubItem> - <SubItem title="Kognitiivne võimekus" state="informative"></SubItem> - <SubItem title="Psüühiline seisund" isSelected> - <Text color="tertiary">Täidab ametnik</Text> - </SubItem> - <SubItem title="Riskivaldkonnad" state="disabled"></SubItem> - <SubItem title="Tervise eest hoolitsemine" state="informative"></SubItem> - </StepItem> - <StepItem - title="Vaimne tervis" - state="completed" - hasIcon - info={ - <StatusBadge color="warning" variant="filled"> - Mõõdukas probleem - </StatusBadge> - } - > - <SubItem title="Sobiva eluaseme leidmine"></SubItem> - - <SubItem title="Riskivaldkonnad"></SubItem> - </StepItem> - <Separator className="stepper-separator" spacing={1} /> - <StepItem title="Elukeskkond" state="completed"> - <SubItem title="Sobiva eluaseme leidmine"></SubItem> - </StepItem> - <StepItem title="Hõivatus" state="error" hasIcon> - <SubItem title="Rakenduse leidmine ja säiilitamine"></SubItem> - </StepItem> - <StepItem title="Vaba aeg ja huvitegevus ja peresisesed suhted" state="default"></StepItem> - <StepItem title="Igapäevaelu toimingud" state="disabled"></StepItem> - <StepItem title="Mitteametlik abi"> - <SubItem title="Abi perekonnalt" state="completed"></SubItem> - <SubItem title="Abi sõpradelt ja tuttavatelt" state="error"></SubItem> - <SubItem title="Tervisevaldkonna teenused"></SubItem> - <SubItem as="button" title="Haridusvaldkonna teenused" isSelected></SubItem> - - <SubItem title="Tööhõive valdkonna teenused" state="disabled"></SubItem> - <SubItem title="Muu abi" state="informative"></SubItem> - <SubItem title="Muu abi 2"></SubItem> - </StepItem> - <StepItem - title="Vaba aeg ja huvitegevus" - state="default" - info={ - <StatusBadge color="warning" variant="filled"> - Mõõdukas probleem - </StatusBadge> - } - ></StepItem> - <StepItem title="Vaba aeg ja huvitegevus ja peresisesed suhted" state="default"></StepItem> - </VerticalStepper> - </VerticalSpacing> - </div> -); - -export const Default = Template.bind({}); -Default.args = { isCompact: false }; - -export const Compact = Template.bind({}); -Compact.args = { isCompact: true }; diff --git a/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.tsx b/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.tsx deleted file mode 100644 index 3a3e4691c..000000000 --- a/libs/react-components/src/community/components/vertical-stepper/vertical-stepper.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import cn from 'classnames'; - -import styles from './vertical-stepper.module.scss'; - -export interface VerticalStepperProps { - /** - * SubItem or Separator - */ - children: React.ReactNode; - /** - * Custom class name. - */ - className?: string; - /** Compact version of the stepper */ - isCompact?: boolean; -} - -export const VerticalStepper = (props: VerticalStepperProps): JSX.Element => { - const { className, children, isCompact } = props; - - const StepperBEM = cn(styles['stepper'], className, { [styles['stepper--compact']]: isCompact }); - - return ( - <nav> - <ol role="tree" className={StepperBEM}> - {children} - </ol> - </nav> - ); -}; - -export default VerticalStepper; diff --git a/libs/react-components/src/community/docs/buttons/button-groups.mdx b/libs/react-components/src/community/docs/buttons/button-groups.mdx deleted file mode 100644 index 988eda907..000000000 --- a/libs/react-components/src/community/docs/buttons/button-groups.mdx +++ /dev/null @@ -1,9 +0,0 @@ -import { Meta, Unstyled } from '@storybook/blocks'; - -import ButtonGroups from './button-groups.tsx'; - -<Meta name="ButtonGroups" title="Documentation/Buttons/ButtonGroups" /> - -<Unstyled> - <ButtonGroups /> -</Unstyled> diff --git a/libs/react-components/src/community/docs/buttons/button-groups.tsx b/libs/react-components/src/community/docs/buttons/button-groups.tsx deleted file mode 100644 index 502d89a7d..000000000 --- a/libs/react-components/src/community/docs/buttons/button-groups.tsx +++ /dev/null @@ -1,283 +0,0 @@ -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import { Separator } from '../../../tedi/components/misc/separator/separator'; -import { Button, Card, CardContent, Heading, Text } from '../../index'; - -const ButtonGroups = () => ( - <VerticalSpacing> - <Card borderless={true}> - <CardContent> - <VerticalSpacing> - <Heading>Button group</Heading> - <Heading element="h2">Button hierarchy and alignment within a group</Heading> - <p> - All buttons have their priority in the context of a page or a process and are placed according to the - hierarchy. - </p> - <ul> - <li> - <b>Primary buttons</b> represent the main action you want users to take on a given page or screen. They - are the most prominent buttons. - </li> - <li> - <b>Secondary buttons</b> represent an alternative, less important action that users can take. - </li> - <li> - <b>Tertiary buttons</b> represent actions that are helpful but not critical. - </li> - </ul> - <p>Spacing between buttons is 12px.</p> - <Horizontal /> - <Vertical /> - </VerticalSpacing> - </CardContent> - </Card> - <Separator spacing={5} /> - <Card borderless={true} background="bg-muted"> - <CardContent> - <VerticalSpacing size={2.5}> - <ButtonGroupAlignment /> - <RightAlignment /> - <RightAlignmentBack /> - <CentralAlignment /> - <LeftAlignment /> - </VerticalSpacing> - </CardContent> - </Card> - </VerticalSpacing> -); - -const Horizontal = () => ( - <Row> - <Col lg={8}> - <Card background="bg-muted" borderless={true}> - <CardContent> - <VerticalSpacing size={2}> - <Row direction="row-reverse" alignItems="center" gutterX={1} gap={2}> - <Col width="auto"> - <Text color="subtle">1</Text> - </Col> - <Col width="auto"> - <Button>Primary</Button> - </Col> - <Col width="auto"> - <Button visualType="secondary">Secondary</Button> - </Col> - <Col width="auto"> - <Button visualType="tertiary">Tertiary</Button> - </Col> - </Row> - <Row direction="row-reverse" alignItems="center" gutterX={1} gap={2}> - <Col width="auto"> - <Text color="subtle">2</Text> - </Col> - <Col width="auto"> - <Button>Primary</Button> - </Col> - <Col width="auto"> - <Button visualType="tertiary">Tertiary</Button> - </Col> - </Row> - <Row direction="row-reverse" alignItems="center" gutterX={1} gap={2}> - <Col width="auto"> - <Text color="subtle">3</Text> - </Col> - <Col width="auto"> - <Button visualType="secondary">Secondary</Button> - </Col> - <Col width="auto"> - <Button visualType="tertiary">Tertiary</Button> - </Col> - </Row> - </VerticalSpacing> - </CardContent> - </Card> - </Col> - <Col lg={4}> - <VerticalSpacing size={0.5}> - <Text modifiers="bold">Horizontal</Text> - <Text> - The primary button is always on the right, followed by secondary and then tertiary. The design does not have - to have all 3 button types. - </Text> - </VerticalSpacing> - </Col> - </Row> -); - -const Vertical = () => ( - <Row> - <Col lg={8}> - <Card background="bg-muted" borderless={true}> - <CardContent> - <Row justifyContent="center"> - <Col width="auto"> - <Row direction="column" alignItems="center" gutterX={1} gap={2}> - <Col width="auto"> - <Text color="subtle">1</Text> - </Col> - <Col width="auto"> - <Button>Primary</Button> - </Col> - <Col width="auto"> - <Button visualType="secondary">Secondary</Button> - </Col> - <Col width="auto"> - <Button visualType="tertiary">Tertiary</Button> - </Col> - </Row> - </Col> - <Col width="auto"> - <Row direction="column" alignItems="center" gutterX={1} gap={2}> - <Col width="auto"> - <Text color="subtle">2</Text> - </Col> - <Col width="auto"> - <Button>Primary</Button> - </Col> - <Col width="auto"> - <Button visualType="tertiary">Tertiary</Button> - </Col> - </Row> - </Col> - <Col width="auto"> - <Row direction="column" alignItems="center" gutterX={1} gap={2}> - <Col width="auto"> - <Text color="subtle">3</Text> - </Col> - <Col width="auto"> - <Button visualType="secondary">Secondary</Button> - </Col> - <Col width="auto"> - <Button visualType="tertiary">Tertiary</Button> - </Col> - </Row> - </Col> - </Row> - </CardContent> - </Card> - </Col> - <Col lg={4}> - <VerticalSpacing size={0.5}> - <Text modifiers="bold">Vertical</Text> - <Text> - The primary button is always on the top, followed by secondary and then tertiary. The design does not have to - have all 3 button types. - </Text> - </VerticalSpacing> - </Col> - </Row> -); - -const ButtonGroupAlignment = () => ( - <VerticalSpacing> - <Heading element="h2">Button group alignment</Heading> - <p> - Buttons and button groups primarily use right alignment. This helps maintain a consistent flow, particularly for - interfaces that are read left-to-right. - </p> - <ul> - <li> - <b>Right alignment</b> - <br /> All button examples: Submit, Accept, Next, Save etc. - </li> - <li> - <b>Right alignment + back action</b> - <br /> Back action button examples: Back, Cancel. - </li> - <li> - <b>Central alignment</b> - <br /> Central button examples: Show more, Load more. - </li> - </ul> - </VerticalSpacing> -); - -const RightAlignment = () => ( - <VerticalSpacing> - <Heading element="h3">Right alignment</Heading> - <p> - Right alignment of buttons is the default and should be used in most cases across the designs. <br /> - On mobile or in a small space: - <ul> - <li> - if buttons fit in one row: - <ul> - <li>button alignment right,</li> - <li>button alignment centre,</li> - <li>button alignment centre : vertically</li> - </ul> - </li> - <li> - If buttons don't fit in one row: - <ul> - <li> - button alignment centre : vertically, taking into account the button hierarchy starting from primary. - </li> - </ul> - </li> - </ul> - </p> - <img alt="Right alignment examples" src="buttons/right-alignment.svg" /> - </VerticalSpacing> -); -const RightAlignmentBack = () => ( - <VerticalSpacing> - <Heading element="h3">Right alignment + back action</Heading> - <p> - The button for moving a step back in the process or interrupting the process is aligned to the left in the view or - the form. Users often expect that they'll find the button to progress further into a process on the right and - the button to regress or cancel on the left, reflecting the metaphor of moving forward and backward. It also - supports the back gesture supported by the majority of the browsers. - </p> - <p>For example: “Back”, “Cancel” and “Cancel and Delete”.</p> - <p> - On mobile or in a small space: - <ul> - <li> - if buttons fit on one row: - <ul> - <li>button alignment right + left,</li> - <li>button alignment center : vertically.</li> - </ul> - </li> - <li> - If buttons don't fit in one row: - <ul> - <li> - button alignment center : vertically, taking into account the button hierarchy starting from primary. - </li> - </ul> - </li> - </ul> - </p> - <img alt="Right alignment with back buttons examples" src="buttons/right-alignment-back.svg" /> - </VerticalSpacing> -); - -const CentralAlignment = () => ( - <VerticalSpacing> - <Heading element="h3">Central alignment</Heading> - <p> - In some cases it makes sense to align the button to the center. For example, when a button is responsible for - downloading more content. Generally, it's only used for a single button. Use this alignment style with care. - </p> - <p> - On mobile or in a small space: - <ul> - <li>button alignment center.</li> - </ul> - </p> - <img alt="Central alignment examples" src="buttons/central-alignment.svg" /> - </VerticalSpacing> -); - -const LeftAlignment = () => ( - <VerticalSpacing> - <Heading element="h3">Left alignment</Heading> - <p>Left alignment is also possible, but not endorsed. Use with great care.</p> - <img alt="Left alignment examples" src="buttons/left-alignment.svg" /> - </VerticalSpacing> -); - -export default ButtonGroups; diff --git a/libs/react-components/src/community/docs/buttons/buttons-documentation.tsx b/libs/react-components/src/community/docs/buttons/buttons-documentation.tsx deleted file mode 100644 index cbaa72038..000000000 --- a/libs/react-components/src/community/docs/buttons/buttons-documentation.tsx +++ /dev/null @@ -1,370 +0,0 @@ -import { Title } from '@storybook/blocks'; -import React from 'react'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import { Separator } from '../../../tedi/components/misc/separator/separator'; -import { Button, ButtonProps, Card, CardContent, Heading, Text } from '../../index'; - -interface ExampleButtonProps { - heading?: string; - text?: React.ReactNode; - button?: Partial<ButtonProps>; -} - -const importantText = ( - <VerticalSpacing size={0.5}> - <p> - Used for destructive actions that can lead to data loss or a significant change, that's difficult or - impossible to reverse, such as "Delete" or "Remove". They can be accompanied by a confirmation - step asking the user to verify that they want to proceed with the action, to prevent accidental data loss. - </p> - <p> - Note that not all destructive actions need to be styled this way. In most cases the secondary default button works - better. - </p> - </VerticalSpacing> -); - -const invertedText = ( - <VerticalSpacing size={0.5}> - <p>These buttons are designed to be used on dark backgrounds.</p> - <p>Inverted background colors:</p> - </VerticalSpacing> -); - -const buttonTypes: ExampleButtonProps[] = [ - { button: { color: 'default' }, text: 'These are the standard buttons used most often in an interface.' }, - { - button: { color: 'positive' }, - text: 'These buttons lead to an action that progresses the users journey or completes a task, like "Submit," "Confirm," or "Save." ', - }, - { button: { color: 'important' }, text: importantText }, - { button: { color: 'inverted' }, text: invertedText }, -]; - -const buttonStates: ExampleButtonProps[] = [ - { heading: 'Default', button: { children: 'Default' } }, - { heading: 'Hover/active', button: { children: 'Hover', isActive: true } }, - { heading: 'Focus', button: { children: 'Focus' }, text: 'Focus is only visible when using keyboard navigation.' }, - { heading: 'Disabled', button: { children: 'Disabled', disabled: true } }, - { heading: 'Loading', button: { children: 'Loading', isLoading: true } }, -]; - -const loadingButtons: ExampleButtonProps[] = [ - { - heading: 'button: text only', - text: 'Text is replaced. Button width stays the same.', - }, - { - heading: 'button: text + icon', - text: 'Icon is replaced', - button: { iconRight: 'arrow_forward' }, - }, - { - heading: 'button: icon + text', - text: 'Icon is replaced', - button: { iconLeft: 'search' }, - }, - { - heading: 'button: icon only', - text: 'Icon is replaced', - button: { icon: 'add' }, - }, -]; - -const ButtonsDocumentation = () => { - return ( - <VerticalSpacing size={2}> - <Title>Button documentation - - - - - - - - - ); -}; - -const ButtonTypes = () => ( - - Button types - {buttonTypes.map((buttonType, key) => ( - - ))} - -); - -const ButtonStates = () => ( - - Button States -

- Button states are an essential aspect of user interface design that provide real-time feedback and clarity about - the interactivity of buttons. They improve the responsiveness of the interface and guide users through their - interactions by clearly indicating what actions are possible at any given moment. -

- - - Transition - -

The transition between the states is 150ms.

-
- - - Examples - - {buttonStates.map((buttonState) => ( - - ))} - - - Loading - -

- The loading button state is used to indicate that the system is processing a request and the user needs to wait - for the action to complete. -

- - - Behavior - -

- During the loading state the button's functionality is disabled to prevent users from clicking multiple - times, which could result in submitting the same data repeatedly. -

-
- - - Design - -

- In buttons where an icon is already present, the initial icon is replaced with a loading icon. In text-only - buttons, the text is replaced with a loading icon. Note that during the loading state, the button always - maintains the same width as in its default state. -

-
- - {loadingButtons.map((loadingButton) => ( - - ))} - -
-); - -const WidthBehavior = () => ( - - Width behavior - - - - - - - - - - - - - - - - - Adaptable button (Default) - -

Button width adjusts to the content.

-
- - - - - - - - - - - - - - - - - Full width of container - -

- Button width can be adjusted to the width of the container it’s placed in. It’s not a very common usage. -

-
- -
-
-); - -const Accessibility = () => ( - - Accessibility -

- Focus: -

    -
  • Keyboard navigation only. Focus is not shown on click.
  • -
-

-

- Keyboard navigation: -

    -
  • Tab: focus lands on button.
  • -
  • Enter/space: activates the button.
  • -
-

-

Does not apply for disabled and loading buttons, these buttons are skipped.

-
-); - -const ButtonType = ({ text, button }: ExampleButtonProps) => ( - - - - - - - - - - - - - - - - - - - - - {button?.color} - {text} - - - -); - -const ButtonState = ({ heading, text, button }: ExampleButtonProps) => ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {heading} - - {text && {text}} - - - -); - -const LoadingButton = ({ heading, text, button }: ExampleButtonProps) => ( - - - - - - - - - - - - - - - - - {heading} - -

{text}

-
-
- -); - -export default ButtonsDocumentation; diff --git a/libs/react-components/src/community/docs/buttons/buttons.mdx b/libs/react-components/src/community/docs/buttons/buttons.mdx deleted file mode 100644 index 55c6850f0..000000000 --- a/libs/react-components/src/community/docs/buttons/buttons.mdx +++ /dev/null @@ -1,9 +0,0 @@ -import { Meta, Unstyled } from '@storybook/blocks'; - -import ButtonsDocumentation from './buttons-documentation.tsx'; - - - - - - diff --git a/libs/react-components/src/community/docs/colors/guidelines.tsx b/libs/react-components/src/community/docs/colors/guidelines.tsx deleted file mode 100644 index a8668059d..000000000 --- a/libs/react-components/src/community/docs/colors/guidelines.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing, VerticalSpacingItem } from '../../../tedi/components/layout/vertical-spacing'; -import { Heading } from '../../index'; - -const ColorRows = ({ inverted }: { inverted?: boolean }) => ( - - - text (fourgrounds) examples - - - backgrounds examples - - -); - -const ColorExamples = ({ - children, - title, - inverted, -}: { - children: React.ReactNode; - title: string; - inverted?: boolean; -}) => ( - - - {title} - - {children} - {typeof inverted !== 'undefined' && } - -); - -const Neutrals = () => ( - - - Neutrals - -

- - Neutrals - {' '} - are divided into 3 main groups: -

-
    -
  • - text - This includes all foregrounds such as text, icons, and other UI objects that need to be readable. - Most used foreground is text, therefore the name is simplified to “text-...”. -
  • -
  • - bg - Bg is short for background. These are the main colors of the interface. -
  • -
  • - borders - This includes separators and input borders. -
  • -
-
-); - -const GuideLinesDescription = () => ( - - - - Color Guidelines - - -

- The color naming convention is optimised for fast navigation and clear overview of all variables. To optimise - design hand-offs the same design tokens are used (naming convention) for{' '} - - Figma - {' '} - and development. -

-
-); - -const GuideLines = () => ( - - - - -

- In order to keep the color palette simple, brand and functional colors are not divided into the previous - categories. Nevertheless, these colors can be used as bg, text and borders in a variety of ways to cover all the - design needs. -

-

- Keep in mind that all colors have to be used in accordance to the WCAG level AA contrast standards. In general - overlaying “text” color tokens on “background” color tokens will guarantee at least AA level contrast. -

-
- -

- Inverted colors are used for inverted sections like footers, accent cards and so on. Dark mode is not available - yet. -

-
- -

- - text-disabled - {' '} - and{' '} - - bg-disabled - {' '} - are designed to express disabled states. Keep in mind that disabled elements should be used with case and only - if absolutely necessary. It’s good practice to consider other design patterns if possible. -

- disabled examples -
-
-); - -export default GuideLines; diff --git a/libs/react-components/src/community/docs/scale-layout/breaking-points.tsx b/libs/react-components/src/community/docs/scale-layout/breaking-points.tsx deleted file mode 100644 index 6df2ef774..000000000 --- a/libs/react-components/src/community/docs/scale-layout/breaking-points.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import { ColumnDef, createColumnHelper } from '@tanstack/react-table'; - -import { Breakpoint, CustomizeTableCell, getBackgroundColorClass, Table, Text } from '../../index'; - -interface BreakpointRow { - type: 'mobile' | 'tablet' | 'desktop'; - breakpoint: Breakpoint; - width: string; - layout: string; - behavior: string; - padding: string; - aligment?: 'center'; - maxWidth?: string; - figmaStyle?: 'layout/mobile' | 'layout/tablet' | 'layout/desktop'; -} - -const breakpoints: BreakpointRow[] = [ - { - type: 'mobile', - breakpoint: 'xs', - width: '0-575px', - layout: '12col / design 2col', - behavior: 'stretch', - padding: '8px/0.5rem', - figmaStyle: 'layout/mobile', - }, - { - type: 'mobile', - breakpoint: 'sm', - width: '576-767px', - layout: '12col / design 2col', - behavior: 'stretch', - padding: '8px/0.5rem', - }, - { - type: 'tablet', - breakpoint: 'md', - width: '768-991px', - layout: '12col / design 6col', - behavior: 'stretch', - padding: '24px/1.5rem', - figmaStyle: 'layout/tablet', - }, - { - type: 'desktop', - breakpoint: 'lg', - width: '992-1199px', - layout: 'side navigation + 12col', - behavior: 'stretch', - padding: '40px/2.5rem', - }, - { - type: 'desktop', - breakpoint: 'xl', - width: '1200-1399px', - layout: 'side navigation + 12col', - behavior: 'stretch', - padding: '40px/2.5rem', - }, - { - type: 'desktop', - breakpoint: 'xxl', - width: '>= 1400px', - layout: 'side navigation + 12col', - behavior: 'stretch', - aligment: 'center', - maxWidth: '1440px/90rem', - padding: 'min: 40px/2.5rem', - figmaStyle: 'layout/desktop', - }, -]; - -const BreakingpointsTable = () => { - const columnHelper = createColumnHelper(); - - // eslint-disable-next-line - const columns: ColumnDef[] = [ - columnHelper.accessor('breakpoint', { - header: () => 'Breakpoints', - cell: ({ row: { original } }) => ( - - {original.type} - {`break-${original.breakpoint}`} - - ), - }), - columnHelper.accessor('width', { - header: () => 'Width', - }), - columnHelper.accessor('layout', { - header: () => 'Layout & columns', - }), - columnHelper.accessor('behavior', { - header: () => 'Grid behavior', - cell: ({ row: { original } }) => ( - <> - {`${original.behavior}`} - {original.maxWidth && {`max-content width:${original.maxWidth}`}} - {original.aligment && {`content alignment: ${original.aligment}`}} - - ), - }), - columnHelper.accessor('padding', { - header: () => 'Page padding', - }), - columnHelper.accessor('figmaStyle', { - header: () => 'Figma grid style', - }), - ]; - - return ( - - id="spacing-table" - className="sb-unstyled" - hidePagination={true} - hideCardBorder={true} - data={breakpoints} - columns={columns} - enableSorting={false} - caption="Spacing Values" - /> - ); -}; - -export default BreakingpointsTable; diff --git a/libs/react-components/src/community/docs/scale-layout/development.mdx b/libs/react-components/src/community/docs/scale-layout/development.mdx deleted file mode 100644 index a413dfb5c..000000000 --- a/libs/react-components/src/community/docs/scale-layout/development.mdx +++ /dev/null @@ -1,12 +0,0 @@ -import { Meta, Title, Subtitle, Unstyled } from '@storybook/blocks'; - - - -# Grid in development - -Every layout in design is makeable with `` and `` components.
-All examples of Grid usage are under [Grid docs](/docs/components-grid--docs) - -To create vertical spacing between elements use `` [component](/docs/components-vertical-spacing--docs). - -{/* TODO: Need more information how to use Row, Col, VerticalSpacing and Card correctly */} diff --git a/libs/react-components/src/community/docs/scale-layout/grid.mdx b/libs/react-components/src/community/docs/scale-layout/grid.mdx deleted file mode 100644 index 907fc622f..000000000 --- a/libs/react-components/src/community/docs/scale-layout/grid.mdx +++ /dev/null @@ -1,8 +0,0 @@ -import { Meta, Title, Subtitle, Unstyled } from '@storybook/blocks'; -import Grid from './grid.tsx'; - - - - - - diff --git a/libs/react-components/src/community/docs/scale-layout/grid.tsx b/libs/react-components/src/community/docs/scale-layout/grid.tsx deleted file mode 100644 index c1ee8d812..000000000 --- a/libs/react-components/src/community/docs/scale-layout/grid.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import { Title } from '@storybook/blocks'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import { Separator } from '../../../tedi/components/misc/separator/separator'; -import { Heading } from '../../index'; -import BreakingpointsTable from './breaking-points'; - -const Grid = () => { - return ( - - - Grid system -

- Grids are fundamental to creating visually consistent, organized, and responsive designs. Grids help maintain - order and structure across different pages, components, and devices.{' '} -

- - - - Visual example of 12-column grid - Columns -

- Columns are vertical divisions within a container that provide a framework for organising and aligning - content. -

-

- We use a 12-column grid. For design purposes we can use 6col, 4col, 3col and 2 col grids, since they are - easily translated to 12 column grid in development. Widths of the columns are fluid, meaning it is - determined by the container size where the grid is placed (plus fixed width gutter). -

-
- - - - Visual example of gutters in grid - Gutter -

- Gutters are the gaps between the columns, created by horizontal padding. Gutters can be responsively - adjusted. -

-

Gutter width is fixed. Gutter values that can be used: 24px (default) , 16px, 12px, 8px, 0px.

-

- Note that gutter size helps us utilise rule of proximity, meaning elements that are close together are - perceived connected. -

-
- - - - Visual example of layout variatsions - Layout variations -
- 12 columns grid is extremely adaptable and provides a lot of flexible combinations. For example content - can be: -
    -
  • utilising full container width;
  • -
  • divided into 2, 3, 4 and 6 columns;
  • -
  • divided into 2 columns of different width and create 1/3 layouts.
  • -
-
-
- - - - Visual example of column offset - Column offset -

- Column offset functionality is available for use in development. Use offsets very intentionally, as - it's generally a good practice to align elements on the left. Left alignment supports the natural - reading flow of left-to-right languages. -

-
- -
-
- - - Layout grid & breaking points -

- Layout grids play a crucial role in creating cohesive, organised, and accessible designs. They provide a solid - foundation for building scalable and responsive designs, streamline the design process, and promote - collaboration among team members. -

- -
-
- ); -}; - -export default Grid; diff --git a/libs/react-components/src/community/docs/scale-layout/spacing.mdx b/libs/react-components/src/community/docs/scale-layout/spacing.mdx deleted file mode 100644 index 547603667..000000000 --- a/libs/react-components/src/community/docs/scale-layout/spacing.mdx +++ /dev/null @@ -1,9 +0,0 @@ -import { Meta, Unstyled } from '@storybook/blocks'; - -import Spacing from './spacing.tsx'; - - - - - - diff --git a/libs/react-components/src/community/docs/scale-layout/spacing.tsx b/libs/react-components/src/community/docs/scale-layout/spacing.tsx deleted file mode 100644 index dc5e5564e..000000000 --- a/libs/react-components/src/community/docs/scale-layout/spacing.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import { Title } from '@storybook/blocks'; -import { ColumnDef, createColumnHelper } from '@tanstack/react-table'; - -import { Col, Row } from '../../../tedi/components/layout/grid'; -import { VerticalSpacing } from '../../../tedi/components/layout/vertical-spacing'; -import { Separator } from '../../../tedi/components/misc/separator/separator'; -import { Heading, Table } from '../../index'; - -const Spacing = () => { - return ( - - - Spacing - - - - Soft 8px grid - Soft 8px grid -

To create harmonious and visually pleasing designs, a soft 8px grid system is used.

-
- - - - Example how spacing is used between elements - Use in the elements -

- Spacing is measured from the edges of the element boxes. All user interface elements are designed with - this system in mind. For example, the line-height of typography and the height of the buttons are also - set in increments of 8px. This means elements also fall into a grid, but they don't always have to - conform to predefined spacing values. -

-
- -
-
- - - Spacing values - - -
- ); -}; - -export default Spacing; - -const exampleSpacings = [2, 4, 8, 12, 16, 24, 32, 40, 48, 64, 80, 96, 160]; - -interface SpacingRow { - px: number; - rem: number; -} - -const spacings: SpacingRow[] = exampleSpacings.map((px) => ({ px, rem: px / 16 })); - -const SpacingsTable = () => { - const columnHelper = createColumnHelper(); - - // eslint-disable-next-line - const columns: ColumnDef[] = [ - columnHelper.accessor('px', { - header: () => 'Spacing', - cell: (info) => info.renderValue() + 'px', - }), - columnHelper.accessor('rem', { - header: () => 'rem', - cell: (info) => info.renderValue() + 'rem', - }), - columnHelper.accessor((row) => `${row.px}-example`, { - id: 'example', - header: () => 'Example', - cell: ({ row: { original } }) => ( -
- ), - }), - ]; - - return ( - - id="spacing-table" - className="sb-unstyled" - hidePagination={true} - hideCardBorder={true} - data={spacings} - columns={columns} - enableSorting={false} - caption="Spacing Values" - /> - ); -}; diff --git a/libs/react-components/src/community/helpers/background-colors/background-colors.module.scss b/libs/react-components/src/community/helpers/background-colors/background-colors.module.scss deleted file mode 100644 index ad7943214..000000000 --- a/libs/react-components/src/community/helpers/background-colors/background-colors.module.scss +++ /dev/null @@ -1,45 +0,0 @@ -$colors: ( - // Primary - 'primary-main', - 'primary-active', - 'primary-active-subtle', - 'primary-highlight', - 'primary-highlight-subtle', - // Accent - 'accent-main', - 'accent-highlight', - // Foreground - 'bg-default', - 'bg-muted', - 'bg-subtle', - 'bg-disabled', - 'bg-inverted', - 'bg-inverted-contrast', - // Shades - 'black', - 'white', - // Functional colors - 'positive-main', - 'positive-active', - 'positive-highlight', - 'important-main', - 'important-active', - 'important-highlight', - 'info-main', - 'info-active', - 'info-highlight', - 'warning-main', - 'warning-highlight', - // Transparent - 'transparent' -); - -@each $color in $colors { - .#{$color} { - background-color: var(--color-#{$color}); - - @media print { - background-color: var(--color-bg-default); - } - } -} diff --git a/libs/react-components/src/community/helpers/background-colors/background-colors.stories.tsx b/libs/react-components/src/community/helpers/background-colors/background-colors.stories.tsx deleted file mode 100644 index f318b95e9..000000000 --- a/libs/react-components/src/community/helpers/background-colors/background-colors.stories.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Card } from '../../components/card'; -import CardContent from '../../components/card/card-content/card-content'; -import { TColorsBackground } from '../../components/commonTypes'; - -const meta: Meta = { - component: Card, - parameters: { - layout: 'fullscreen', - }, -}; - -export default meta; -type Story = StoryObj; - -const colors: TColorsBackground[] = [ - // Primary - 'primary-main', - 'primary-active', - 'primary-active-subtle', - 'primary-highlight', - 'primary-highlight-subtle', - // Accent - 'accent-main', - 'accent-highlight', - // Background - 'bg-default', - 'bg-muted', - 'bg-subtle', - 'bg-disabled', - 'bg-inverted', - 'bg-inverted-contrast', - // Shades - 'black', - 'white', - // Functional colors - Positive - 'positive-main', - 'positive-active', - 'positive-highlight', - 'important-main', - 'important-active', - 'important-highlight', - 'info-main', - 'info-active', - 'info-highlight', - 'warning-main', - 'warning-highlight', -]; - -interface TemplateProps { - colors: TColorsBackground[]; -} -const Template: StoryFn = () => { - return ( - - {colors.map((i, index) => ( - -

{i}

-
- ))} -
- ); -}; - -export const BackgroundColors: Story = { - render: Template, - - args: { - colors, - }, -}; diff --git a/libs/react-components/src/community/helpers/background-colors/background-colors.tsx b/libs/react-components/src/community/helpers/background-colors/background-colors.tsx deleted file mode 100644 index f5f657e98..000000000 --- a/libs/react-components/src/community/helpers/background-colors/background-colors.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { TColorsBackground } from '../../components/commonTypes'; -import styles from './background-colors.module.scss'; - -export const getBackgroundColorClass = (type?: TColorsBackground): string => { - if (type) { - return styles[type]; - } - - return ''; -}; diff --git a/libs/react-components/src/community/helpers/hooks/use-breakpoint-props.mdx b/libs/react-components/src/community/helpers/hooks/use-breakpoint-props.mdx deleted file mode 100644 index 742c524e9..000000000 --- a/libs/react-components/src/community/helpers/hooks/use-breakpoint-props.mdx +++ /dev/null @@ -1,63 +0,0 @@ -import { Meta } from '@storybook/blocks'; - - - -# Props depending on current breakpoint - -## Overview - -useBreakpointProps exports function `getCurrentBreakpointProps` . It return merged object of properties from activeBreakPoints and defaultValues. - -Same hook should be used inside Row/Col components (already has custom logic to achive the same) and in other components where needed. - -## Usage - -Type components props as two interfaces/types: - -1. ComponentBreakpointProps -\> All the properties that can change on different breakpoint -2. ComponentProps -\> All the other properties + extending BreakPointSupport interace - -Use props as: - -```tsx -interface ComponentBreakpointProps { - background?: TColorsBackground; -} - -interface ComponentProps extends BreakpointSupport { - children: React.ReactNode; -} - -const Component = (props: ComponentProps) => { - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - const { prop1, prop2, ...rest } = getCurrentBreakpointProps(props, defaultPropsObject); - - return

content

; -}; -``` - -And when using as Component: - -```tsx - -

Content

-
-``` - -## defaultServerBreakpoint with SSR - -When using SSR, you can pass the defaultServerBreakpoint prop to the component. -This prop should be set to the breakpoint that is wanted to render on the server side. -This is important when wanting to avoid large layout shifts with SSR. -Defaults to 'xs' if not set. - -```tsx - -

Content

-
-``` diff --git a/libs/react-components/src/community/helpers/hooks/use-breakpoint-props.ts b/libs/react-components/src/community/helpers/hooks/use-breakpoint-props.ts deleted file mode 100644 index 6a259ea7a..000000000 --- a/libs/react-components/src/community/helpers/hooks/use-breakpoint-props.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { omit, pickBy } from 'lodash-es'; -import React from 'react'; - -import useBreakpoint, { Breakpoint, breakpoints } from './use-breakpoint'; - -export const useBreakpointProps = (defaultServerBreakpoint: Breakpoint = 'xs') => { - const currentBreakpoint = useBreakpoint(defaultServerBreakpoint); - const activeBreakpoints: Breakpoint[] = React.useMemo( - () => (currentBreakpoint ? breakpoints.slice(0, breakpoints.indexOf(currentBreakpoint) + 1) : []), - [currentBreakpoint] - ); - - /** - * Return currently active breakpoints properties as merged - * when property is used directly not as breakpoint prop (ex. `color: 'red'` not `md: { color: 'red' }`) - * it is counted then as xs breakpoint (mobile-first approach). - */ - const getCurrentBreakpointProps = React.useCallback( - ( - props: BreakpointSupport, - defaultValues: Partial = {} - ): Omit, Exclude | 'defaultServerBreakpoint'> => { - // eslint-disable-next-line unused-imports/no-unused-vars - const { sm, md, lg, xl, xxl, ...xs } = props; - const propArray = [ - ...activeBreakpoints.map((bp) => pickBy(bp === 'xs' ? xs : props[bp], (value) => value !== undefined)), // filter out props that have undefined as value, so they don't override lower breakpoint values or default values - ].filter(Boolean); - - // Add propArray to defaultValues - // and remove defaultServerBreakpoint from defaultValues - to avoided passing to HTML element with rest props - return Object.assign(omit(defaultValues, 'defaultServerBreakpoint'), ...propArray); - }, - [activeBreakpoints] - ); - - return { getCurrentBreakpointProps }; -}; - -/** - * BreakpointSupport is a utility type that allows you to define props for different breakpoints. - * It extends the given type T and adds optional properties for each breakpoint except 'xs'. - * This is useful for creating responsive components that can have different props based on the current breakpoint. - * Also defaultServerBreakpoint is added to the type, so you can set a default value for the component, when it's rendered on the server-side. - * Because in SSR we don't have access to the window object and can't know the user's screen size. - */ -export type BreakpointSupport = T & { - /** - * Default breakpoint for SSR, the component is rendered with this breakpoint props on the server-side. - */ - defaultServerBreakpoint?: Breakpoint; -} & { - [key in Exclude]?: Partial; -}; diff --git a/libs/react-components/src/community/helpers/hooks/use-breakpoint.ts b/libs/react-components/src/community/helpers/hooks/use-breakpoint.ts deleted file mode 100644 index 9b342331d..000000000 --- a/libs/react-components/src/community/helpers/hooks/use-breakpoint.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { debounce } from 'lodash-es'; -import { useLayoutEffect, useState } from 'react'; - -export type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'; -export const breakpoints: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl']; - -/** - * @param defaultServerBreakpoint - Default breakpoint for SSR, the hook returns this breakpoint in the SSR. - * @returns User's current breakpoint - */ -export const useBreakpoint = (defaultServerBreakpoint: Breakpoint = 'xs'): Breakpoint => { - const [breakpoint, setBreakpoint] = useState(defaultServerBreakpoint); - - useLayoutEffect(() => { - const getBreakpoint = (): Breakpoint => { - if (window.matchMedia('(min-width: 1400px)').matches) { - return 'xxl'; - } else if (window.matchMedia('(min-width: 1200px)').matches) { - return 'xl'; - } else if (window.matchMedia('(min-width: 992px)').matches) { - return 'lg'; - } else if (window.matchMedia('(min-width: 768px)').matches) { - return 'md'; - } else if (window.matchMedia('(min-width: 576px)').matches) { - return 'sm'; - } else { - return 'xs'; - } - }; - - const resizeEvent = debounce((): void => { - setBreakpoint(getBreakpoint()); - }, 20); - - // Set the initial breakpoint on the client - setBreakpoint(getBreakpoint()); - - window.addEventListener('resize', resizeEvent); - return () => { - resizeEvent.cancel(); - window.removeEventListener('resize', resizeEvent); - }; - }, []); - - return breakpoint; -}; - -export default useBreakpoint; diff --git a/libs/react-components/src/community/helpers/hooks/use-first-render.ts b/libs/react-components/src/community/helpers/hooks/use-first-render.ts deleted file mode 100644 index 41754f7ca..000000000 --- a/libs/react-components/src/community/helpers/hooks/use-first-render.ts +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -export const useFirstRender = () => { - const firstRender = React.useRef(true); - - React.useEffect(() => { - firstRender.current = false; - }, []); - - return firstRender.current; -}; diff --git a/libs/react-components/src/community/helpers/hooks/use-layout.ts b/libs/react-components/src/community/helpers/hooks/use-layout.ts deleted file mode 100644 index 88764c397..000000000 --- a/libs/react-components/src/community/helpers/hooks/use-layout.ts +++ /dev/null @@ -1,29 +0,0 @@ -import useBreakpoint, { Breakpoint } from './use-breakpoint'; - -export const mobileBreakpoints: Breakpoint[] = ['xs', 'sm']; -export const tabletBreakpoints: Breakpoint[] = ['md']; -export const desktopBreakpoints: Breakpoint[] = ['lg', 'xl', 'xxl']; - -export type ScreenLayout = 'mobile' | 'tablet' | 'desktop'; -export type Layouts = Array; - -export const useLayout = (layouts: Layouts): boolean => { - const breakpoint = useBreakpoint(); - - const breakpoints = layouts?.reduce((accumulator, current) => { - switch (current) { - case 'desktop': - return [...accumulator, ...desktopBreakpoints]; - case 'tablet': - return [...accumulator, ...tabletBreakpoints]; - case 'mobile': - return [...accumulator, ...mobileBreakpoints]; - default: - return [...accumulator, current]; - } - }, []); - - return breakpoint ? breakpoints.includes(breakpoint) : false; -}; - -export default useLayout; diff --git a/libs/react-components/src/community/helpers/index.ts b/libs/react-components/src/community/helpers/index.ts deleted file mode 100644 index 0e21574fb..000000000 --- a/libs/react-components/src/community/helpers/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './hooks/use-first-render'; -export * from './hooks/use-breakpoint'; -export * from './hooks/use-breakpoint-props'; -export * from './hooks/use-layout'; -export * from './background-colors/background-colors'; diff --git a/libs/react-components/src/community/helpers/polymorphic/types.ts b/libs/react-components/src/community/helpers/polymorphic/types.ts deleted file mode 100644 index eabe366fa..000000000 --- a/libs/react-components/src/community/helpers/polymorphic/types.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * This file should contain only helpers that are used for developing components. They don't get exported separately from component library - */ -import React from 'react'; - -/** - * Types for polymorphic components - */ -export type AllowedHTMLTags = C extends V ? C : never; -type AsProp = { - /** - * Render as custom component - */ - as?: C; -}; -type PropsToOmit = keyof (AsProp & P); -// This is the type for the "ref" only -export type PolymorphicRef = React.ComponentPropsWithRef['ref']; - -export type PolymorphicComponentPropWithoutRef = Props & - AsProp & - Omit, PropsToOmit>; - -export type PolymorphicComponentPropWithRef< - C extends React.ElementType, - Props = unknown -> = PolymorphicComponentPropWithoutRef & { - ref?: PolymorphicRef; -}; diff --git a/libs/react-components/src/community/index.ts b/libs/react-components/src/community/index.ts deleted file mode 100644 index 583b4831a..000000000 --- a/libs/react-components/src/community/index.ts +++ /dev/null @@ -1,65 +0,0 @@ -export * from './components/commonTypes'; -export * from './components/typography/heading/heading'; -export * from './components/typography/text/text'; -export * from './components/button/button'; -export * from './components/collapse/collapse'; -export * from './components/anchor/anchor'; -export * from './components/layout'; -export * from './components/ellipsis/ellipsis'; -export * from './components/dropdown/dropdown'; -export * from './components/stepper'; -export * from './components/card'; -export * from './components/icon/icon'; -export * from './components/feedback/feedback'; -export * from './components/form/hidden-field/hidden-field'; -export * from './components/form/choice-group'; -export * from './components/form/check/check'; -export * from './components/form/radio/radio'; -export * from './components/form/pickers'; -export * from './components/form/file-upload'; -export * from './components/form/select/select'; -export * from './components/form/text-editor/text-editor'; -export * from './components/form/toggle/toggle'; -export * from './components/table'; -export * from './components/table-of-contents'; -export * from './components/tabs'; -export * from './components/tag/tag'; -export * from './components/tooltip'; -export * from './components/status/status'; -export * from './components/vertical-progress'; -export * from './components/accordion'; -export * from './components/toggle-open/toggle-open'; -export * from './components/modal'; -export * from './components/placeholder/placeholder'; -export * from './components/vertical-stepper/vertical-stepper'; -export * from './components/vertical-stepper/step-item/step-item'; -export * from './components/vertical-stepper/sub-item/sub-item'; - -export * from './helpers'; - -export * from './providers/style-provider/style-provider'; - -export * from './types/index'; - -// Map components -export * from './components/map-components/base-map-selection/base-map-selection'; -export * from './components/map-components/button-group/button-group'; -export * from './components/map-components/carousel/carousel'; -export * from './components/map-components/color-and-icon-picker/color-and-icon-picker'; -export * from './components/map-components/comparison/comparison'; -export * from './components/map-components/directions'; -export * from './components/map-components/edit-actions/editing-actions'; -export * from './components/map-components/left-panel/left-panel'; -export * from './components/map-components/legend/legend'; -export * from './components/map-components/map-accordion/map-accordion'; -export * from './components/map-components/map-button/map-button'; -export * from './components/map-components/map-dropdown/map-dropdown'; -export * from './components/map-components/map-info/map-info'; -export * from './components/map-components/map-layer/map-layer'; -export * from './components/map-components/map-preview/map-preview'; -export * from './components/map-components/resizer/resizer'; -export * from './components/map-components/right-panel/right-panel'; -export * from './components/map-components/scale-bar/scale-bar'; -export * from './components/map-components/map-select/map-select'; -export * from './components/map-components/sheet/sheet'; -export * from './components/map-components/timeline/timeline'; diff --git a/libs/react-components/src/community/providers/style-provider/style-provider.tsx b/libs/react-components/src/community/providers/style-provider/style-provider.tsx deleted file mode 100644 index f327987ff..000000000 --- a/libs/react-components/src/community/providers/style-provider/style-provider.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react'; - -import '../../styles/index.scss'; - -export interface StyleProviderProps { - children: React.ReactNode; -} - -export const StyleProvider = (props: StyleProviderProps): JSX.Element => { - const { children } = props; - return <>{children}; -}; diff --git a/libs/react-components/src/community/styles/_base.scss b/libs/react-components/src/community/styles/_base.scss deleted file mode 100644 index bd580bf3b..000000000 --- a/libs/react-components/src/community/styles/_base.scss +++ /dev/null @@ -1,76 +0,0 @@ -/* stylelint-disable selector-id-pattern, selector-max-id, selector-no-qualifying-type */ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -html { - box-sizing: border-box; - font-family: var(--font-family); - line-height: var(--font-line-height-base); - color: var(--general-text-primary); - scroll-padding-top: var(--header-bottom-height, 0); - scroll-behavior: smooth; -} - -html, -body { - height: 100%; - background-color: var(--color-bg-subtle); -} - -*, -*::before, -*::after { - box-sizing: inherit; -} - -/** - * To overwrite behavior of focus outline - * Set '--global-outline-color' and '--global-outline-offset' inside component scope - */ -*:where(:focus) { - @include mixins.focus-element; -} - -body, -h1, -h2, -h3, -h4, -h5, -h6, -p, -ol, -dl, -dd, -ul { - padding: 0; - margin: 0; - font-weight: normal; -} - -ol, -ul { - margin: 0.25rem 0; - list-style-position: inside; -} - -ol.public-DraftStyleDefault-ul, -ul.public-DraftStyleDefault-ul { - list-style-position: outside; -} - -button { - line-height: 1.5; -} - -img { - max-width: 100%; - height: auto; -} - -.scroll-disabled { - @include breakpoints.media-breakpoint-down(lg) { - height: 100%; - overflow-y: hidden; - } -} diff --git a/libs/react-components/src/community/styles/_fonts.scss b/libs/react-components/src/community/styles/_fonts.scss deleted file mode 100644 index 141f17ead..000000000 --- a/libs/react-components/src/community/styles/_fonts.scss +++ /dev/null @@ -1,253 +0,0 @@ -// check src/public/fonts/README.md for explanation on font paths - -/* cyrillic-ext */ -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 300; - src: url('/fonts/roboto-v30-cyrillic-ext-300-italic.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} - -/* cyrillic */ -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 300; - src: url('/fonts/roboto-v30-cyrillic-300-italic.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* latin-ext */ -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 300; - src: url('/fonts/roboto-v30-latin-ext-300-italic.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, - U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 300; - src: url('/fonts/roboto-v30-latin-300-italic.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, - U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} - -/* cyrillic-ext */ -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 400; - src: url('/fonts/roboto-v30-cyrillic-ext-400-italic.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} - -/* cyrillic */ -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 400; - src: url('/fonts/roboto-v30-cyrillic-400-italic.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* latin-ext */ -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 400; - src: url('/fonts/roboto-v30-latin-ext-400-italic.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, - U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 400; - src: url('/fonts/roboto-v30-latin-400-italic.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, - U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} - -/* cyrillic-ext */ -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 700; - src: url('/fonts/roboto-v30-cyrillic-ext-700-italic.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} - -/* cyrillic */ -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 700; - src: url('/fonts/roboto-v30-cyrillic-700-italic.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* latin-ext */ -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 700; - src: url('/fonts/roboto-v30-latin-ext-700-italic.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, - U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 700; - src: url('/fonts/roboto-v30-latin-700-italic.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, - U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} - -/* cyrillic-ext */ -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 300; - src: url('/fonts/roboto-v30-cyrillic-ext-300.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} - -/* cyrillic */ -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 300; - src: url('/fonts/roboto-v30-cyrillic-300.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* latin-ext */ -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 300; - src: url('/fonts/roboto-v30-latin-ext-300.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, - U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 300; - src: url('/fonts/roboto-v30-latin-300.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, - U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} - -/* cyrillic-ext */ -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 400; - src: url('/fonts/roboto-v30-cyrillic-ext-400.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} - -/* cyrillic */ -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 400; - src: url('/fonts/roboto-v30-cyrillic-400.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* latin-ext */ -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 400; - src: url('/fonts/roboto-v30-latin-ext-400.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, - U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 400; - src: url('/fonts/roboto-v30-latin-400.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, - U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} - -/* cyrillic-ext */ -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 700; - src: url('/fonts/roboto-v30-cyrillic-ext-700.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} - -/* cyrillic */ -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 700; - src: url('/fonts/roboto-v30-cyrillic-700.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* latin-ext */ -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 700; - src: url('/fonts/roboto-v30-latin-ext-700.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, - U+2C60-2C7F, U+A720-A7FF; -} - -/* latin */ -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 700; - src: url('/fonts/roboto-v30-latin-700.woff2') format('woff2'); - font-display: swap; - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, - U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} diff --git a/libs/react-components/src/community/styles/_helpers.scss b/libs/react-components/src/community/styles/_helpers.scss deleted file mode 100644 index 6b3b0315f..000000000 --- a/libs/react-components/src/community/styles/_helpers.scss +++ /dev/null @@ -1,44 +0,0 @@ -@use './mixins'; - -// https://github.com/h5bp/main.css/blob/main/src/_helpers.css - -.hidden, -[hidden] { - display: none !important; -} - -.block { - display: block !important; -} - -.inline-block { - display: inline-block !important; -} - -.flex { - display: flex !important; -} - -.visually-hidden, -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; - - &.focusable:active, - &.focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; - white-space: inherit; - } -} diff --git a/libs/react-components/src/community/styles/_map-component.variables.scss b/libs/react-components/src/community/styles/_map-component.variables.scss deleted file mode 100644 index 2a7ef8a1d..000000000 --- a/libs/react-components/src/community/styles/_map-component.variables.scss +++ /dev/null @@ -1,401 +0,0 @@ -:root { - /** color variables **/ - --button-expand-background-default: var(--alpha-white-80); - --button-map-base-background-default: var(--general-surface-primary); - --button-map-base-background-hover: var(--general-surface-primary); - --button-map-base-background-selected: var(--general-surface-primary); - --button-map-base-border-default: var(--button-primary-border-default); - --button-map-base-border-hover: var(--button-primary-border-hover); - --button-map-base-border-selected: var(--general-border-brand); - --button-map-base-text-background-default: var(--alpha-white-80); - --button-map-base-text-background-hover: var(--alpha-white-80); - --button-map-base-text-background-selected: var(--general-surface-brand-primary); - --button-map-info-background-default: var(--alpha-white-80); - --button-map-info-background-hover: var(--alpha-white-80); - --button-map-info-background-open: var(--button-primary-background-active); - --button-map-info-text-active: var(--primary-800); - --button-map-info-text-default: var(--link-primary-default); - --button-map-info-text-focus: var(--link-primary-default); - --button-map-info-text-hover: var(--primary-700); - --button-map-info-text-open: var(--primary-800); - --button-neutral-inverted-background-active: var(--alpha-white-10); - --button-neutral-inverted-background-default: var(--alpha-01); - --button-neutral-inverted-background-focus: var(--alpha-01); - --button-neutral-inverted-background-hover: var(--alpha-white-10); - --button-neutral-inverted-text-active: var(--neutral-100); - --button-neutral-inverted-text-default: var(--neutral-100); - --button-neutral-inverted-text-focus: var(--neutral-100); - --button-neutral-inverted-text-hover: var(--primary-200); - --button-neutral-background-active: var(--general-surface-brand-tertiary); - --button-neutral-background-default: var(--alpha-01); - --button-neutral-background-focus: var(--alpha-01); - --button-neutral-background-hover: var(--general-surface-hover); - --button-neutral-border-default: var(--alpha-01); - --button-neutral-text-active: var(--primary-800); - --button-neutral-text-default: var(--primary-600); - --button-neutral-text-focus: var(--primary-600); - --button-neutral-text-hover: var(--primary-700); - --button-primary-background-active: var(--general-surface-brand-tertiary); - --button-primary-background-default: var(--neutral-100); - --button-primary-background-focus: var(--neutral-100); - --button-primary-background-hover: var(--general-surface-hover); - --button-primary-border-active: var(--primary-700); - --button-primary-border-default: var(--general-border-primary); - --button-primary-border-focus: var(--primary-600); - --button-primary-border-hover: var(--primary-600); - --button-primary-text-active: var(--primary-800); - --button-primary-text-default: var(--primary-600); - --button-primary-text-focus: var(--primary-600); - --button-primary-text-hover: var(--primary-700); - --drag-indicator-accent: var(--general-border-accent); - --drag-indicator-light: var(--general-border-primary); - --drag-indicator-button-background: var(--primary-200); - --drag-indicator-button-icon: var(--general-icon-brand); - --form-icon-selection-active: var(--general-icon-brand); - --form-icon-selection-inactive: var(--general-icon-secondary); - --logo-primary: var(--neutral-100); - --logo-secondary-blue: #003087; - --logo-secondary-blue-dark: #263b80; - --map-application-link: var(--link-primary-default); - --map-historical-background-default: var(--general-surface-primary); - --map-historical-background-hover: var(--general-surface-primary); - --map-historical-background-selected: var(--general-surface-primary); - --map-historical-border-default: var(--button-primary-border-default); - --map-historical-border-hover: var(--button-primary-border-hover); - --map-historical-border-selected: var(--general-border-brand); - --map-historical-text-default: var(--general-text-secondary); - --map-historical-text-hover: var(--general-text-brand); - --map-historical-text-selected: var(--general-text-white); - --map-historical-text-background-default: var(--alpha-white-80); - --map-historical-text-background-hover: var(--alpha-white-80); - --map-historical-text-background-selected: var(--general-surface-brand-primary); - --measurement-tooltip: var(--alpha-80); - --mirror-indicator: var(--drag-indicator-accent); - --shape-default: var(--accent-600); - --shape-hover: var(--accent-500); - --shape-disabled-background: var(--alpha-white-50); - --shape-disabled-border: var(--button-card-disabled-border); - --shape-edit-background-default: #ff800099; - --shape-edit-background-hover: #ff8000cc; - --shape-edit-border-default: var(--accent-600); - --shape-edit-border-hover: var(--accent-600); - --shape-read-background-default: #e7f0f699; - --shape-read-background-hover: #e7f0f6cc; - --shape-read-border-default: var(--general-border-brand); - --shape-read-border-hover: var(--general-border-brand); - --sheet-body-default: var(--general-surface-primary); - --sheet-body-secondary: var(--general-surface-tertiary); - --sheet-footer-background: var(--sheet-header-background-default); - --sheet-header-border: var(--general-border-primary); - --sheet-header-background-brand: var(--general-surface-brand-primary); - --sheet-header-background-default: var(--general-surface-primary); - --sidepanel-background: var(--general-surface-primary); - --sidepanel-footer-background: var(--general-surface-tertiary); - --sidepanel-header-background-default: var(--side-navigation-background); - --sidepanel-header-background-open: var(--sidepanel-item-brand-background-open); - --sidepanel-item-brand-background-default: var(--general-surface-brand-primary); - --sidepanel-item-brand-background-open: var(--general-surface-brand-secondary); - --sidepanel-item-brand-border-bottom: var(--primary-800); - --sidepanel-item-white-background-default: var(--general-surface-primary); - --sidepanel-item-white-background-hover: var(--general-surface-hover); - --sidepanel-tree-default: var(--general-border-primary); - --sidepanel-tree-hover: var(--primary-200); - --timeline-indicator-border: var(--primary-600); - --timeline-indicator-background-default: var(--neutral-300); - --timeline-indicator-background-hover: var(--general-surface-primary); - --timeline-indicator-background-selected: var(--timeline-indicator-background-hover); - --timeline-indicator-icon-default: var(--general-icon-brand); - --timeline-indicator-icon-hover: var(--general-icon-brand); - --timeline-indicator-icon-selected: var(--general-icon-brand-dark); - --timeline-line-large: var(--general-border-brand); - --timeline-line-small: var(--general-border-secondary); - --form-checkbox-radio-card-primary-selected-background: var(--primary-600); - --button-group-primary-selected-background: var(--form-checkbox-radio-card-primary-selected-background); - - /** dimensional variables **/ - --button-size-default-desktop: var(--dimensions-19); - --button-size-default-tablet: var(--dimensions-19); - --button-size-default-mobile: var(--dimensions-19); - --sidepanel-item-padding-x-desktop: var(--dimensions-05); - --sidepanel-item-padding-x-tablet: var(--dimensions-05); - --sidepanel-item-padding-x-mobile: var(--dimensions-05); - --sidepanel-layers-subitem-padding-left-desktop: var(--dimensions-03); - --sidepanel-layers-subitem-padding-left-tablet: var(--dimensions-03); - --sidepanel-layers-subitem-padding-left-mobile: var(--dimensions-03); - --button-size-sm-desktop: var(--dimensions-16); - --button-size-sm-tablet: var(--dimensions-16); - --button-size-sm-mobile: var(--dimensions-16); - --sidepanel-min-width-desktop: 316px; - --sidepanel-min-width-rem-desktop: 19.75rem; - --sidepanel-min-width-tablet: 316px; - --sidepanel-min-width-rem-tablet: 19.75rem; - --sidepanel-min-width-mobile: 316px; - --sidepanel-min-width-rem-mobile: 19.75rem; - --sidepanel-layers-drag-indicator-width-desktop: var(--dimensions-03); - --sidepanel-layers-drag-indicator-width-tablet: var(--dimensions-03); - --sidepanel-layers-drag-indicator-width-mobile: var(--dimensions-03); - --timeline-line-small-desktop: 8px; - --timeline-line-small-rem-desktop: 0.5rem; - --timeline-line-small-tablet: 0px; - --timeline-line-small-rem-tablet: 0rem; - --timeline-line-small-mobile: 8px; - --timeline-line-small-rem-mobile: 0.5rem; - --timeline-line-medium-desktop: 12px; - --timeline-line-medium-rem-desktop: 0.75rem; - --timeline-line-medium-tablet: 0px; - --timeline-line-medium-rem-tablet: 0rem; - --timeline-line-medium-mobile: 12px; - --timeline-line-medium-rem-mobile: 0.75rem; - --timeline-line-large-desktop: 16px; - --timeline-line-large-rem-desktop: 1rem; - --timeline-line-large-tablet: 0px; - --timeline-line-large-rem-tablet: 0rem; - --timeline-line-large-mobile: 16px; - --timeline-line-large-rem-mobile: 1rem; - --timeline-layout-gutter-desktop: var(--dimensions-07); - --timeline-layout-gutter-tablet: 0px; - --timeline-layout-gutter-rem-tablet: 0rem; - --timeline-layout-gutter-mobile: var(--dimensions-07); - --timeline-layout-padding-left-desktop: var(--timeline-layout-gutter-mobile); - --timeline-layout-padding-left-tablet: 0px; - --timeline-layout-padding-left-rem-tablet: 0rem; - --timeline-layout-padding-left-mobile: var(--timeline-layout-gutter-mobile); - --timeline-layout-padding-top-desktop: var(--dimensions-13); - --timeline-layout-padding-top-tablet: 0px; - --timeline-layout-padding-top-rem-tablet: 0rem; - --timeline-layout-padding-top-mobile: var(--dimensions-06); - --measure-line-width-desktop: var(--borders-03); - --measure-line-width-tablet: var(--borders-03); - --measure-line-width-mobile: var(--borders-03); - --sheet-header-radius-desktop: 0px; - --sheet-header-radius-rem-desktop: 0rem; - --sheet-header-radius-tablet: 0px; - --sheet-header-radius-rem-tablet: 0rem; - --sheet-header-radius-mobile: 24px; - --sheet-header-radius-rem-mobile: 1.5rem; - --sheet-header-padding-y-desktop: 0px; - --sheet-header-padding-y-rem-desktop: 0rem; - --sheet-header-padding-y-tablet: 0px; - --sheet-header-padding-y-rem-tablet: 0rem; - --sheet-header-padding-y-mobile: var(--dimensions-05); - --sheet-header-padding-x-desktop: 0px; - --sheet-header-padding-x-rem-desktop: 0rem; - --sheet-header-padding-x-tablet: 0px; - --sheet-header-padding-x-rem-tablet: 0rem; - --sheet-header-padding-x-mobile: var(--dimensions-10); - --sheet-body-padding-x-desktop: 0px; - --sheet-body-padding-x-rem-desktop: 0rem; - --sheet-body-padding-x-tablet: 0px; - --sheet-body-padding-x-rem-tablet: 0rem; - --sheet-body-padding-x-mobile: var(--sheet-header-padding-x-mobile); - --sheet-footer-padding-y-desktop: 0px; - --sheet-footer-padding-y-rem-desktop: 0rem; - --sheet-footer-padding-y-tablet: 0px; - --sheet-footer-padding-y-rem-tablet: 0rem; - --sheet-footer-padding-y-mobile: var(--sheet-header-padding-y-mobile); - --sheet-footer-padding-x-desktop: 0px; - --sheet-footer-padding-x-rem-desktop: 0rem; - --sheet-footer-padding-x-tablet: 0px; - --sheet-footer-padding-x-rem-tablet: 0rem; - --sheet-footer-padding-x-mobile: var(--sheet-header-padding-x-mobile); - --sheet-body-padding-y-desktop: 0px; - --sheet-body-padding-y-rem-desktop: 0rem; - --sheet-body-padding-y-tablet: 0px; - --sheet-body-padding-y-rem-tablet: 0rem; - --sheet-body-padding-y-mobile: var(--sheet-header-padding-y-mobile); - --drag-indicator-radius-desktop: var(--radius-08); - --drag-indicator-radius-tablet: var(--radius-08); - --drag-indicator-radius-mobile: var(--radius-08); - --sidepanel-right-radius-desktop: var(--card-radius-rounded-desktop); - --sidepanel-right-radius-tablet: var(--card-radius-rounded-tablet); - --sidepanel-right-radius-mobile: var(--card-radius-rounded-mobile); - --sidepanel-item-height-desktop: var(--dimensions-16); - --sidepanel-item-height-tablet: var(--dimensions-16); - --sidepanel-item-height-mobile: var(--dimensions-17); - --tree-width-desktop: var(--dimensions-13); - --tree-width-tablet: var(--dimensions-13); - --tree-width-mobile: var(--dimensions-13); - --tree-width-sm-desktop: var(--dimensions-11); - --tree-width-sm-tablet: var(--dimensions-11); - --tree-width-sm-mobile: var(--dimensions-11); - --sidepanel-header-padding-top-desktop: var(--dimensions-10); - --sidepanel-header-padding-top-tablet: var(--dimensions-10); - --sidepanel-header-padding-top-mobile: var(--dimensions-10); - --sidepanel-header-padding-y-desktop: var(--dimensions-05); - --sidepanel-header-padding-y-tablet: var(--dimensions-05); - --sidepanel-header-padding-y-mobile: var(--dimensions-05); - --sidepanel-footer-padding-y-desktop: var(--dimensions-05); - --sidepanel-footer-padding-y-tablet: var(--dimensions-05); - --sidepanel-footer-padding-y-mobile: var(--dimensions-05); - --drag-indicator-vertical-width-desktop: var(--dimensions-03); - --drag-indicator-vertical-width-tablet: var(--dimensions-03); - --drag-indicator-vertical-width-mobile: var(--dimensions-03); - --sidepanel-item-padding-y-desktop: var(--dimensions-03); - --sidepanel-item-padding-y-tablet: var(--dimensions-03); - --sidepanel-item-padding-y-mobile: var(--dimensions-03); - --mirror-border-desktop: var(--dimensions-03); - --mirror-border-tablet: var(--dimensions-03); - --mirror-border-mobile: var(--dimensions-03); - --sheet-header-height-desktop: 0px; - --sheet-header-height-rem-desktop: 0rem; - --sheet-header-height-tablet: 0px; - --sheet-header-height-rem-tablet: 0rem; - --sheet-header-height-mobile: 60px; - --sheet-header-height-rem-mobile: 3.75rem; - --sidepanel-header-radius-bottom-desktop: var(--radius-03); - --sidepanel-header-radius-bottom-tablet: var(--radius-03); - --sidepanel-header-radius-bottom-mobile: var(--radius-03); - --logo-fund-horizontal-min-width-desktop: 165px; - --logo-fund-horizontal-min-width-rem-desktop: 10.3125rem; - --logo-fund-horizontal-min-width-tablet: 165px; - --logo-fund-horizontal-min-width-rem-tablet: 10.3125rem; - --logo-fund-horizontal-min-width-mobile: 165px; - --logo-fund-horizontal-min-width-rem-mobile: 10.3125rem; - --logo-fund-vertical-min-width-desktop: 96px; - --logo-fund-vertical-min-width-rem-desktop: 6rem; - --logo-fund-vertical-min-width-tablet: 96px; - --logo-fund-vertical-min-width-rem-tablet: 6rem; - --logo-fund-vertical-min-width-mobile: 96px; - --logo-fund-vertical-min-width-rem-mobile: 6rem; - --logo-fund-horizontal-min-height-desktop: 96px; - --logo-fund-horizontal-min-height-rem-desktop: 6rem; - --logo-fund-horizontal-min-height-tablet: 96px; - --logo-fund-horizontal-min-height-rem-tablet: 6rem; - --logo-fund-horizontal-min-height-mobile: 96px; - --logo-fund-horizontal-min-height-rem-mobile: 6rem; - --logo-fund-vertical-min-height-desktop: 182px; - --logo-fund-vertical-min-height-rem-desktop: 11.375rem; - --logo-fund-vertical-min-height-tablet: 182px; - --logo-fund-vertical-min-height-rem-tablet: 11.375rem; - --logo-fund-vertical-min-height-mobile: 182px; - --logo-fund-vertical-min-height-rem-mobile: 11.375rem; - --logo-riigiamet-min-height-desktop: 46px; - --logo-riigiamet-min-height-rem-desktop: 2.875rem; - --logo-riigiamet-min-height-tablet: 46px; - --logo-riigiamet-min-height-rem-tablet: 2.875rem; - --logo-riigiamet-min-height-mobile: 46px; - --logo-riigiamet-min-height-rem-mobile: 2.875rem; - --form-radio-selection-size-desktop: var(--dimensions-13); - --form-radio-selection-size-tablet: var(--dimensions-13); - --form-radio-selection-size-mobile: var(--dimensions-13); - --sidepanel-padding-y-desktop: var(--dimensions-05); - --sidepanel-padding-y-tablet: var(--dimensions-05); - --sidepanel-padding-y-mobile: var(--dimensions-05); - --button-meta-info-padding-desktop: var(--dimensions-03); - --button-meta-info-padding-tablet: var(--dimensions-03); - --button-meta-info-padding-mobile: var(--dimensions-03); -} - -:root.dark-mode { - --button-expand-background-default: var(--alpha-80); - --button-map-base-background-default: var(--neutral-850); - --button-map-base-background-hover: var(--neutral-850); - --button-map-base-background-selected: var(--neutral-850); - --button-map-base-border-default: var(--neutral-750); - --button-map-base-border-hover: var(--button-primary-border-hover); - --button-map-base-border-selected: var(--general-border-brand); - --button-map-base-text-background-default: var(--alpha-white-80); - --button-map-base-text-background-hover: var(--alpha-white-80); - --button-map-base-text-background-selected: var(--general-surface-brand-primary); - --button-map-info-background-default: var(--alpha-80); - --button-map-info-background-hover: var(--alpha-80); - --button-map-info-background-open: var(--button-primary-background-active); - --button-map-info-text-active: var(--link-inverted-default); - --button-map-info-text-default: var(--link-inverted-default); - --button-map-info-text-focus: var(--link-inverted-default); - --button-map-info-text-hover: var(--link-inverted-default); - --button-map-info-text-open: var(--link-inverted-default); - --button-neutral-inverted-background-active: var(--alpha-white-10); - --button-neutral-inverted-background-default: var(--alpha-01); - --button-neutral-inverted-background-focus: var(--alpha-01); - --button-neutral-inverted-background-hover: var(--alpha-white-10); - --button-neutral-inverted-text-active: var(--primary-400); - --button-neutral-inverted-text-default: var(--neutral-100); - --button-neutral-inverted-text-focus: var(--neutral-100); - --button-neutral-inverted-text-hover: var(--primary-200); - --button-neutral-background-active: var(--primary-700); - --button-neutral-background-default: var(--alpha-01); - --button-neutral-background-focus: var(--alpha-01); - --button-neutral-background-hover: var(--primary-800); - --button-neutral-border-default: var(--alpha-01); - --button-neutral-text-active: var(--primary-300); - --button-neutral-text-default: var(--neutral-100); - --button-neutral-text-focus: var(--neutral-100); - --button-neutral-text-hover: var(--primary-200); - --button-primary-background-active: var(--neutral-850); - --button-primary-background-default: var(--neutral-850); - --button-primary-background-focus: var(--neutral-850); - --button-primary-background-hover: var(--neutral-800); - --button-primary-border-active: var(--neutral-100); - --button-primary-border-default: var(--neutral-750); - --button-primary-border-focus: var(--neutral-750); - --button-primary-border-hover: var(--neutral-800); - --button-primary-text-active: var(--neutral-100); - --button-primary-text-default: var(--neutral-350); - --button-primary-text-focus: var(--neutral-100); - --button-primary-text-hover: var(--neutral-100); - --drag-indicator-accent: var(--general-border-accent); - --drag-indicator-light: var(--alpha-white-50); - --drag-indicator-button-background: var(--alpha-80); - --drag-indicator-button-icon: var(--general-icon-white); - --form-icon-selection-active: var(--general-icon-white); - --form-icon-selection-inactive: var(--general-icon-tertiary); - --logo-primary: var(--neutral-100); - --logo-secondary-blue: var(--neutral-100); - --logo-secondary-blue-dark: var(--neutral-100); - --map-application-link: var(--link-inverted-default); - --map-historical-background-default: var(--neutral-850); - --map-historical-background-hover: var(--neutral-850); - --map-historical-background-selected: var(--neutral-850); - --map-historical-border-default: var(--neutral-750); - --map-historical-border-hover: var(--button-primary-border-hover); - --map-historical-border-selected: var(--general-border-brand); - --map-historical-text-default: var(--neutral-300); - --map-historical-text-hover: var(--general-text-brand); - --map-historical-text-selected: var(--general-text-white); - --map-historical-text-background-default: var(--alpha-80); - --map-historical-text-background-hover: var(--alpha-80); - --map-historical-text-background-selected: var(--general-surface-brand-primary); - --measurement-tooltip: var(--alpha-80); - --mirror-indicator: var(--drag-indicator-accent); - --shape-default: var(--accent-600); - --shape-hover: var(--accent-500); - --shape-disabled-background: var(--alpha-white-50); - --shape-disabled-border: var(--button-card-disabled-border); - --shape-edit-background-default: #ff800099; - --shape-edit-background-hover: #ff8000cc; - --shape-edit-border-default: var(--accent-600); - --shape-edit-border-hover: var(--accent-600); - --shape-read-background-default: #e7f0f699; - --shape-read-background-hover: #e7f0f6cc; - --shape-read-border-default: var(--general-border-brand); - --shape-read-border-hover: var(--general-border-brand); - --sheet-body-default: var(--neutral-850); - --sheet-body-secondary: var(--neutral-750); - --sheet-footer-background: var(--sheet-header-background-default); - --sheet-header-border: var(--sheet-header-background-default); - --sheet-header-background-brand: var(--neutral-800); - --sheet-header-background-default: var(--neutral-800); - --sidepanel-background: var(--neutral-850); - --sidepanel-footer-background: var(--neutral-850); - --sidepanel-header-background-default: var(--neutral-800); - --sidepanel-header-background-open: var(--sidepanel-item-brand-background-open); - --sidepanel-item-brand-background-default: var(--neutral-750); - --sidepanel-item-brand-background-open: var(--neutral-800); - --sidepanel-item-brand-border-bottom: var(--neutral-750); - --sidepanel-item-white-background-default: var(--neutral-850); - --sidepanel-item-white-background-hover: var(--neutral-800); - --sidepanel-tree-default: var(--general-border-primary); - --sidepanel-tree-hover: var(--neutral-750); - --timeline-indicator-border: var(--drag-indicator-accent); - --timeline-indicator-background-default: var(--neutral-750); - --timeline-indicator-background-hover: var(--neutral-850); - --timeline-indicator-background-selected: var(--timeline-indicator-background-hover); - --timeline-indicator-icon-default: var(--general-icon-white); - --timeline-indicator-icon-hover: var(--general-icon-white); - --timeline-indicator-icon-selected: var(--general-icon-white); - --timeline-line-large: #fff; - --timeline-line-small: #fff; - --form-checkbox-radio-card-primary-selected-background: #99bdda; - --button-group-primary-selected-background: var(--form-checkbox-radio-card-primary-selected-background); -} diff --git a/libs/react-components/src/community/styles/_mixins.scss b/libs/react-components/src/community/styles/_mixins.scss deleted file mode 100644 index 034fcb35a..000000000 --- a/libs/react-components/src/community/styles/_mixins.scss +++ /dev/null @@ -1 +0,0 @@ -@forward '../../../design-tokens/mixins'; diff --git a/libs/react-components/src/community/styles/_typography.scss b/libs/react-components/src/community/styles/_typography.scss deleted file mode 100644 index 3e55e0206..000000000 --- a/libs/react-components/src/community/styles/_typography.scss +++ /dev/null @@ -1,64 +0,0 @@ -@use './mixins'; - -h1, -.h1, -.text-h1 { - font-size: var(--font-size-h1); - font-weight: var(--font-weight-h1); - line-height: var(--font-line-height-h1); -} - -h2, -.h2, -.text-h2 { - font-size: var(--font-size-h2); - font-weight: var(--font-weight-h2); - line-height: var(--font-line-height-h2); -} - -h3, -.h3, -.text-h3 { - font-size: var(--font-size-h3); - font-weight: var(--font-weight-h3); - line-height: var(--font-line-height-h3); -} - -h4, -.h4, -.text-h4 { - font-size: var(--font-size-h4); - font-weight: var(--font-weight-h4); - line-height: var(--font-line-height-h4); -} - -h5, -.h5, -.text-h5 { - font-size: var(--font-size-h5); - font-weight: var(--font-weight-h5); - line-height: var(--font-line-height-h5); -} - -h6, -.h6, -.text-h6 { - font-size: var(--font-size-h6); - font-weight: var(--font-weight-h6); - line-height: var(--font-line-height-h6); - color: var(--general-text-secondary); -} - -.text-normal { - font-family: var(--font-family); - font-size: var(--font-size-base); - font-weight: 400; - line-height: var(--font-line-height-base); - color: var(--general-text-primary); -} - -small, -.text-small { - font-size: var(--font-size-small); - line-height: var(--font-line-height-small); -} diff --git a/libs/react-components/src/community/styles/components/_calendar.scss b/libs/react-components/src/community/styles/components/_calendar.scss deleted file mode 100644 index 813505d1e..000000000 --- a/libs/react-components/src/community/styles/components/_calendar.scss +++ /dev/null @@ -1,29 +0,0 @@ -@use '../mixins'; - -/* Mui calendar picker */ - -div.MuiCalendarPicker-root { - margin: initial; - border-radius: var(--border-radius-default); - box-shadow: 0 2px 4px rgb(0 0 0 / 8%); - - @include mixins.print-grayscale; - - div.MuiPickersFadeTransitionGroup-root { - .MuiPickersCalendarHeader-label { - text-transform: capitalize; - } - } - - button.MuiPickersDay-root.Mui-highlighted { - font-weight: 700; - color: var(--color-primary-main); - background-color: var(--color-primary-highlight-subtle); - } - - button.MuiPickersDay-root.Mui-selected { - font-weight: 700; - color: var(--color-white); - background-color: var(--color-primary-main); - } -} diff --git a/libs/react-components/src/community/styles/components/_datepicker.scss b/libs/react-components/src/community/styles/components/_datepicker.scss deleted file mode 100644 index cfd99a7f3..000000000 --- a/libs/react-components/src/community/styles/components/_datepicker.scss +++ /dev/null @@ -1,22 +0,0 @@ -@use '../mixins'; - -/* Mui datepicker */ -div.MuiClockPointer-root { - @include mixins.print-grayscale; -} - -div.MuiClockPointer-root, -div.MuiClock-pin, -div.PrivatePickersYear-root button.Mui-selected, -div.MuiDayPicker-weekContainer button.Mui-selected { - background-color: var(--color-primary-main); -} - -div.MuiClockPointer-thumb { - border-color: var(--color-primary-main); -} - -div.PrivatePickersYear-root button.Mui-selected:hover, -div.MuiDayPicker-weekContainer button.Mui-selected:hover { - background-color: var(--color-primary-active); -} diff --git a/libs/react-components/src/community/styles/components/_text-editor.scss b/libs/react-components/src/community/styles/components/_text-editor.scss deleted file mode 100644 index cdf104ca1..000000000 --- a/libs/react-components/src/community/styles/components/_text-editor.scss +++ /dev/null @@ -1,3 +0,0 @@ -.public-DraftEditor-content { - min-height: 6.25rem; // 100px -} diff --git a/libs/react-components/src/community/styles/components/_toast.scss b/libs/react-components/src/community/styles/components/_toast.scss deleted file mode 100644 index 856f5e572..000000000 --- a/libs/react-components/src/community/styles/components/_toast.scss +++ /dev/null @@ -1,12 +0,0 @@ -/* Toast overrides */ -.Toastify .Toastify__toast { - min-height: unset; - padding: 0; - margin-bottom: 1rem; - font-family: inherit; - color: var(--color-text-default); -} - -.Toastify .Toastify__toast-body { - padding: 0; -} diff --git a/libs/react-components/src/community/styles/index.scss b/libs/react-components/src/community/styles/index.scss deleted file mode 100644 index 27dea71d5..000000000 --- a/libs/react-components/src/community/styles/index.scss +++ /dev/null @@ -1,8 +0,0 @@ -@forward '../../../design-tokens/variables'; -@use 'map-component.variables'; -@use 'components/datepicker'; -@use 'components/calendar'; -@use 'components/text-editor'; -@use 'components/toast'; -@use '@tehik-ee/tedi-core/helpers'; -@use '@tehik-ee/tedi-core/print'; diff --git a/libs/react-components/src/community/styles/storybook.scss b/libs/react-components/src/community/styles/storybook.scss deleted file mode 100644 index 70acc7beb..000000000 --- a/libs/react-components/src/community/styles/storybook.scss +++ /dev/null @@ -1,114 +0,0 @@ -@use 'mixins'; - -/* Helper classes for storybook examples */ -body { - height: auto; -} - -.example-box { - padding-top: 0.75rem; - padding-bottom: 0.75rem; - background-color: rgb(39 41 43 / 3%); - border: 1px solid rgb(39 41 43 / 10%); -} - -.example-row + .example-row { - margin-top: 0.75rem; -} - -/* text-editor-example **/ -.text-editor-example li { - margin-left: 1.5rem; // to match with draft.js implementation -} - -pre { - padding: 1rem; - white-space: pre-line; - border: 1px solid var(--color-border-contrast); - border-radius: 3px; -} - -.function { - white-space: break-spaces; -} - -code { - padding: 4px; - color: var(--neutral-100); - white-space: nowrap; - background-color: var(--red-600); - border-radius: 4px; -} - -a { - color: var(--color-primary-main); - text-decoration: none; - - &:where(:hover), - &:where(:focus-visible) { - text-decoration: underline; - } -} - -iframe { - display: block; -} - -.not-found { - background: linear-gradient(137.5deg, rgb(255 248 233 / 0%) 33.36%, #fff1d3 88.42%); -} - -.not-found__image { - display: block; - align-self: flex-end; - max-height: 50rem; - object-fit: cover; -} - -li > ul, -li > ol { - padding-left: 1.5rem; -} - -/* Color examples */ - -.color { - width: 200px; -} - -.color__example { - width: 100%; - height: 120px; - border-radius: 0.25rem; - transition: transform 0.2s ease-in; - - &:hover { - box-shadow: 0 4px 4px rgb(0 0 0 / 25%); - transform: scale(1.025); - } - - @include mixins.button-reset; -} - -.color__text { - @include mixins.button-reset; - - text-align: left; - transition: transform 0.2s ease-in; - - &:hover { - color: var(--color-black); - transform: scale(1.05); - } -} - -.material-symbols-outlined { - // Storybook has new styles that overwrite this on "un-styled" elements - font-family: 'Material Symbols Outlined', sans-serif !important; -} - -// temporary fix to display Select menu portal correctly in storybooks docs file -.innerZoomElementWrapper div.select__menu-portal { - top: auto; - left: auto; -} diff --git a/libs/react-components/src/community/types/index.ts b/libs/react-components/src/community/types/index.ts deleted file mode 100644 index c56672429..000000000 --- a/libs/react-components/src/community/types/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export type IntentionalAny = any; diff --git a/libs/react-components/src/tedi/components/base/icon/icon.module.scss b/libs/react-components/src/tedi/components/base/icon/icon.module.scss deleted file mode 100644 index ad2563635..000000000 --- a/libs/react-components/src/tedi/components/base/icon/icon.module.scss +++ /dev/null @@ -1,100 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -$icon-colors: ( - 'primary': 'general-icon-primary', - 'secondary': 'general-icon-secondary', - 'tertiary': 'general-icon-tertiary', - 'brand': 'general-icon-brand', - 'brand-dark': 'general-icon-brand-dark', - 'success': 'general-icon-success', - 'warning': 'general-icon-warning', - 'warning-dark': 'general-icon-warning-dark', - 'danger': 'general-icon-danger', - 'white': 'general-icon-white', -); -$icon-backgrounds: ( - 'primary': 'general-icon-background-primary', - 'secondary': 'general-icon-background-secondary', - 'brand-primary': 'general-icon-background-brand-primary', - 'brand-secondary': 'general-icon-background-brand-secondary', -); -$icon-sizes: ( - 8: icon-00, - 12: icon-01, - 16: icon-02, - 18: icon-03, - 24: icon-05, - 36: icon-06, - 48: icon-07, -); - -.tedi-icon__wrapper { - flex-shrink: 0; - - &--block { - &.tedi-icon__wrapper--bg { - display: flex; - } - } - - &--inline { - &.tedi-icon__wrapper--bg { - display: inline-flex; - } - } - - &.tedi-icon__wrapper--bg { - align-items: center; - justify-content: center; - border-radius: 100%; - - @each $name, $var in $icon-backgrounds { - &-#{$name} { - background-color: var(--#{$var}); - } - } - - @each $size, $vars in $icon-sizes { - &.tedi-icon__wrapper--size-#{$size} { - width: calc(var(--_width) * 2); - height: calc(var(--_height) * 2); - - @include mixins.responsive-styles(--_width, $vars); - @include mixins.responsive-styles(--_height, $vars); - } - } - } -} - -.tedi-icon { - flex-shrink: 0; - max-width: 1em; - overflow: hidden; - - &.tedi-icon--block { - display: block; - } - - &.tedi-icon--inline { - display: inline; - font-size: inherit; - vertical-align: -11.5%; - } - - @each $name, $var in $icon-colors { - &--color-#{$name} { - color: var(--#{$var}); - } - } - - @each $size, $vars in $icon-sizes { - &--size-#{$size} { - @include mixins.responsive-styles(font-size, $vars); - } - } - - &--filled { - font-variation-settings: 'FILL' 1; - font-optical-sizing: auto; - } -} diff --git a/libs/react-components/src/tedi/components/base/icon/icon.spec.tsx b/libs/react-components/src/tedi/components/base/icon/icon.spec.tsx deleted file mode 100644 index 46dee126a..000000000 --- a/libs/react-components/src/tedi/components/base/icon/icon.spec.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import { render } from '@testing-library/react'; - -import { Icon } from './icon'; - -import '@testing-library/jest-dom'; - -describe('Icon component', () => { - it('renders with default props', () => { - const { container } = render(); - const iconElement = container.querySelector('span[data-name="icon"]'); - expect(iconElement).toBeInTheDocument(); - expect(iconElement).toHaveClass('notranslate'); - expect(iconElement).toHaveClass('material-symbols--outlined'); - expect(iconElement).toHaveClass('tedi-icon'); - expect(iconElement).toHaveClass('tedi-icon--size-24'); - expect(iconElement).toHaveClass('tedi-icon--block'); - }); - - it('applies custom className to the icon when no background is set', () => { - const { container } = render(); - const iconElement = container.querySelector('span[data-name="icon"]'); - expect(iconElement).toBeInTheDocument(); - expect(iconElement).toHaveClass('custom-class'); - }); - - it('applies custom className to the wrapper when background is set', () => { - const { container } = render(); - const wrapperElement = container.querySelector('div.tedi-icon__wrapper'); - const iconElement = container.querySelector('span[data-name="icon"]'); - - expect(wrapperElement).toBeInTheDocument(); - expect(wrapperElement).toHaveClass('custom-class'); - expect(wrapperElement).toHaveClass('tedi-icon__wrapper--bg'); - expect(wrapperElement).toHaveClass('tedi-icon__wrapper--bg-primary'); - expect(iconElement).toBeInTheDocument(); - expect(iconElement).not.toHaveClass('custom-class'); - }); - - it('renders with custom size', () => { - const { container } = render(); - const iconElement = container.querySelector('span[data-name="icon"]'); - expect(iconElement).toBeInTheDocument(); - expect(iconElement).toHaveClass('tedi-icon--size-36'); - }); - - it('renders with custom type', () => { - const { container } = render(); - const iconElement = container.querySelector('span[data-name="icon"]'); - expect(iconElement).toBeInTheDocument(); - expect(iconElement).toHaveClass('material-symbols--sharp'); - }); - - it('renders with custom color', () => { - const { container } = render(); - const iconElement = container.querySelector('span[data-name="icon"]'); - expect(iconElement).toBeInTheDocument(); - expect(iconElement).toHaveClass('tedi-icon--color-success'); - }); - - it('renders with custom display', () => { - const { container } = render(); - const iconElement = container.querySelector('span[data-name="icon"]'); - expect(iconElement).toBeInTheDocument(); - expect(iconElement).toHaveClass('tedi-icon--inline'); - }); - - it('renders filled variant', () => { - const { container } = render(); - const iconElement = container.querySelector('span[data-name="icon"]'); - expect(iconElement).toBeInTheDocument(); - expect(iconElement).toHaveClass('tedi-icon--filled'); - }); - - it('renders with background color', () => { - const { container } = render(); - const wrapperElement = container.querySelector('div.tedi-icon__wrapper'); - const iconElement = container.querySelector('span[data-name="icon"]'); - - expect(wrapperElement).toBeInTheDocument(); - expect(wrapperElement).toHaveClass('tedi-icon__wrapper--bg'); - expect(wrapperElement).toHaveClass('tedi-icon__wrapper--bg-primary'); - expect(iconElement).toBeInTheDocument(); - }); - - it('renders with custom wrapper size', () => { - const { container } = render(); - const wrapperElement = container.querySelector('div.tedi-icon__wrapper'); - expect(wrapperElement).toHaveClass('tedi-icon__wrapper--size-48'); - }); - - it('renders with background and assigns ref to wrapper', () => { - const ref = { current: null }; - const { container } = render(); - - const wrapperElement = container.querySelector('div.tedi-icon__wrapper'); - expect(wrapperElement).toBeInTheDocument(); - expect(ref.current).toBe(wrapperElement); - }); -}); diff --git a/libs/react-components/src/tedi/components/base/icon/icon.stories.tsx b/libs/react-components/src/tedi/components/base/icon/icon.stories.tsx deleted file mode 100644 index b61dff7c7..000000000 --- a/libs/react-components/src/tedi/components/base/icon/icon.stories.tsx +++ /dev/null @@ -1,286 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import classNames from 'classnames'; - -import { Col, Row } from '../../layout/grid'; -import { VerticalSpacing } from '../../layout/vertical-spacing'; -import { Heading } from '../typography/heading/heading'; -import { Icon, IconProps } from './icon'; - -/** - * Figma ↗
- * Zeroheight ↗
- * Official Google Material Icons homepage icons ↗
- * Material Icons Figma ↗
- * Figma Material Symbols plugin ↗ - */ -const meta: Meta = { - title: 'Tedi-Ready/Base/Icon', - component: Icon, - parameters: { - design: { - type: 'figma', - url: 'https://www.figma.com/file/jWiRIXhHRxwVdMSimKX2FF/TEDI-Design-System-(draft)?type=design&node-id=45-30752&mode=dev', - }, - }, -}; - -export default meta; -type Story = StoryObj; - -const sizeArray: IconProps['size'][] = [8, 12, 16, 18, 24, 36, 48]; -const colorArray: IconProps['color'][] = [ - 'primary', - 'secondary', - 'tertiary', - 'brand', - 'brand-dark', - 'success', - 'warning', - 'warning-dark', - 'danger', - 'white', -]; - -type IconPropsType = IconProps['size'] | IconProps['color'] | IconProps['type'] | IconProps['background']; - -interface MultipleProps { - array: Type[]; - property: keyof IconProps; - items: { - name: string; - property: string; - color: IconProps['color']; - background: IconProps['background']; - size: IconProps['size']; - }[]; -} - -type TemplateMultipleProps = MultipleProps & IconProps; - -const TemplateRow: StoryFn = (args) => { - const { array, property, ...iconProps } = args; - - return ( - <> - - Outlined - - - {array.map((value, key) => ( - -
- -
- - ))} -
- - Filled - - - {array.map((value, key) => ( - -
- -
- - ))} -
- - ); -}; - -const TemplateColumn: StoryFn = (args) => { - const { array, property, ...iconProps } = args; - - return ( -
- {array.map((value, key) => ( - - - {value?.toString()} {value === 24 && default} - - - -   - - - - ))} -
- ); -}; - -const TemplateColumnWithMultipleVariants: StoryFn = (args) => { - const { items } = args; - - return ( -
- {items.map((item, key) => ( - - - {item.size?.toString()}  - {item.size === 24 && default} - - - -   - - - - ))} -
- ); -}; - -const TemplateColumnWithBackgroundCircleVarians: StoryFn = () => { - return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ); -}; - -const Template: StoryFn = (args) => ; - -export const Default: Story = { - render: Template, - - args: { - name: 'account_circle', - }, -}; - -export const Sizes: Story = { - name: 'Icon Size', - render: TemplateColumn, - - args: { - name: 'account_circle', - property: 'size', - color: 'primary', - array: sizeArray, - }, -}; - -export const SizesWithBackground: Story = { - name: 'Icon size inside background', - render: TemplateColumnWithMultipleVariants, - args: { - items: [ - { - name: 'info', - property: 'size', - color: 'brand', - background: 'brand-secondary', - size: 16, - }, - { - name: 'vaccines', - property: 'size', - color: 'brand', - background: 'brand-secondary', - size: 24, - }, - ], - }, -}; - -export const Colors: Story = { - render: TemplateRow, - name: 'Icon colors', - - args: { - name: 'account_circle', - property: 'color', - array: colorArray, - size: 48, - }, -}; - -export const Backgrounds: Story = { - render: TemplateColumnWithBackgroundCircleVarians, - name: 'Icon background colors', -}; - -export const UsedInsideText: Story = { - render: (args: { name: IconProps['name'] }) => { - return ( - - - - This is level 1 heading with inline icon - - - - This is level 2 heading with inline icon - - - - This is level 3 heading with inline icon - - - - This is level 4 heading with inline icon - - - - This is level 5 heading with inline icon - - - - This is level 6 heading with inline icon - -

- - This is paragraph text with inline icon -

- - - This is small text with inline icon - -
- ); - }, - args: { - name: 'account_circle', - }, -}; diff --git a/libs/react-components/src/tedi/components/base/icon/icon.tsx b/libs/react-components/src/tedi/components/base/icon/icon.tsx deleted file mode 100644 index ddb41751a..000000000 --- a/libs/react-components/src/tedi/components/base/icon/icon.tsx +++ /dev/null @@ -1,143 +0,0 @@ -import cn from 'classnames'; -import { forwardRef } from 'react'; - -import styles from './icon.module.scss'; - -export type IconSize = 8 | 12 | 16 | 18 | 24 | 36 | 48; -export type IconType = 'outlined' | 'sharp' | 'rounded'; -export type IconColor = - | 'primary' - | 'secondary' - | 'tertiary' - | 'brand' - | 'brand-dark' - | 'success' - | 'warning' - | 'warning-dark' - | 'danger' - | 'white'; -export type IconBackgroundColor = 'primary' | 'secondary' | 'brand-primary' | 'brand-secondary'; - -export interface IconSharedProps { - /** - * Name of material icon - * https://fonts.google.com/icons - */ - name: string; - /** - * Additional classes to style the icon or its wrapper. - * - If `background` is provided, the `className` will be applied to the wrapper element. - * - If `background` is not provided, the `className` will be applied directly to the icon element. - */ - className?: string; - /** - * Type of icon - * It is recommended to only use one type throughout your app - * @default outlined - */ - type?: IconType; - /** - * Size of the icon - * @default 24 - */ - size?: IconSize; - /** - * Render a filled variant of the icon - * @default false - */ - filled?: boolean; - /** - * Which color Icon should be - * Use 'positive', 'important' or 'warning' with caution, usually they should not be in application UI - * @default primary - */ - color?: IconColor; - /** - * Icons label for screen-readers. - * If omitted then the icon is hidden for screen-readers. - */ - label?: string; -} - -export interface IconWithBackgroundProps extends IconSharedProps { - /** - * Add round background - */ - background: IconBackgroundColor; - display?: 'block'; -} - -export interface IconWithoutBackgroundProps extends IconSharedProps { - background?: undefined; - /** - * Type of display - * @default block - */ - display?: 'block' | 'inline'; -} - -export type IconProps = IconSharedProps & (IconWithBackgroundProps | IconWithoutBackgroundProps); - -export const Icon = forwardRef((props: IconProps, ref): JSX.Element => { - const { - className, - name, - type = 'outlined', - size = 24, - filled, - display = 'block', - color = 'primary', - background, - label, - ...rest - } = props; - - const wrapperBEM = cn( - styles['tedi-icon__wrapper'], - { - [styles['tedi-icon__wrapper--bg']]: background, - [styles[`tedi-icon__wrapper--bg-${background}`]]: background, - [styles[`tedi-icon__wrapper--size-${size}`]]: size, - [styles['tedi-icon__wrapper--block']]: background, - }, - background && className - ); - - const iconBEM = cn( - 'notranslate', - 'material-symbols', - type && [`material-symbols--${type}`], - styles['tedi-icon'], - color && styles[`tedi-icon--color-${color}`], - size && styles[`tedi-icon--size-${size}`], - display && styles[`tedi-icon--${display}`], - filled && styles['tedi-icon--filled'], - !background && className - ); - - const iconElement = ( - - {name} - - ); - - if (background) { - return ( -
- {iconElement} -
- ); - } - - return iconElement; -}); - -Icon.displayName = 'Icon'; diff --git a/libs/react-components/src/tedi/components/base/typography/heading/heading.spec.tsx b/libs/react-components/src/tedi/components/base/typography/heading/heading.spec.tsx deleted file mode 100644 index 2e1ace161..000000000 --- a/libs/react-components/src/tedi/components/base/typography/heading/heading.spec.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { render } from '@testing-library/react'; - -import { Heading } from './heading'; - -describe('Heading', () => { - it('should render successfully', () => { - const { baseElement } = render(Title); - expect(baseElement).toBeTruthy(); - }); -}); diff --git a/libs/react-components/src/tedi/components/base/typography/heading/heading.stories.tsx b/libs/react-components/src/tedi/components/base/typography/heading/heading.stories.tsx deleted file mode 100644 index cef4e46c3..000000000 --- a/libs/react-components/src/tedi/components/base/typography/heading/heading.stories.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { TextRow } from '../../../../providers/storybook-provider/storybook-provider'; -import { Col, Row } from '../../../layout/grid'; -import { HeadingModifiers, Text } from '../text/text'; -import { Heading } from './heading'; - -/** - * Figma ↗
- * Zeroheight ↗ - */ - -const meta: Meta = { - title: 'Tedi-Ready/Base/Typography/Heading', - component: Heading, - parameters: { - design: { - type: 'figma', - url: 'https://www.figma.com/design/jWiRIXhHRxwVdMSimKX2FF/TEDI-Design-System-(draft)?node-id=115-11630&m=dev', - }, - }, -}; - -export default meta; -type Story = StoryObj; - -const headings: HeadingModifiers[] = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']; - -const TemplateHeadings: StoryFn = () => ( -
- - - - Desktop - - - - - Mobile - - - - {headings.map((heading, key) => ( - - Heading {heading.toUpperCase()} - - } - mobileText={ - - Heading {heading.toUpperCase()} - - } - className={key !== headings.length - 1 ? 'border-bottom' : ''} - /> - ))} -
-); - -export const Default: Story = { - args: { - children: 'Heading', - }, -}; - -export const Headings: Story = { - render: TemplateHeadings, -}; - -export const CustomModifier: Story = { - render: () => ( - <> - - H4 heading with H1 styles and warning color - - - H2 heading with normal bold text and brand color - - - H1 element with normal text styles - - - ), -}; - -export const SemanticHeadings: Story = { - render: () => ( - <> - - -

Heading 1

- - - Heading 1 - -
- - -

Heading 2

- - - Heading 2 - -
- - -

Heading 3

- - - Heading 3 - -
- - -

Heading 4

- - - Heading 4 - -
- - -
Heading 5
- - - Heading 5 - -
- - -
Heading 6
- - - Heading 6 - -
- - ), -}; diff --git a/libs/react-components/src/tedi/components/base/typography/heading/heading.tsx b/libs/react-components/src/tedi/components/base/typography/heading/heading.tsx deleted file mode 100644 index 39f924cae..000000000 --- a/libs/react-components/src/tedi/components/base/typography/heading/heading.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { HeadingModifiers, Text, TextProps } from '../text/text'; - -export type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6; - -export type HeadingProps = Omit & { - /** - * Semantic heading tag - * h1-h6 are allowed values - * @default h1 - */ - element?: Extract; -}; - -export const Heading = (props: HeadingProps) => { - const { children, element = 'h1', ...rest } = props; - - return ( - - {children} - - ); -}; diff --git a/libs/react-components/src/tedi/components/base/typography/text/text.spec.tsx b/libs/react-components/src/tedi/components/base/typography/text/text.spec.tsx deleted file mode 100644 index 1ef3d6c13..000000000 --- a/libs/react-components/src/tedi/components/base/typography/text/text.spec.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { render } from '@testing-library/react'; - -import { Text } from './text'; - -import '@testing-library/jest-dom'; - -describe('Text Component', () => { - it('renders text correctly with default props', () => { - const { getByTestId } = render(Text test); - const textElement = getByTestId('text'); - expect(textElement).toBeInTheDocument(); - expect(textElement.tagName).toBe('P'); - expect(textElement).toHaveTextContent('Text test'); - }); - - it('renders text with custom element correctly', () => { - const { getByTestId } = render( - - Text test - - ); - const textElement = getByTestId('text'); - expect(textElement).toBeInTheDocument(); - expect(textElement.tagName).toBe('DIV'); - expect(textElement).toHaveTextContent('Text test'); - }); - - it('renders text with custom modifiers correctly', () => { - const { getByTestId } = render( - - Text test - - ); - const textElement = getByTestId('text'); - expect(textElement).toBeInTheDocument(); - expect(textElement).toHaveClass('text-bold'); - expect(textElement).toHaveClass('text-italic'); - expect(textElement).toHaveTextContent('Text test'); - }); - - it('renders text with custom color correctly', () => { - const { getByTestId } = render( - - Text test - - ); - const textElement = getByTestId('text'); - expect(textElement).toBeInTheDocument(); - expect(textElement).toHaveClass('tedi-text--primary'); - expect(textElement).toHaveTextContent('Text test'); - }); -}); diff --git a/libs/react-components/src/tedi/components/base/typography/text/text.stories.tsx b/libs/react-components/src/tedi/components/base/typography/text/text.stories.tsx deleted file mode 100644 index ade0fb410..000000000 --- a/libs/react-components/src/tedi/components/base/typography/text/text.stories.tsx +++ /dev/null @@ -1,250 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { TextRow } from '../../../../providers/storybook-provider/storybook-provider'; -import { Col, Row } from '../../../layout/grid'; -import { VerticalSpacing } from '../../../layout/vertical-spacing'; -import { Text } from './text'; - -/** - * Figma ↗
- * Zeroheight ↗ - */ - -const meta: Meta = { - component: Text, - title: 'Tedi-Ready/Base/Typography/Text', - parameters: { - design: { - type: 'figma', - url: 'https://www.figma.com/design/jWiRIXhHRxwVdMSimKX2FF/TEDI-Design-System-(draft)?node-id=115-11630&m=dev', - }, - }, -}; - -export default meta; -type Story = StoryObj; - -const TemplateSubtitles: StoryFn = () => ( -
- - - - Desktop - - - - - Mobile - - - - - Subtitle - - } - mobileText={ - - Subtitle - - } - className="border-bottom" - /> - - Subtitle Small - - } - mobileText={ - - Subtitle Small - - } - className="border-bottom" - /> - - Label - - } - mobileText={ - - Label - - } - className="border-bottom" - /> - - Label bold - - } - mobileText={ - - Label bold - - } - /> -
-); - -const TemplateBodyText: StoryFn = () => ( -
- - - - Desktop - - - - - Mobile - - - - - Body bold} - mobileText={Body bold} - className="border-bottom" - /> - Body italic} - mobileText={Body italic} - className="border-bottom" - /> - Small} - mobileText={Small} - className="border-bottom" - /> - Small bold} - mobileText={Small bold} - className="border-bottom" - /> - Small italic} - mobileText={Small italic} - /> -
-); - -const TemplateGeneralText: StoryFn = () => ( - - - - - Rebane on väikese koera suurune ja pika koheva sabaga. Joostes hoiab ta saba horisontaalselt. Tema selja - karvad on oranžid. Eestis eelistab ta elupaigana metsatukkasid. - - - - - - - Rebane on väikese koera suurune ja pika koheva sabaga. Joostes hoiab ta saba horisontaalselt. Tema selja - karvad on oranžid. Eestis eelistab ta elupaigana metsatukkasid. - - - - - - - Rebane on väikese koera suurune ja pika koheva sabaga. Joostes hoiab ta saba horisontaalselt. Tema selja - karvad on oranžid. Eestis eelistab ta elupaigana metsatukkasid. - - - - - - - Rebane on väikese koera suurune ja pika koheva sabaga. Joostes hoiab ta saba horisontaalselt. Tema selja - karvad on oranžid. Eestis eelistab ta elupaigana metsatukkasid. - - - - - - - Rebane on väikese koera suurune ja pika koheva sabaga. Joostes hoiab ta saba horisontaalselt. Tema selja - karvad on oranžid. Eestis eelistab ta elupaigana metsatukkasid. - - - - -); - -const TemplateStatusText: StoryFn = () => ( - - - - - Rebane on väikese koera suurune ja pika koheva sabaga. Joostes hoiab ta saba horisontaalselt. Tema selja - karvad on oranžid. Eestis eelistab ta elupaigana metsatukkasid. - - - - - - - Rebane on väikese koera suurune ja pika koheva sabaga. Joostes hoiab ta saba horisontaalselt. Tema selja - karvad on oranžid. Eestis eelistab ta elupaigana metsatukkasid. - - - - - - - Rebane on väikese koera suurune ja pika koheva sabaga. Joostes hoiab ta saba horisontaalselt. Tema selja - karvad on oranžid. Eestis eelistab ta elupaigana metsatukkasid. - - - - - - - Rebane on väikese koera suurune ja pika koheva sabaga. Joostes hoiab ta saba horisontaalselt. Tema selja - karvad on oranžid. Eestis eelistab ta elupaigana metsatukkasid. - - - - - - - Rebane on väikese koera suurune ja pika koheva sabaga. Joostes hoiab ta saba horisontaalselt. Tema selja - karvad on oranžid. Eestis eelistab ta elupaigana metsatukkasid. - - - - -); - -export const Default: Story = { - args: { - children: 'Text', - }, -}; - -export const BodyText: Story = { - render: TemplateBodyText, - name: 'Body', -}; - -export const Subtitles: Story = { - render: TemplateSubtitles, -}; - -export const GeneralText: Story = { - render: TemplateGeneralText, - name: 'General text colors', -}; - -export const StatusText: Story = { - render: TemplateStatusText, - name: 'Status text colors', -}; diff --git a/libs/react-components/src/tedi/components/base/typography/text/text.tsx b/libs/react-components/src/tedi/components/base/typography/text/text.tsx deleted file mode 100644 index fc90766de..000000000 --- a/libs/react-components/src/tedi/components/base/typography/text/text.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import cn from 'classnames'; - -import { BreakpointSupport, useBreakpointProps } from '../../../../helpers'; -import type { HeadingLevel } from '../heading/heading'; - -export type HeadingModifiers = `h${HeadingLevel}`; - -export type TextModifiers = - | HeadingModifiers - | 'normal' - | 'small' - | 'bold' - | 'thin' - | 'italic' - | 'center' - | 'left' - | 'right' - | 'nowrap' - | 'break-all' - | 'break-word' - | 'break-spaces' - | 'uppercase' - | 'lowercase' - | 'capitalize' - | 'capitalize-first' - | 'inline-block' - | 'inline' - | 'line-normal' - | 'line-condensed' - | 'subtitle'; - -export type TextColor = - | 'primary' - | 'secondary' - | 'tertiary' - | 'white' - | 'disabled' - | 'brand' - | 'success' - | 'warning' - | 'danger' - | 'info' - | 'neutral'; - -export type TextElement = 'div' | 'p' | 'span' | 'li' | 'label' | HeadingModifiers; - -type TextBreakpointProps = { - /** - * Additional class - */ - className?: string; - /** - * Base element - * @default p - */ - element?: TextElement; - /** - * Single or multiple modifiers to change the text behavior - */ - modifiers?: TextModifiers[] | TextModifiers; - /** - * Color of the text - * Use 'success', 'important' or 'warning' with caution, usually they should not be in application UI - * @default primary - */ - color?: TextColor; -}; - -export interface TextProps extends BreakpointSupport { - /** - * Children of the text - */ - children: React.ReactNode; - /** - * ID attribute - */ - id?: string; - /** - * Allows to focus the element - */ - tabIndex?: number; -} - -const isHeadingModifier = (modifier: TextModifiers): modifier is HeadingModifiers => { - return /^h[1-6]$/.test(modifier); -}; - -export const Text = (props: TextProps): JSX.Element => { - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - const { - children, - className, - tabIndex = props.id ? -1 : undefined, - element: Element = 'p', - modifiers, - color, - ...rest - } = getCurrentBreakpointProps(props); - - const modifiersArray = typeof modifiers === 'string' ? [modifiers] : modifiers; - - const BEM = cn( - className, - modifiersArray?.map((modifier) => (isHeadingModifier(modifier) ? `tedi-text--${modifier}` : `text-${modifier}`)), - { [`tedi-text--${color}`]: color } - ); - - return ( - - {children} - - ); -}; diff --git a/libs/react-components/src/tedi/components/base/typography/typography.mdx b/libs/react-components/src/tedi/components/base/typography/typography.mdx deleted file mode 100644 index 8f25afc8c..000000000 --- a/libs/react-components/src/tedi/components/base/typography/typography.mdx +++ /dev/null @@ -1,75 +0,0 @@ -import { Meta, Unstyled } from '@storybook/blocks'; - - - -[Figma ↗]()
-[Zeroheight ↗](https://zeroheight.com/1ee8444b7/p/4651ec-typography)
- -### Text - -Text is a helper component used to apply different colors and modifiers to text. -Modifiers prop accepts array of modifiers or single modifier. It helps you to combine modifiers if needed. -Every text modifier and color has its own global CSS class, but using the Text component is recommended, as it allows your IDE to suggest possible values and helps reduce mistakes. - -Basic usage: - -```jsx - - Some text - -``` - -Multiple modifiers: - -```jsx - - Some text - -``` - -You can also use: - -```jsx -

Some text

-``` - -You can also use TEDI classes, such as: - -```jsx -

Some text

-``` - -### Heading - -This component is a wrapper around the `` component. It should only be used when we want to semantically render h1-h6 tags. -The same result can be achieved by using ``, but using this component provides a better indicator in code that we are using semantic headings. - -NB! Headings have dynamic font styles, which means that they have different font-size/font-weight/line-height -values for desktop/mobile. - -Basic usage: - -```jsx -Some heading -``` - -### Breakpoint support - -You can use breakpoint props to render modifiers, colors, or even elements differently based on different breakpoints. Simply pass an object as a prop -corresponding to the desired breakpoint. Each object can contain any combination of `modifiers` and `color` to adjust the text styling. - -Breakpoints available: `sm` `md` `lg` `xl` `xxl` - -Basic usage: - -```jsx - - Responsive Text - -``` - -```jsx - - Responsive Heading - -``` diff --git a/libs/react-components/src/tedi/components/buttons/button-content/README.md b/libs/react-components/src/tedi/components/buttons/button-content/README.md deleted file mode 100644 index 621f60a47..000000000 --- a/libs/react-components/src/tedi/components/buttons/button-content/README.md +++ /dev/null @@ -1,3 +0,0 @@ -ButtonContent component is only used internally by @tedi-design-system and is not exported. -It contains rendering visuals of links and buttons, so Anchor can be rendered visually as Button and vice versa. -But it forces component users to always use semantically correct component. diff --git a/libs/react-components/src/tedi/components/buttons/button-content/button-content.module.scss b/libs/react-components/src/tedi/components/buttons/button-content/button-content.module.scss deleted file mode 100644 index 8defff535..000000000 --- a/libs/react-components/src/tedi/components/buttons/button-content/button-content.module.scss +++ /dev/null @@ -1,537 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -$btn-height: 2.5rem; -$btn-height-small: 2rem; -$btn-height-large: 3.5rem; -$btn-width-large: 3.72rem; - -@mixin button-variant( - $background, - $border, - $color, - $background-hover, - $border-hover, - $color-hover, - $border-focus, - $background-focus, - $color-active, - $border-active, - $background-active, - $background-disabled: var(--button-main-disabled-general-background), - $border-disabled: var(--button-main-disabled-general-border), - $color-disabled: var(--button-main-disabled-general-text) -) { - color: $color; - background-color: $background; - border-color: $border; - - &.tedi-btn--is-active:not(:disabled, [aria-disabled='true']), - &:active:not(:disabled, [aria-disabled='true']) { - color: $color-active; - background-color: $background-active; - border-color: $border-active; - } - - &.tedi-btn--is-hovered:not(:disabled, [aria-disabled='true']), - &:hover:not(:disabled, [aria-disabled='true']) { - color: $color-hover; - background-color: $background-hover; - border-color: $border-hover; - } - - &:focus-visible:not(:disabled, [aria-disabled='true']) { - background-color: $background-focus; - border-color: $border; - outline: 2px solid $border-focus; - outline-offset: 1px; - } - - &:disabled { - color: $color-disabled; - background-color: $background-disabled; - border-color: $border-disabled; - } -} - -@mixin button-secondary-variant( - $border, - $color, - $background-hover, - $border-hover, - $color-hover, - $border-focus, - $background-focus, - $color-active, - $border-active, - $background-active, - $background-disabled: var(--button-main-disabled-general-background), - $border-disabled: var(--button-main-disabled-general-border), - $color-disabled: var(--button-main-disabled-general-text) -) { - @include button-variant( - var(--button-main-secondary-background-default), - $border, - $color, - $background-hover, - $border-hover, - $color-hover, - $border-focus, - $background-focus, - $color-active, - $border-active, - $background-active, - $background-disabled, - $border-disabled, - $color-disabled - ); -} - -@mixin link-variant($color, $color-hover, $color-active, $color-focus) { - color: $color; - - &.tedi-btn--is-hovered:not(:disabled, [aria-disabled='true']), - &:hover:not(:disabled, [aria-disabled='true']) { - color: $color-hover; - } - - &.tedi-btn--is-active:not(:disabled, [aria-disabled='true']), - &:active:not(:disabled, [aria-disabled='true']) { - color: $color-active; - } - - &:focus-visible:not(:disabled) { - color: $color-focus; - border-radius: 0; - outline: 2px solid $color-focus; - outline-offset: 1px; - - .tedi-btn__text { - text-decoration: underline; - } - } -} - -.tedi-btn { - --general-icon-primary: currentcolor; - - position: relative; - display: inline-flex; - align-items: center; - justify-content: center; - max-width: 100%; - min-height: $btn-height; - padding-top: calc(var(--_padding-top) - 1px); - padding-bottom: calc(var(--_padding-bottom) - 1px); - margin: 0; - text-align: center; - text-decoration: none; - cursor: pointer; - background-image: none; - border-style: solid; - border-width: 1px; - transition: 150ms ease; - transition-property: background-color, border-color; - - @include mixins.print-grayscale; - @include mixins.responsive-styles(font-family, family-primary, $exclude: tablet); - @include mixins.responsive-styles(font-size, button-text-size-default); - - // subtract border height - @include mixins.responsive-styles(--_padding-top, button-md-padding-y); - @include mixins.responsive-styles(--_padding-bottom, button-md-padding-y); - @include mixins.responsive-styles(padding-left, button-md-padding-x); - @include mixins.responsive-styles(padding-right, button-md-padding-x); - @include mixins.responsive-styles(border-radius, button-radius-default); -} - -.tedi-btn:disabled, -.tedi-btn[aria-disabled='true'] { - cursor: auto; -} - -.tedi-btn--small { - min-height: $btn-height-small; - padding-top: calc(var(--_padding-top) - 1px); - padding-bottom: calc(var(--_padding-bottom) - 1px); - - @include mixins.responsive-styles(font-size, button-text-size-sm); - @include mixins.responsive-styles(--_padding-top, button-sm-padding-y); - @include mixins.responsive-styles(--_padding-bottom, button-sm-padding-y); - @include mixins.responsive-styles(padding-left, button-sm-padding-x); - @include mixins.responsive-styles(padding-right, button-sm-padding-x); - - @include breakpoints.media-breakpoint-down(md) { - height: $btn-height; - } - - &.tedi-btn--icon-only { - width: $btn-height-small; - - @include breakpoints.media-breakpoint-down(md) { - width: $btn-height; - } - } -} - -.tedi-btn--large { - height: $btn-height-large; - padding-top: calc(var(--_padding-top) - 1px); - padding-bottom: calc(var(--_padding-bottom) - 1px); - - @include mixins.responsive-styles(--_padding-top, button-md-padding-y); - @include mixins.responsive-styles(--_padding-bottom, button-md-padding-y); - @include mixins.responsive-styles(padding-left, button-md-padding-x); - @include mixins.responsive-styles(padding-right, button-md-padding-x); - - &.tedi-btn--icon-only { - width: $btn-width-large; - } -} - -.tedi-btn--neutral { - padding: 0; - padding-top: calc(var(--_padding-top) - 1px); - padding-bottom: calc(var(--_padding-bottom) - 1px); - background-clip: padding-box; - - @include mixins.responsive-styles(--_padding-top, button-md-neutral-padding-y); - @include mixins.responsive-styles(--_padding-bottom, button-md-neutral-padding-y); - - &.tedi-btn--default.tedi-btn--icon-only { - &:hover:not(:disabled) { - background-color: var(--button-main-neutral-icon-only-background-hover); - } - - &:active:not(:disabled) { - background-color: var(--button-main-neutral-icon-only-background-active); - } - } - - &.tedi-btn--danger.tedi-btn--icon-only { - &:hover:not(:disabled) { - background-color: var(--button-main-danger-neutral-icon-only-background-hover); - } - - &:active:not(:disabled) { - background-color: var(--button-main-danger-neutral-icon-only-background-active); - } - } -} - -.tedi-btn--icon-only { - width: $btn-height; - padding: 0; - - .tedi-btn__text { - position: absolute !important; - width: 1px !important; - height: 1px !important; - padding: 0 !important; - overflow: hidden; - clip: rect(1px, 1px, 1px, 1px); - border: 0 !important; - - @include mixins.visually-hidden; - } -} - -.tedi-btn--default { - &.tedi-btn--primary { - @include button-variant( - var(--button-main-primary-background-default), - var(--button-main-primary-border-default), - var(--button-main-primary-text-default), - var(--button-main-primary-background-hover), - var(--button-main-primary-border-hover), - var(--button-main-primary-text-default), - var(--button-main-primary-border-focus), - var(--button-main-primary-background-focus), - var(--button-main-primary-text-default), - var(--button-main-primary-border-active), - var(--button-main-primary-background-active) - ); - } - - &.tedi-btn--secondary { - @include button-secondary-variant( - var(--button-main-secondary-border-default), - var(--button-main-secondary-text-default), - var(--button-main-secondary-background-hover), - var(--button-main-secondary-border-hover), - var(--button-main-secondary-text-default), - var(--button-main-secondary-border-focus), - var(--button-main-secondary-background-focus), - var(--button-main-secondary-text-default), - var(--button-main-secondary-border-active), - var(--button-main-secondary-background-active) - ); - } - - &.tedi-btn--neutral { - @include button-variant( - var(--button-main-neutral-background-default), - var(--button-main-neutral-border-default), - var(--button-main-neutral-text-default), - var(--button-main-neutral-background-hover), - var(--button-main-neutral-border-hover), - var(--button-main-neutral-text-hover), - var(--button-main-primary-border-focus), - var(--button-main-neutral-background-focus), - var(--button-main-neutral-text-active), - var(--button-main-neutral-border-active), - var(--button-main-neutral-background-active), - var(--button-main-neutral-background-default), - var(--button-main-neutral-background-default) - ); - } -} - -.tedi-btn--danger { - &.tedi-btn--primary { - @include button-variant( - var(--button-main-danger-background-default), - var(--button-main-danger-border-default), - var(--button-main-danger-text-default), - var(--button-main-danger-background-hover), - var(--button-main-danger-border-hover), - var(--button-main-danger-text-default), - var(--button-main-primary-border-focus), - var(--button-main-danger-background-focus), - var(--button-main-danger-text-default), - var(--button-main-danger-border-active), - var(--button-main-danger-background-active) - ); - } - - &.tedi-btn--neutral { - @include button-variant( - var(--button-main-danger-neutral-background-default), - var(--button-main-danger-neutral-border-default), - var(--button-main-danger-neutral-text-default), - var(--button-main-danger-neutral-background-hover), - var(--button-main-danger-neutral-border-hover), - var(--button-main-danger-neutral-text-hover), - var(--button-main-primary-border-focus), - var(--button-main-danger-neutral-background-focus), - var(--button-main-danger-neutral-text-active), - var(--button-main-danger-neutral-border-active), - var(--button-main-danger-neutral-background-active), - var(--button-main-neutral-background-default), - var(--button-main-neutral-background-default) - ); - } -} - -.tedi-btn--success { - &.tedi-btn--primary { - @include button-variant( - var(--button-main-success-background-default), - var(--button-main-success-border-default), - var(--button-main-success-text-default), - var(--button-main-success-background-hover), - var(--button-main-success-border-hover), - var(--button-main-success-text-default), - var(--button-main-primary-border-focus), - var(--button-main-success-background-focus), - var(--button-main-success-text-default), - var(--button-main-success-border-active), - var(--button-main-success-background-active) - ); - } -} - -.tedi-btn--inverted { - &.tedi-btn--primary { - @include button-variant( - var(--button-main-primary-inverted-background-default), - var(--button-main-primary-inverted-border-default), - var(--button-main-primary-inverted-text-default), - var(--button-main-primary-inverted-background-hover), - var(--button-main-primary-inverted-border-hover), - var(--button-main-primary-inverted-text-hover), - var(--button-main-primary-inverted-border-focus), - var(--button-main-primary-inverted-background-focus), - var(--button-main-primary-inverted-text-default), - var(--button-main-primary-inverted-border-active), - var(--button-main-primary-inverted-background-active) - ); - } - - &.tedi-btn--secondary { - @include button-variant( - var(--button-main-secondary-inverted-background-default), - var(--button-main-secondary-inverted-border-default), - var(--button-main-secondary-inverted-text-default), - var(--button-main-secondary-inverted-background-hover), - var(--button-main-secondary-inverted-border-hover), - var(--button-main-secondary-inverted-text-default), - var(--button-main-secondary-inverted-border-focus), - var(--button-main-secondary-inverted-background-focus), - var(--button-main-secondary-inverted-text-default), - var(--button-main-secondary-inverted-border-active), - var(--button-main-secondary-inverted-background-active) - ); - } - - &.tedi-btn--neutral { - @include button-variant( - var(--button-main-neutral-inverted-background-default), - var(--button-main-neutral-inverted-border-default), - var(--button-main-neutral-inverted-text-default), - var(--button-main-neutral-inverted-background-hover), - var(--button-main-neutral-inverted-border-hover), - var(--button-main-neutral-inverted-text-hover), - var(--button-main-neutral-inverted-border-focus), - var(--button-main-neutral-inverted-background-focus), - var(--button-main-neutral-inverted-text-default), - var(--button-main-neutral-inverted-border-active), - var(--button-main-neutral-inverted-background-active), - var(--button-main-neutral-inverted-background-default), - var(--button-main-neutral-inverted-background-default) - ); - } - - &.tedi-btn--link { - @include link-variant( - var(--link-inverted-default), - var(--link-inverted-hover), - var(--link-inverted-active), - var(--link-inverted-focus) - ); - } -} - -.tedi-btn--text-color { - &.tedi-btn--link { - @include link-variant( - inherit, - var(--button-main-neutral-text-hover), - var(--button-main-disabled-general-text), - inherit - ); - } -} - -.tedi-btn--link { - display: inline-flex; - width: auto; - height: auto; - min-height: auto; - padding: 0; - text-align: left; - text-decoration: none; - background: none; - border: none; - - @include link-variant( - var(--link-primary-default), - var(--link-primary-hover), - var(--link-primary-active), - var(--link-primary-focus) - ); - - .tedi-btn__icon--left { - @include mixins.responsive-styles(margin-right, button-sm-inner-spacing); - } - - .tedi-btn__icon--right { - @include mixins.responsive-styles(margin-left, button-sm-inner-spacing); - } -} - -.tedi-btn__text { - @include mixins.responsive-styles(padding-left, button-md-inner-spacing); - @include mixins.responsive-styles(padding-right, button-md-inner-spacing); - - .tedi-btn--link.tedi-btn--is-hovered:not(:disabled) &, - .tedi-btn--link.tedi-btn--is-active:not(:disabled) &, - .tedi-btn--link:hover:not(:disabled) &, - .tedi-btn--link:active:not(:disabled) & { - text-decoration: underline; - } - - .tedi-btn--is-loading:not(.tedi-btn--icon) & { - color: var(--alpha-01); - } - - .tedi-btn--small & { - @include mixins.responsive-styles(padding-left, button-sm-inner-spacing); - @include mixins.responsive-styles(padding-right, button-sm-inner-spacing); - } - - .tedi-btn--link & { - padding: 0; - } - - &:not(.tedi-btn--link .tedi-btn__text) { - text-wrap: nowrap; - - @include breakpoints.media-breakpoint-up(md) { - display: -webkit-box; - overflow: hidden; - text-overflow: ellipsis; - text-wrap: wrap; - word-break: break-word; - -webkit-line-clamp: 2; - line-clamp: 2; - -webkit-box-orient: vertical; - } - } -} - -.tedi-btn__icon--left, -.tedi-btn__icon--right { - display: inline-flex; - flex-shrink: 0; - padding: 0; -} - -.tedi-btn__icon { - display: flex; - align-items: center; - justify-content: center; - - .tedi-btn--link & { - vertical-align: text-bottom; - } -} - -.tedi-btn__inner { - display: flex; - align-items: center; - justify-content: center; - min-width: 1.5rem; - min-height: 1.5rem; - - .tedi-btn--link.tedi-btn__icon-standalone--link:not(.tedi-btn--is-loading) & { - display: inline-flex; - align-items: flex-start; - - .tedi-btn__icon { - @include mixins.responsive-styles(line-height, body-regular-line-height); - } - } - - .tedi-btn--link:not(.tedi-btn--is-loading) & { - display: inline; - } -} - -.tedi-btn__spinner { - stroke: currentcolor; -} - -.tedi-btn--underline { - .tedi-btn__text { - text-decoration: underline; - } -} - -.tedi-btn--no-style { - @include mixins.button-reset; -} - -.tedi-btn--full-width { - width: 100%; -} diff --git a/libs/react-components/src/tedi/components/buttons/button-content/button-content.spec.tsx b/libs/react-components/src/tedi/components/buttons/button-content/button-content.spec.tsx deleted file mode 100644 index 6d10c836e..000000000 --- a/libs/react-components/src/tedi/components/buttons/button-content/button-content.spec.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import { fireEvent, render, screen } from '@testing-library/react'; - -import ButtonContent, { ButtonContentProps } from './button-content'; - -import '@testing-library/jest-dom'; - -describe('ButtonContent component', () => { - // eslint-disable-next-line @typescript-eslint/ban-types - const defaultProps: ButtonContentProps<'button', {}, {}> = { - children: 'Click Me', - }; - - it('renders button with default styles and children', () => { - render(); - const button = screen.getByRole('button', { name: /click me/i }); - expect(button).toBeInTheDocument(); - expect(button).toHaveClass('tedi-btn tedi-btn--primary tedi-btn--default'); - }); - - it('applies custom class names', () => { - render(); - const button = screen.getByRole('button'); - expect(button).toHaveClass('custom-class'); - }); - - it('renders with icon only', () => { - render(); - const icon = screen.getByRole('img', { hidden: true }); - expect(icon).toBeInTheDocument(); - expect(icon).toHaveClass('tedi-btn__icon tedi-btn__icon--center'); - }); - - it('renders with left icon', () => { - render(); - const leftIcon = screen.getByRole('img', { hidden: true }); - expect(leftIcon).toBeInTheDocument(); - expect(leftIcon).toHaveClass('tedi-btn__icon tedi-btn__icon--left'); - }); - - it('renders with right icon', () => { - render(); - const rightIcon = screen.getByRole('img', { hidden: true }); - expect(rightIcon).toBeInTheDocument(); - expect(rightIcon).toHaveClass('tedi-btn__icon tedi-btn__icon--right'); - }); - - it('renders underline when underline prop is true', () => { - render(); - const button = screen.getByRole('button'); - expect(button).toHaveClass('tedi-btn--underline'); - }); - - it('renders in loading state with spinner', () => { - render(); - const spinner = screen.getByRole('status'); - expect(spinner).toBeInTheDocument(); - expect(spinner).toHaveClass('tedi-btn__spinner'); - }); - - it('renders with full width when fullWidth is true', () => { - render(); - const button = screen.getByRole('button'); - expect(button).toHaveClass('tedi-btn--full-width'); - }); - - it('does not trigger onClick when isLoading is true', () => { - const handleClick = jest.fn(); - render(); - const button = screen.getByRole('button'); - fireEvent.click(button); - expect(handleClick).not.toHaveBeenCalled(); - }); - - it('triggers onClick when clicked and not loading', () => { - const handleClick = jest.fn(); - render(); - const button = screen.getByRole('button'); - fireEvent.click(button); - expect(handleClick).toHaveBeenCalledTimes(1); - }); -}); diff --git a/libs/react-components/src/tedi/components/buttons/button-content/button-content.tsx b/libs/react-components/src/tedi/components/buttons/button-content/button-content.tsx deleted file mode 100644 index 7a6fa1db1..000000000 --- a/libs/react-components/src/tedi/components/buttons/button-content/button-content.tsx +++ /dev/null @@ -1,209 +0,0 @@ -import cn from 'classnames'; -import React, { forwardRef } from 'react'; - -import { AllowedHTMLTags, PolymorphicComponentPropWithRef, PolymorphicRef } from '../../../helpers/polymorphic/types'; -import { UnknownType } from '../../../types/commonTypes'; -import { Icon, IconWithoutBackgroundProps } from '../../base/icon/icon'; -import { Spinner } from '../../loaders/spinner/spinner'; -import { Print } from '../../misc/print/print'; -import { ButtonColor, ButtonType } from '../button/button'; -import styles from './button-content.module.scss'; - -export type ButtonContentProps< - C extends React.ElementType, - P extends Record, - A -> = PolymorphicComponentPropWithRef< - AllowedHTMLTags, - { - /** - * Button children - */ - children: React.ReactNode; - /** - * Additional custom class name. - */ - className?: string; - /** - * Button visual type - * @default primary - */ - visualType?: ButtonType; - /** - * If button should take all the space it has - */ - fullWidth?: boolean; - /** - * Color schema for button. PS text-color works only with link type links. - * @default default - */ - color?: ButtonColor; - /** - * Button size - */ - size?: 'default' | 'small' | 'large'; - /** - * Name of the icon when button only has an icon in it. - */ - icon?: string | IconWithoutBackgroundProps; - /** - * Name of the icon we want to show on the left. - */ - iconLeft?: string | IconWithoutBackgroundProps; - /** - * Name of the icon we want to show on the right. - */ - iconRight?: string | IconWithoutBackgroundProps; - /** - * Underline the button text - */ - underline?: boolean; - /** - * If button is active and should keep its hover state. - */ - isHovered?: boolean; - /** - * If button is active and should keep it's active state. - */ - isActive?: boolean; - /** - * If button is in loading state and should show spinner. - * When isLoading is true, button does not trigger onClick event. - * @default false - */ - isLoading?: boolean; - /** - * Skip applying button/link styles - * Useful when you just want to use Button or Link logic without the styles - * In this case icon, iconLeft and iconRight are ignored - */ - noStyle?: boolean; - /** - * - */ - renderWrapperElement?: unknown; - } & P ->; - -export type ButtonContentComponent = , A>( - props: ButtonContentProps -) => React.ReactNode; - -const InternalButtonContent = forwardRef( - , A>( - { - children, - as, - text, - className, - visualType = 'primary', - color = 'default', - size, - icon, - iconLeft, - iconRight, - underline = false, - isHovered, - isActive, - isLoading = false, - noStyle, - renderWrapperElement, - fullWidth, - onClick, - ...rest - }: ButtonContentProps, - ref?: PolymorphicRef - ) => { - const Component = as || 'button'; - const hasIcon = icon || iconLeft || iconRight; - - const BEM = !noStyle - ? cn( - styles['tedi-btn'], - styles[`tedi-btn--${visualType}`], - styles[`tedi-btn--${color}`], - { [styles[`tedi-btn--${size}`]]: size }, - { [styles['tedi-btn--underline']]: underline }, - { [styles['tedi-btn--is-hovered']]: isHovered }, - { [styles['tedi-btn--is-active']]: isActive }, - { [styles['tedi-btn--is-loading']]: isLoading }, - { [styles['tedi-btn--icon-only']]: icon }, - { [styles['tedi-btn--icon']]: hasIcon }, - { [styles['tedi-btn--full-width']]: fullWidth }, - className - ) - : cn(styles['tedi-btn--no-style'], { [styles['tedi-btn--full-width']]: fullWidth }, className); - - const getIcon = (location: string, icon: string | IconWithoutBackgroundProps): JSX.Element => { - const iconBEM = cn(styles['tedi-btn__icon'], styles[`tedi-btn__icon--${location}`], { - [styles['tedi-btn__spinner']]: isLoading, - }); - - const isLink = visualType === 'link'; - - const defaultIconProps: Partial = { - size: size === 'large' ? 24 : 18, - className: iconBEM, - ...(isLink ? { display: 'inline' } : {}), - }; - - const iconProps: IconWithoutBackgroundProps = - typeof icon === 'string' - ? { ...defaultIconProps, name: icon } - : { ...defaultIconProps, ...icon, className: cn(defaultIconProps.className, icon?.className) }; - - return isLoading ? : ; - }; - - const renderContent = (): JSX.Element => { - const leftContent = isLoading ? ( - - ) : iconLeft ? ( - getIcon('left', iconLeft) - ) : icon ? ( - getIcon('center', icon) - ) : null; - - return ( - - {leftContent} - {children} - {!isLoading && iconRight && getIcon('right', iconRight)} - - ); - }; - - const onClickHandler = (event: React.MouseEvent): void => { - if (onClick && !isLoading) onClick(event); - }; - - return ( - - - {!noStyle ? renderContent() : children} - - - ); - } -); - -InternalButtonContent.displayName = 'ButtonContent'; - -/** - * Shares the rendering logic between `Link` and `Button`. We don't export it from the component library. - */ -export const ButtonContent: ButtonContentComponent = InternalButtonContent; - -export default ButtonContent; diff --git a/libs/react-components/src/tedi/components/buttons/button-group/button-group.module.scss b/libs/react-components/src/tedi/components/buttons/button-group/button-group.module.scss deleted file mode 100644 index 9317067c5..000000000 --- a/libs/react-components/src/tedi/components/buttons/button-group/button-group.module.scss +++ /dev/null @@ -1,111 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -.tedi-button-group { - display: flex; - gap: 0; - - &--primary, - &--secondary { - .tedi-button-group__item { - display: flex; - align-items: center; - justify-content: center; - height: auto; - min-height: 2.5rem; - padding-top: calc(var(--_padding-top) - 1px); - padding-bottom: calc(var(--_padding-bottom) - 1px); - text-align: center; - cursor: pointer; - border-radius: 0; - - @include mixins.responsive-styles(--_padding-top, button-md-padding-y); - @include mixins.responsive-styles(--_padding-bottom, button-md-padding-y); - @include mixins.responsive-styles(padding-left, button-md-padding-x); - @include mixins.responsive-styles(padding-right, button-md-padding-x); - - &:first-child { - @include mixins.responsive-styles(border-top-left-radius, button-radius-sm); - @include mixins.responsive-styles(border-bottom-left-radius, button-radius-sm); - } - - &:not(:first-child) { - margin-left: -1px; - } - - &:last-child { - @include mixins.responsive-styles(border-top-right-radius, button-radius-sm); - @include mixins.responsive-styles(border-bottom-right-radius, button-radius-sm); - } - - &:focus-visible { - z-index: 1; - } - - @include breakpoints.media-breakpoint-down(md) { - flex: 1; - } - } - } - - &--primary { - .tedi-button-group__item { - color: var(--button-group-primary-inactive-text); - background-color: var(--button-group-primary-inactive-background); - border: 1px solid var(--button-group-primary-inactive-border); - - &--disabled:disabled { - color: var(--button-group-primary-disabled-text); - background-color: var(--button-group-primary-disabled-background); - border: 1px solid var(--button-group-primary-disabled-border); - } - - &:hover:not(:disabled) { - color: var(--button-group-primary-hover-text); - background-color: var(--button-group-primary-hover-background); - border-color: var(--button-group-primary-hover-border); - } - - &.tedi-button-group__item--active:not(:disabled) { - z-index: 1; - color: var(--button-group-primary-selected-text); - background-color: var(--button-group-primary-selected-background); - border-color: var(--button-group-primary-selected-border); - } - } - } - - &--secondary { - .tedi-button-group__item { - color: var(--button-group-secondary-inactive-text); - background-color: var(--button-group-secondary-inactive-background); - border: 1px solid var(--button-group-secondary-inactive-border); - - &--disabled:disabled { - color: var(--button-group-secondary-disabled-text); - background-color: var(--button-group-secondary-disabled-background); - border: 1px solid var(--button-group-secondary-disabled-border); - } - - &:hover:not(:disabled) { - color: var(--button-group-secondary-hover-text); - background-color: var(--button-group-secondary-hover-background); - border-color: var(--button-group-secondary-hover-border); - } - - &.tedi-button-group__item--active:not(:disabled) { - z-index: 1; - color: var(--button-group-secondary-selected-text); - background-color: var(--button-group-secondary-selected-background); - outline: 2px solid var(--button-group-secondary-selected-border); - outline-offset: -2px; - } - } - } - - &--stretch { - .tedi-button-group__item { - flex: 1; - } - } -} diff --git a/libs/react-components/src/tedi/components/buttons/button-group/button-group.spec.tsx b/libs/react-components/src/tedi/components/buttons/button-group/button-group.spec.tsx deleted file mode 100644 index 592173b60..000000000 --- a/libs/react-components/src/tedi/components/buttons/button-group/button-group.spec.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import { fireEvent, render, screen } from '@testing-library/react'; -import React from 'react'; - -import Button from '../button/button'; -import { ButtonGroup } from './button-group'; - -describe('ButtonGroup Component', () => { - it('renders child buttons correctly', () => { - render( - - - - - ); - const buttons = screen.getAllByRole('button'); - expect(buttons).toHaveLength(2); - expect(buttons[0]).toHaveTextContent('Button 1'); - expect(buttons[1]).toHaveTextContent('Button 2'); - }); - - it('applies the stretch class when the stretch prop is true', () => { - const { container } = render( - - - - ); - expect(container.firstChild).toHaveClass('tedi-button-group--stretch'); - }); - - it('does not apply the stretch class when the stretch prop is false', () => { - const { container } = render( - - - - ); - expect(container.firstChild).not.toHaveClass('tedi-button-group--stretch'); - }); - - it('triggers onSelectionChange when a button is clicked', () => { - const onSelectionChange = jest.fn(); - render( - - - - - ); - const button1 = screen.getByText('Button 1'); - fireEvent.click(button1); - expect(onSelectionChange).toHaveBeenCalledWith('button1'); - }); - - it('does not trigger onSelectionChange for a disabled button', () => { - const onSelectionChange = jest.fn(); - render( - - - - - ); - const button1 = screen.getByText('Button 1'); - fireEvent.click(button1); - expect(onSelectionChange).not.toHaveBeenCalled(); - }); - - it('applies custom className correctly', () => { - const { container } = render( - - - - ); - expect(container.firstChild).toHaveClass('custom-class'); - }); - - it('renders with the correct type class based on the type prop', () => { - const { container } = render( - - - - ); - expect(container.firstChild).toHaveClass('tedi-button-group--secondary'); - }); - - it('renders with the correct aria-label when provided', () => { - render( - - - - ); - const group = screen.getByRole('group'); - expect(group).toHaveAttribute('aria-label', 'Test Button Group'); - }); - - it('renders active class on a button when isActive is true', () => { - const { container } = render( - - - - - ); - const activeButton = container.querySelector('.tedi-button-group__item--active'); - expect(activeButton).toBeInTheDocument(); - expect(activeButton).toHaveTextContent('Button 1'); - }); - - it('updates state correctly when a button is clicked', () => { - const TestComponent = () => { - const [selected, setSelected] = React.useState(null); - - return ( - - - - - ); - }; - - render(); - - const button1 = screen.getByTestId('button1'); - const button2 = screen.getByTestId('button2'); - - fireEvent.click(button1); - expect(button1).toHaveClass('tedi-button-group__item--active'); - expect(button2).not.toHaveClass('tedi-button-group__item--active'); - - fireEvent.click(button2); - expect(button2).toHaveClass('tedi-button-group__item--active'); - expect(button1).not.toHaveClass('tedi-button-group__item--active'); - }); -}); diff --git a/libs/react-components/src/tedi/components/buttons/button-group/button-group.stories.tsx b/libs/react-components/src/tedi/components/buttons/button-group/button-group.stories.tsx deleted file mode 100644 index 921f320dd..000000000 --- a/libs/react-components/src/tedi/components/buttons/button-group/button-group.stories.tsx +++ /dev/null @@ -1,184 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import { useState } from 'react'; - -import { Col, Row } from '../../layout/grid'; -import { VerticalSpacing } from '../../layout/vertical-spacing'; -import { Button } from '../button/button'; -import ButtonGroup, { ButtonGroupProps } from './button-group'; - -/** - * Figma ↗
- * ZeroHeight ↗ - */ - -const meta: Meta = { - title: 'TEDI-Ready/Components/Buttons/ButtonGroup', - component: ButtonGroup, - parameters: { - status: { - type: 'partiallyTediReady', - }, - }, -}; - -export default meta; -type Story = StoryObj; - -const buttonStates = ['Default', 'Hover', 'Active', 'Disabled']; - -const Template: StoryFn = (args) => ( - - - - - -); - -const TemplateTypes: StoryFn = (args) => { - return ( - - - - - - - - - - - - - ); -}; - -export const Default: Story = { - render: Template, - args: { - type: 'primary', - stretch: false, - }, -}; - -export const Types: StoryObj = { - render: TemplateTypes, -}; - -export const WithIcon: StoryObj = { - render: TemplateTypes, - args: { iconLeft: 'table' }, -}; - -export const IconOnly: StoryObj = { - render: TemplateTypes, - args: { icon: 'table' }, -}; - -const TemplateColumn: StoryFn<{ states: string[]; type: 'primary' | 'secondary' }> = (args) => { - const [selectedId, setSelectedId] = useState(null); - - return ( - - {args.states.map((state, index) => ( - - - {state} - - - - - - - - - - ))} - - ); -}; - -export const Primary: StoryObj<{ states: string[] }> = { - render: (args) => , - args: { - states: buttonStates, - }, - parameters: { - pseudo: { - hover: ['#Hover-primary'], - active: ['#Active-primary'], - focus: ['#Focus-primary'], - }, - }, -}; - -export const Secondary: StoryObj<{ states: string[] }> = { - render: (args) => , - args: { - states: buttonStates, - }, - parameters: { - pseudo: { - hover: ['#Hover-secondary'], - active: ['#Active-secondary'], - focus: ['#Focus-secondary'], - }, - }, -}; - -export const DifferentWidthButtons: Story = { - render: (args) => { - const [selectedId, setSelectedId] = useState(null); - - return ( - - - - - - - - - - ); - }, - args: { - type: 'primary', - }, -}; - -export const Stretched: Story = { - render: Template, - args: { - stretch: true, - }, -}; diff --git a/libs/react-components/src/tedi/components/buttons/button-group/button-group.tsx b/libs/react-components/src/tedi/components/buttons/button-group/button-group.tsx deleted file mode 100644 index b2e0ecbaa..000000000 --- a/libs/react-components/src/tedi/components/buttons/button-group/button-group.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import cn from 'classnames'; -import { Children, cloneElement, isValidElement, ReactNode } from 'react'; - -import Button, { ButtonProps } from '../button/button'; -import styles from './button-group.module.scss'; - -export type ButtonGroupProps = { - /** - * The child components to render inside the ButtonGroup. - * Typically, these should be ` - - - - - - - - - - - - ))} - - - ); -}; - -export const Primary: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - visualType: 'primary', - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focus: '#Focus', - }, - }, -}; - -export const PrimaryInverted: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - visualType: 'primary', - color: 'inverted', - titleColor: 'white', - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focus: '#Focus', - }, - backgrounds: { default: 'brand' }, - }, -}; - -export const Secondary: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - visualType: 'secondary', - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focus: '#Focus', - }, - }, -}; - -export const SecondaryInverted: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - visualType: 'secondary', - color: 'inverted', - titleColor: 'white', - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focus: '#Focus', - }, - backgrounds: { default: 'brand' }, - }, -}; - -export const Neutral: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - visualType: 'neutral', - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focus: '#Focus', - }, - }, -}; - -export const NeutralInverted: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - visualType: 'neutral', - color: 'inverted', - titleColor: 'white', - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focus: '#Focus', - }, - backgrounds: { default: 'brand' }, - }, -}; - -export const Success: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - color: 'success', - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focus: '#Focus', - }, - }, -}; - -export const Danger: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - color: 'danger', - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focus: '#Focus', - }, - }, -}; - -export const DangerNeutral: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - color: 'danger', - visualType: 'neutral', - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focus: '#Focus', - }, - }, -}; - -export const NoStyleTemplate: StoryFn = (args) => { - return ( - - ); -}; - -export const FullWidth: Story = { - args: { - fullWidth: true, - children: 'Button', - }, -}; - -const ResponsiveTemplate: StoryFn> = (args) => ( - - - - - - - - -); - -export const ResponsiveButton: Story = { - render: ResponsiveTemplate, - args: { - children: 'Responsive Button', - }, - parameters: { - viewport: { - defaultViewport: 'responsive', - }, - }, -}; - -export const LongTextButtonThatWrapsIntoMultipleLines: Story = { - args: { - children: 'This is a very long button text that should wrap into multiple lines', - }, - - render: (args) => ( - - - - - Please avoid long text. This is fallback for emergencies — use only with caution. - - - - - - - - - - - - - - - - ), -}; diff --git a/libs/react-components/src/tedi/components/buttons/button/button.tsx b/libs/react-components/src/tedi/components/buttons/button/button.tsx deleted file mode 100644 index 116667e93..000000000 --- a/libs/react-components/src/tedi/components/buttons/button/button.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React, { forwardRef } from 'react'; - -import { BreakpointSupport, useBreakpointProps } from '../../../helpers'; -import { PolymorphicRef } from '../../../helpers/polymorphic/types'; -import { UnknownType } from '../../../types/commonTypes'; -import ButtonContent, { ButtonContentProps } from '../button-content/button-content'; - -export type ButtonType = 'primary' | 'secondary' | 'neutral' | 'link'; -export type ButtonColor = 'default' | 'danger' | 'success' | 'inverted' | 'text'; - -interface IInternalButtonProps { - /** - * Button type - * @default button - */ - type?: 'submit' | 'button' | 'reset'; - /** - * Skips form's browser validation - * @default true when type="submit" - */ - formNoValidate?: boolean; -} - -type AllowedTags = 'button'; - -export type ButtonProps = BreakpointSupport< - ButtonContentProps ->; - -const ButtonComponent = forwardRef( - (props: ButtonProps, ref?: PolymorphicRef) => { - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - - const { - children, - as, - type = 'button', - formNoValidate = type === 'submit' ? true : undefined, - ...rest - } = getCurrentBreakpointProps>(props); - - const ComponentAs = as || 'button'; - - return ( - - {children} - - ); - } -); - -ButtonComponent.displayName = 'Button'; - -export const Button = ButtonComponent as ( - props: ButtonProps -) => React.ReactElement | null; - -export default Button; diff --git a/libs/react-components/src/tedi/components/buttons/closing-button/closing-button.module.scss b/libs/react-components/src/tedi/components/buttons/closing-button/closing-button.module.scss deleted file mode 100644 index 28c6d8217..000000000 --- a/libs/react-components/src/tedi/components/buttons/closing-button/closing-button.module.scss +++ /dev/null @@ -1,39 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-closing-button { - --general-icon-primary: var(--button-close-text-default); - - display: flex; - align-items: center; - justify-content: center; - padding: 0; - cursor: pointer; - background-color: var(--button-close-background-default); - border: 1px solid var(--button-close-background-default); - transition: background 0.5s ease; - - @include mixins.responsive-styles(border-radius, button-radius-default); - - @each $state in hover, active { - &:#{ $state } { - --general-icon-primary: var(--button-close-text-#{$state}); - - background-color: var(--button-close-background-#{$state}); - } - } - - &:focus-visible { - outline: 2px solid var(--button-main-primary-border-focus); - outline-offset: -2px; - } - - &--medium { - @include mixins.responsive-styles(width, button-xs-icon-size); - @include mixins.responsive-styles(height, button-xs-icon-size); - } - - &--large { - @include mixins.responsive-styles(width, button-sm-icon-size); - @include mixins.responsive-styles(height, button-sm-icon-size); - } -} diff --git a/libs/react-components/src/tedi/components/buttons/closing-button/closing-button.spec.tsx b/libs/react-components/src/tedi/components/buttons/closing-button/closing-button.spec.tsx deleted file mode 100644 index 8bc45184d..000000000 --- a/libs/react-components/src/tedi/components/buttons/closing-button/closing-button.spec.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import { fireEvent, render, screen } from '@testing-library/react'; - -import { ClosingButton } from './closing-button'; - -jest.mock('../../../providers/label-provider', () => ({ - useLabels: () => ({ - getLabel: jest.fn().mockReturnValue('Close'), - }), -})); - -describe('ClosingButton component', () => { - it('renders the ClosingButton with default props', () => { - render( - { - console.log('Button pressed'); - }} - /> - ); - - const button = screen.getByRole('button', { name: /close/i }); - expect(button).toBeInTheDocument(); - expect(button).toHaveClass('tedi-closing-button'); - - const icon = button.querySelector('span[data-name="icon"]'); - expect(icon).toBeInTheDocument(); - expect(icon).toHaveClass('tedi-icon--size-18'); - }); - - it('renders with the correct large size class and icon size', () => { - render( - { - console.log('Button pressed'); - }} - /> - ); - - const button = screen.getByRole('button', { name: /close/i }); - expect(button).toBeInTheDocument(); - expect(button).toHaveClass('tedi-closing-button tedi-closing-button--large'); - - const icon = button.querySelector('span[data-name="icon"]'); - expect(icon).toBeInTheDocument(); - expect(icon).toHaveClass('tedi-icon--size-24'); - }); - - it('applies custom class names', () => { - render(); - - const button = screen.getByRole('button', { name: /Close/i }); - expect(button).toHaveClass('tedi-closing-button tedi-closing-button--large custom-class'); - }); - - it('triggers onClick handler when clicked', () => { - const onClickMock = jest.fn(); - render(); - - const button = screen.getByRole('button', { name: /Close/i }); - fireEvent.click(button); - expect(onClickMock).toHaveBeenCalledTimes(1); - }); - - it('uses fallback label from label provider when title is not provided', () => { - render(); - - const button = screen.getByRole('button', { name: /Close/i }); - expect(button).toHaveAttribute('title', 'Close'); - expect(button).toHaveAttribute('aria-label', 'Close'); - }); - - it('uses custom title if provided', () => { - render(); - - const button = screen.getByRole('button', { name: /Custom Close/i }); - expect(button).toHaveAttribute('title', 'Custom Close'); - expect(button).toHaveAttribute('aria-label', 'Custom Close'); - }); -}); diff --git a/libs/react-components/src/tedi/components/buttons/closing-button/closing-button.stories.tsx b/libs/react-components/src/tedi/components/buttons/closing-button/closing-button.stories.tsx deleted file mode 100644 index b6104a7d6..000000000 --- a/libs/react-components/src/tedi/components/buttons/closing-button/closing-button.stories.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Col, Row } from '../../layout/grid'; -import ClosingButton, { ClosingButtonProps } from './closing-button'; - -/** - * Figma ↗
- * Zeroheight ↗ - */ - -const meta: Meta = { - component: ClosingButton, - title: 'Tedi-Ready/Components/Buttons/ClosingButton', - parameters: { - design: { - type: 'figma', - url: 'https://www.figma.com/design/jWiRIXhHRxwVdMSimKX2FF/TEDI-READY-(work-in-progress)?node-id=4514-63815&m=dev', - }, - }, -}; - -const sizeArray: ClosingButtonProps['size'][] = ['medium', 'large']; - -export default meta; -type Story = StoryObj; - -const SizeTemplate: StoryFn = () => { - return ( -
- {sizeArray.map((size, key) => ( - - {size} - - alert(`${size} button clicked`)} /> - - - ))} -
- ); -}; - -const stateArray = ['Default', 'Hover', 'Active', 'Focus']; - -const StatesTemplate: StoryFn = () => { - return ( -
- {stateArray.map((state) => ( - - - {state} - - - - - - ))} -
- ); -}; - -export const Default: Story = { - args: { - title: 'close', - size: 'medium', - }, -}; - -export const Size: Story = { - render: SizeTemplate, -}; - -export const States: Story = { - render: StatesTemplate, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focusVisible: '#Focus', - }, - }, -}; diff --git a/libs/react-components/src/tedi/components/buttons/closing-button/closing-button.tsx b/libs/react-components/src/tedi/components/buttons/closing-button/closing-button.tsx deleted file mode 100644 index b718964f6..000000000 --- a/libs/react-components/src/tedi/components/buttons/closing-button/closing-button.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import cn from 'classnames'; -import { MouseEventHandler } from 'react'; -import { ButtonHTMLAttributes } from 'react'; - -import { useLabels } from '../../../providers/label-provider'; -import { Icon } from '../../base/icon/icon'; -import styles from './closing-button.module.scss'; - -type ClosingButtonSize = 'medium' | 'large'; - -export interface ClosingButtonProps extends ButtonHTMLAttributes { - /** - * Additional classes to apply custom styles to the ClosingButton. - */ - className?: string; - /** - * Size of the ClosingButton - * @default 'medium' - */ - size?: ClosingButtonSize; - /** - * Event handler for the button click event. Triggered when the user clicks on the close button. - */ - onClick?: MouseEventHandler; - /* - * Title for the button. - * Used for accessibility and as a tooltip on hover. If not provided, the label provider's 'close' label will be used as a fallback. - */ - title?: string; -} - -export const ClosingButton = (props: ClosingButtonProps): JSX.Element => { - const { getLabel } = useLabels(); - const { title = getLabel('close'), onClick, size = 'medium', className, ...rest } = props; - - const buttonClass = cn( - styles['tedi-closing-button'], - { - [styles[`tedi-closing-button--${size}`]]: size, - }, - className - ); - - const iconSize = size === 'large' ? 24 : 18; - - return ( - - ); -}; - -export default ClosingButton; diff --git a/libs/react-components/src/tedi/components/buttons/collapse/collapse.module.scss b/libs/react-components/src/tedi/components/buttons/collapse/collapse.module.scss deleted file mode 100644 index 163c1ea15..000000000 --- a/libs/react-components/src/tedi/components/buttons/collapse/collapse.module.scss +++ /dev/null @@ -1,39 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-collapse { - &__title { - width: 100%; - text-align: left; - cursor: pointer; - - @include mixins.button-reset; - } - - &__text { - text-decoration: underline; - } - - &__icon-wrapper { - display: flex; - align-items: center; - justify-content: center; - border: var(--borders-01) solid var(--button-main-secondary-border-default); - border-radius: 100%; - - @include mixins.responsive-styles(width, button-sm-icon-size); - @include mixins.responsive-styles(height, button-sm-icon-size); - } - - &__icon { - color: var(--button-main-neutral-text-default); - transition: transform 300ms ease; - - .tedi-collapse--is-open & { - transform: rotate(180deg); - } - } - - &__content { - margin-top: var(--dimensions-05); - } -} diff --git a/libs/react-components/src/tedi/components/buttons/collapse/collapse.spec.tsx b/libs/react-components/src/tedi/components/buttons/collapse/collapse.spec.tsx deleted file mode 100644 index 8f9c1cb84..000000000 --- a/libs/react-components/src/tedi/components/buttons/collapse/collapse.spec.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import { fireEvent, render, screen } from '@testing-library/react'; - -import { useBreakpointProps, usePrint } from '../../../helpers'; -import { Heading } from '../../base/typography/heading/heading'; -import Collapse, { CollapseProps } from './collapse'; - -import '@testing-library/jest-dom'; - -jest.mock('../../../helpers', () => ({ - useBreakpointProps: jest.fn(), - usePrint: jest.fn(), -})); - -const getComponent = (props?: Partial) => - render( - Heading} - openText="Näita rohkem" - closeText="Näita vähem" - {...props} - > - Collapse content - - ); - -describe('Collapse component with breakpoint support', () => { - (useBreakpointProps as jest.Mock).mockImplementation(() => ({ - getCurrentBreakpointProps: jest.fn((props) => ({ - ...props, - })), - })); - - (usePrint as jest.Mock).mockReturnValue(false); - - it('renders successfully', () => { - const { baseElement } = getComponent(); - expect(baseElement).toBeTruthy(); - }); - - it('applies custom className to root', () => { - const { container } = getComponent({ className: 'test-class' }); - const root = container.querySelector('.test-class'); - expect(root).toBeInTheDocument(); - expect(root?.getAttribute('data-name')).toBe('collapse'); - }); - - it('is collapsed by default (uncontrolled)', () => { - const { getByTestId } = getComponent(); - const content = getByTestId('collapse-inner'); - expect(content).toHaveStyle('height: 0px'); - }); - - it('expands when clicked (uncontrolled)', () => { - const { getByTestId } = getComponent(); - const content = getByTestId('collapse-inner'); - const button = screen.getByRole('button', { name: /näita rohkem/i }); - fireEvent.click(button); - expect(content).toHaveStyle('height: 0px'); - }); - - it('can be controlled externally', () => { - const { getByTestId, rerender } = render( - Controlled}> - Controlled content - - ); - - const content = getByTestId('collapse-inner'); - expect(content).toHaveStyle('height: auto'); - - rerender( - Controlled}> - Controlled content - - ); - - expect(content).toHaveStyle('height: 0px'); - }); - - it('hides collapse text when hideCollapseText is true', () => { - render( - Toggle}> - Content - - ); - - const visuallyHiddenCol = screen.getByText(/open/i).parentElement; - expect(visuallyHiddenCol).toHaveClass('visually-hidden'); - }); - - it('renders secondary arrow wrapper when arrowType is "secondary"', () => { - const { container } = getComponent({ arrowType: 'secondary' }); - const wrapper = container.querySelector('.tedi-collapse__icon-wrapper'); - expect(wrapper).toBeInTheDocument(); - }); -}); diff --git a/libs/react-components/src/tedi/components/buttons/collapse/collapse.stories.tsx b/libs/react-components/src/tedi/components/buttons/collapse/collapse.stories.tsx deleted file mode 100644 index 9a14fc495..000000000 --- a/libs/react-components/src/tedi/components/buttons/collapse/collapse.stories.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import { Heading } from '../../base/typography/heading/heading'; -import { Text } from '../../base/typography/text/text'; -import { VerticalSpacing } from '../../layout/vertical-spacing'; -import Collapse from './collapse'; - -/** - * Figma ↗
- * Zeroheight ↗ - */ - -const meta: Meta = { - component: Collapse, - title: 'Tedi-ready/Components/Buttons/Collapse', - parameters: { - status: { - type: [{ name: 'breakpointSupport', url: '?path=/docs/helpers-usebreakpointprops--usebreakpointprops' }], - }, - design: { - type: 'figma', - url: 'https://www.figma.com/design/jWiRIXhHRxwVdMSimKX2FF/TEDI-READY-2.0.4-(work-in-progress)?node-id=15433-138256&m=dev', - }, - controls: { - exclude: ['sm', 'md', 'lg', 'xl', 'xxl'], - }, - }, -}; - -export default meta; -type Story = StoryObj; - -export const Default: Story = {}; - -export const IconNeutralButton = { - args: { - ...Default.args, - hideCollapseText: true, - }, -}; - -export const IconSecondaryButton = { - args: { - ...Default.args, - arrowType: 'secondary', - hideCollapseText: true, - }, -}; - -export const TitleRow = { - args: { - id: 'collapse-1', - openText: 'Näita rohkem', - closeText: 'Näita vähem', - title: ( - - Juhtumi üldandmed - - ), - children: ( - -
- Laste osalus -

peretüli lapse osaluseta

-
-
- Juhtumi liigid -

peretüli (lapsega)

-
-
- Kannatanu seos vägivaldsega -

tütar

-
-
- ), - }, -}; diff --git a/libs/react-components/src/tedi/components/buttons/collapse/collapse.tsx b/libs/react-components/src/tedi/components/buttons/collapse/collapse.tsx deleted file mode 100644 index 72e136b0c..000000000 --- a/libs/react-components/src/tedi/components/buttons/collapse/collapse.tsx +++ /dev/null @@ -1,183 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; -import AnimateHeight from 'react-animate-height'; - -import { BreakpointSupport, useBreakpointProps, usePrint } from '../../../helpers'; -import { useLabels } from '../../../providers/label-provider'; -import { Icon } from '../../base/icon/icon'; -import { Text } from '../../base/typography/text/text'; -import { Col, Row, RowProps } from '../../layout/grid'; -import Print from '../../misc/print/print'; -import styles from './collapse.module.scss'; - -type CollapseBreakpointProps = { - /** - * Whether the collapse should be initially open (uncontrolled mode). - * This is ignored when `open` and `onToggle` are provided. - * @default false - */ - defaultOpen?: boolean; - - /** - * Controls the open/closed state of the collapse (controlled mode). - * Should be used together with `onToggle`. - */ - open?: boolean; - /** - * Whether to visually hide the open/close text on the toggle button. - * Useful for icon-only toggles. - * @default false - */ - hideCollapseText?: boolean; - /** - * Additional props to pass to the `Row` component used in the title area. - */ - titleRowProps?: RowProps; - /** - * Custom class name for the root element. - */ - className?: string; - /* - * Display toggle arrow as default or secondary button style - */ - arrowType?: 'default' | 'secondary'; -}; - -export interface CollapseProps extends BreakpointSupport { - /** - * Unique identifier for the collapse content. - * Used for ARIA attributes like `aria-controls`. - */ - id: string; - /** - * Content to be displayed inside the collapsible area. - */ - children: React.ReactNode; - /** - * Callback triggered when the collapse is toggled. - * Use this to update the `open` prop in controlled mode. - */ - onToggle?: (open: boolean) => void; - /** - * The title/header element for the collapsible section. - * Rendered inside the toggle button. - */ - title?: JSX.Element; - /** - * Text shown on the toggle button when the content is collapsed. - * Defaults to the result of `getLabel('open')`. - */ - openText?: string; - /** - * Text shown on the toggle button when the content is expanded. - * Defaults to the result of `getLabel('close')`. - */ - closeText?: string; -} - -export const Collapse = (props: CollapseProps): JSX.Element => { - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - const { getLabel } = useLabels(); - const { - id, - children, - className, - openText = getLabel('open'), - closeText = getLabel('close'), - hideCollapseText = false, - title, - titleRowProps, - defaultOpen, - open, - onToggle, - arrowType = 'neutral', - ...rest - } = getCurrentBreakpointProps(props); - - const [isOpenState, setIsOpen] = React.useState(() => defaultOpen); - const isPrint = usePrint(); - - const isOpen = React.useMemo( - () => isPrint || (open !== undefined ? open : isOpenState), - [isPrint, open, isOpenState] - ); - - const CollapseBEM = React.useMemo( - () => - cn(styles['tedi-collapse'], className, { - [styles['tedi-collapse--is-open']]: isOpen, - }), - [className, isOpen] - ); - - const handleClick = () => { - const newOpenState = !isOpen; - setIsOpen(newOpenState); - onToggle?.(newOpenState); - }; - - const handleKeyDown = (e: React.KeyboardEvent) => { - if ((e.key === 'Enter' || e.key === ' ') && !e.repeat) { - e.preventDefault(); - handleClick(); - } - }; - - const renderContent = React.useMemo( - () =>
{children}
, - [children] - ); - - return ( -
- - {isPrint ? ( - renderContent - ) : ( - - {renderContent} - - )} -
- ); -}; - -export default Collapse; diff --git a/libs/react-components/src/tedi/components/buttons/floating-button/floating-button.module.scss b/libs/react-components/src/tedi/components/buttons/floating-button/floating-button.module.scss deleted file mode 100644 index d543084d5..000000000 --- a/libs/react-components/src/tedi/components/buttons/floating-button/floating-button.module.scss +++ /dev/null @@ -1,95 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; -@use '../button-content/button-content.module'; - -$btn-height: 2.75rem; -$btn-height-small: 2.5rem; -$btn-height-large: 3rem; - -.tedi-floating-button { - box-sizing: border-box; - text-wrap: wrap; - box-shadow: 0 4px 10px 0 var(--alpha-14); - - &--horizontal { - @include mixins.responsive-styles(border-radius, button-radius-default); - } - - &--vertical { - min-width: max-content; - white-space: nowrap; - border-radius: 0; - transform: rotate(-90deg); - transform-origin: center; - - @include mixins.responsive-styles(border-top-right-radius, button-radius-sm); - @include mixins.responsive-styles(border-top-left-radius, button-radius-sm); - } - - &.tedi-floating-button--primary { - @include button-content.button-variant( - var(--button-floating-primary-background-default), - var(--button-floating-primary-border-default), - var(--button-floating-primary-text-default), - var(--button-floating-primary-background-hover), - var(--button-floating-primary-border-hover), - var(--button-floating-primary-text-default), - var(--button-floating-primary-border-focus), - var(--button-floating-primary-background-focus), - var(--button-floating-primary-text-default), - var(--button-floating-primary-border-active), - var(--button-floating-primary-background-active) - ); - } - - &.tedi-floating-button--secondary { - @include button-content.button-variant( - var(--button-floating-secondary-background-default), - var(--button-floating-secondary-border-default), - var(--button-floating-secondary-text-default), - var(--button-floating-secondary-background-hover), - var(--button-floating-secondary-border-hover), - var(--button-floating-secondary-text-hover), - var(--button-floating-primary-border-focus), - var(--button-floating-secondary-background-focus), - var(--button-floating-secondary-text-active), - var(--button-floating-secondary-border-active), - var(--button-floating-secondary-background-active) - ); - } - - &--medium { - height: auto; - min-height: $btn-height; - - @include breakpoints.media-breakpoint-up(md) { - min-height: $btn-height-small; - } - - @include mixins.responsive-styles(padding, button-md-padding-y button-md-padding-x); - - &.tedi-floating-button--icon-only { - @include mixins.responsive-styles(width, button-md-icon-size); - @include mixins.responsive-styles(height, button-md-icon-size); - @include mixins.responsive-styles(padding, button-md-icon-padding); - } - } - - &--large { - height: auto; - min-height: $btn-height-large; - - @include mixins.responsive-styles(padding, button-xl-padding-y button-xl-padding-x); - - &.tedi-floating-button--icon-only { - @include mixins.responsive-styles(width, button-xl-icon-size); - @include mixins.responsive-styles(height, button-xl-icon-size); - @include mixins.responsive-styles(padding, button-xl-icon-padding); - } - } - - &:not(&--icon-only) { - @include mixins.responsive-styles(min-width, button-width-min); - @include mixins.responsive-styles(max-width, button-width-max); - } -} diff --git a/libs/react-components/src/tedi/components/buttons/floating-button/floating-button.spec.tsx b/libs/react-components/src/tedi/components/buttons/floating-button/floating-button.spec.tsx deleted file mode 100644 index a828a0b8a..000000000 --- a/libs/react-components/src/tedi/components/buttons/floating-button/floating-button.spec.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { render, screen } from '@testing-library/react'; - -import FloatingButton, { FloatingButtonProps } from './floating-button'; - -import '@testing-library/jest-dom'; - -describe('FloatingButton component', () => { - const defaultProps: FloatingButtonProps = { - children: 'Click Me', - }; - - it('renders floating button with default styles and children', () => { - render(); - const button = screen.getByRole('button'); - expect(button).toHaveClass( - 'tedi-floating-button tedi-floating-button--horizontal tedi-floating-button--primary tedi-floating-button--medium' - ); - }); - - it('applies custom class names', () => { - render(); - const button = screen.getByRole('button'); - expect(button).toHaveClass('custom-class'); - }); - - it('renders with icon only', () => { - render(); - const button = screen.getByRole('button'); - expect(button).toHaveClass('tedi-floating-button--icon-only'); - }); - - it('renders vertical button', () => { - render(); - const button = screen.getByRole('button'); - expect(button).toHaveClass('tedi-floating-button--vertical'); - }); - - it('renders large button', () => { - render(); - const button = screen.getByRole('button'); - expect(button).toHaveClass('tedi-floating-button--large'); - }); - - it('renders secondary button', () => { - render(); - const button = screen.getByRole('button'); - expect(button).toHaveClass('tedi-floating-button--secondary'); - }); - - it('renders button top left', () => { - render(); - const button = screen.getByRole('button'); - expect(button).toHaveStyle({ - top: 0, - left: 0, - }); - }); - - it('renders button top right', () => { - render(); - const button = screen.getByRole('button'); - expect(button).toHaveStyle({ - top: 0, - right: 0, - }); - }); - - it('renders button bottom left', () => { - render(); - const button = screen.getByRole('button'); - expect(button).toHaveStyle({ - bottom: 0, - left: 0, - }); - }); - - it('renders button bottom right', () => { - render(); - const button = screen.getByRole('button'); - expect(button).toHaveStyle({ - bottom: 0, - right: 0, - }); - }); -}); diff --git a/libs/react-components/src/tedi/components/buttons/floating-button/floating-button.stories.tsx b/libs/react-components/src/tedi/components/buttons/floating-button/floating-button.stories.tsx deleted file mode 100644 index e3d0efef7..000000000 --- a/libs/react-components/src/tedi/components/buttons/floating-button/floating-button.stories.tsx +++ /dev/null @@ -1,164 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Text } from '../../base/typography/text/text'; -import { Col, Row } from '../../layout/grid'; -import FloatingButton, { FloatingButtonProps } from './floating-button'; - -/** - * Figma ↗
- * Zeroheight ↗ - */ - -const meta: Meta = { - component: FloatingButton, - title: 'Tedi-ready/Components/Buttons/FloatingButton', - parameters: { - design: { - type: 'figma', - url: 'https://www.figma.com/design/jWiRIXhHRxwVdMSimKX2FF/TEDI-READY-(work-in-progress)?node-id=4514-73451&m=dev', - }, - }, -}; - -export default meta; -type Story = StoryObj; - -const buttonSizeArray = ['Default', 'Large']; -const buttonStateArray = ['Default', 'Hover', 'Active', 'Focus']; - -type TemplateMultipleProps = FloatingButtonProps & { - array: Type; -}; - -const TemplateColumn: StoryFn = (args) => { - const { array, ...buttonProps } = args; - - return ( - - {buttonSizeArray.map((size) => ( - - - - {size} - - - - {array.map((value, key) => ( - - - {value} - - - - Scroll up - - - Scroll up - - - Scroll up - - {buttonProps.axis === 'horizontal' && ( - - Scroll up - - )} - - - ))} - - - ))} - - ); -}; - -export const Default: Story = { - args: { - children: 'Scroll up', - position: 'static', - }, -}; - -export const PrimaryHorizontal: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - axis: 'horizontal', - visualType: 'primary', - position: 'static', - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focus: '#Focus', - }, - }, -}; - -export const PrimaryVertical: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - axis: 'vertical', - visualType: 'primary', - position: 'static', - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focus: '#Focus', - }, - }, -}; - -export const SecondaryHorizontal: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - axis: 'horizontal', - visualType: 'secondary', - position: 'static', - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focus: '#Focus', - }, - }, -}; - -export const SecondaryVertical: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - axis: 'vertical', - visualType: 'secondary', - position: 'static', - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focus: '#Focus', - }, - }, -}; diff --git a/libs/react-components/src/tedi/components/buttons/floating-button/floating-button.tsx b/libs/react-components/src/tedi/components/buttons/floating-button/floating-button.tsx deleted file mode 100644 index 719b64eb7..000000000 --- a/libs/react-components/src/tedi/components/buttons/floating-button/floating-button.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import cn from 'classnames'; -import { CSSProperties } from 'react'; - -import Button, { ButtonProps } from '../button/button'; -import styles from './floating-button.module.scss'; - -export type FloatingButtonAxis = 'horizontal' | 'vertical'; -export type FloatingButtonColor = 'primary' | 'secondary'; -export type FloatingButtonSize = 'medium' | 'large'; -export type FloatingButtonPlacement = { - vertical: 'top' | 'bottom' | 'center'; - horizontal: 'left' | 'right' | 'center'; -}; -export type FloatingButtonOffset = { - top?: number | string; - bottom?: number | string; - left?: number | string; - right?: number | string; -}; - -export interface FloatingButtonProps - extends Omit< - ButtonProps, - 'visualType' | 'fullWidth' | 'color' | 'size' | 'isLoading' | 'noStyle' | 'renderWrapperElement' - > { - /** - * Button axis - * @default horizontal - */ - axis?: FloatingButtonAxis; - /** - * Button visual type - * @default primary - */ - visualType?: FloatingButtonColor; - /** - * Button size - * @default medium - */ - size?: FloatingButtonSize; - /** - * Button position - * @default fixed - */ - position?: CSSProperties['position']; - /** - * Button placement - */ - placement?: FloatingButtonPlacement; - /** - * Button offset - */ - offset?: FloatingButtonOffset; - /** - * Button z-index - */ - zIndex?: number; -} - -export const FloatingButton = (props: FloatingButtonProps): JSX.Element => { - const { - children, - className, - axis = 'horizontal', - visualType = 'primary', - size = 'medium', - position = 'fixed', - placement, - offset, - zIndex, - ...rest - } = props; - - const placementStyles: CSSProperties = { - position, - zIndex, - ...(placement?.vertical === 'top' && { top: offset?.top ?? 0 }), - ...(placement?.vertical === 'bottom' && { bottom: offset?.bottom ?? 0 }), - ...(placement?.vertical === 'center' && { top: '50%', transform: 'translateY(-50%)' }), - ...(placement?.horizontal === 'left' && { left: offset?.left ?? 0 }), - ...(placement?.horizontal === 'right' && { right: offset?.right ?? 0 }), - ...(placement?.horizontal === 'center' && { left: '50%', transform: 'translateX(-50%)' }), - }; - - const BEM = cn( - styles['tedi-floating-button'], - styles[`tedi-floating-button--${axis}`], - styles[`tedi-floating-button--${visualType}`], - styles[`tedi-floating-button--${size}`], - { [styles['tedi-floating-button--icon-only']]: rest.icon }, - className - ); - - return ( - - ); -}; - -export default FloatingButton; diff --git a/libs/react-components/src/tedi/components/buttons/info-button/info-button.module.scss b/libs/react-components/src/tedi/components/buttons/info-button/info-button.module.scss deleted file mode 100644 index d673a731d..000000000 --- a/libs/react-components/src/tedi/components/buttons/info-button/info-button.module.scss +++ /dev/null @@ -1,10 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -.tedi-info-button { - vertical-align: bottom; - - @include mixins.responsive-styles(width, button-xs-icon-size); - @include mixins.responsive-styles(height, button-xs-icon-size); - @include mixins.responsive-styles(min-height, button-xs-icon-size); -} diff --git a/libs/react-components/src/tedi/components/buttons/info-button/info-button.spec.tsx b/libs/react-components/src/tedi/components/buttons/info-button/info-button.spec.tsx deleted file mode 100644 index b450f9a3c..000000000 --- a/libs/react-components/src/tedi/components/buttons/info-button/info-button.spec.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import React from 'react'; - -import { InfoButton } from './info-button'; - -import '@testing-library/jest-dom'; - -describe('InfoButton Component', () => { - it('renders child elements correctly', () => { - render( - -
Test content
-
- ); - const childElement = screen.getByTestId('child'); - expect(childElement).toBeInTheDocument(); - expect(childElement).toHaveTextContent('Test content'); - }); - - it('applies custom className correctly', () => { - const { container } = render(Info); - const button = container.querySelector('button'); - expect(button).toHaveClass('custom-class'); - }); - - it('renders with the correct default icon size', () => { - const { container } = render(Info); - const icon = container.querySelector('span[data-name="icon"]'); - expect(icon).toBeInTheDocument(); - expect(icon).toHaveClass('tedi-icon--size-18'); - }); - - it('renders with the smaller icon when isSmall is true', () => { - const { container } = render(Info); - const icon = container.querySelector('span[data-name="icon"]'); - expect(icon).toBeInTheDocument(); - expect(icon).toHaveClass('tedi-icon--size-16'); - }); - - it('passes ref correctly to Button component', () => { - const ref = React.createRef(); - render(Info); - expect(ref.current).toBeInstanceOf(HTMLButtonElement); - }); - - it('renders children correctly within the Button component', () => { - render(Click me!); - const button = screen.getByRole('button'); - expect(button).toHaveTextContent('Click me!'); - }); - - it('applies default button props correctly', () => { - const { container } = render(Default Button); - const button = container.querySelector('button'); - expect(button).toHaveAttribute('type', 'button'); - expect(button).toHaveAttribute('data-name', 'info-button'); - }); - - it('can receive custom props like title and id', () => { - render( - - Info - - ); - const button = screen.getByRole('button'); - expect(button).toHaveAttribute('title', 'Info button'); - expect(button).toHaveAttribute('id', 'info-button-id'); - }); -}); diff --git a/libs/react-components/src/tedi/components/buttons/info-button/info-button.stories.tsx b/libs/react-components/src/tedi/components/buttons/info-button/info-button.stories.tsx deleted file mode 100644 index 3b9b98f28..000000000 --- a/libs/react-components/src/tedi/components/buttons/info-button/info-button.stories.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Text } from '../../base/typography/text/text'; -import { Col, Row } from '../../layout/grid'; -import { VerticalSpacing } from '../../layout/vertical-spacing'; -import InfoButton from './info-button'; - -/** - * Figma ↗
- * Zeroheight ↗ - */ - -const meta: Meta = { - component: InfoButton, - title: 'Tedi-Ready/Components/Buttons/InfoButton', - parameters: { - design: { - type: 'figma', - url: 'https://www.figma.com/design/jWiRIXhHRxwVdMSimKX2FF/TEDI-READY-(work-in-progress)?node-id=4514-72997&m=dev', - }, - }, -}; - -export default meta; -type Story = StoryObj; - -const buttonStateArray = ['Default', 'Hover', 'Active', 'Focus']; - -type TemplateMultipleProps = { - array: typeof buttonStateArray; -}; - -const TemplateColumn: StoryFn = (args) => { - const { array, ...buttonProps } = args; - - return ( - - {array.map((state, index) => ( - - - {state} - - - - Info button - - - - ))} - - ); -}; - -export const Default: Story = { - args: { - title: 'Info button', - }, -}; - -export const InfoButtonStates: StoryObj = { - render: TemplateColumn, - args: { - array: buttonStateArray, - }, - parameters: { - pseudo: { - hover: '#Hover', - active: '#Active', - focusVisible: '#Focus', - }, - }, -}; diff --git a/libs/react-components/src/tedi/components/buttons/info-button/info-button.tsx b/libs/react-components/src/tedi/components/buttons/info-button/info-button.tsx deleted file mode 100644 index 31257b5fd..000000000 --- a/libs/react-components/src/tedi/components/buttons/info-button/info-button.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Button, ButtonProps } from '../button/button'; -import styles from './info-button.module.scss'; - -export interface InfoButtonProps extends Omit { - /** - * If true, applies a small size to the InfoButton. - * @default false - */ - isSmall?: boolean; -} - -export const InfoButton = React.forwardRef( - ({ isSmall, ...props }, ref): JSX.Element => ( - - ) -); - -InfoButton.displayName = 'InfoButton'; - -export default InfoButton; diff --git a/libs/react-components/src/tedi/components/cards/card/card-content/card-content.spec.tsx b/libs/react-components/src/tedi/components/cards/card/card-content/card-content.spec.tsx deleted file mode 100644 index 7125b015f..000000000 --- a/libs/react-components/src/tedi/components/cards/card/card-content/card-content.spec.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import { UnknownType } from 'libs/react-components/src/tedi/types/commonTypes'; - -import { useBreakpointProps } from '../../../../helpers'; -import { CardContext } from '../card-context'; -import { CardContent, CardContentProps } from './card-content'; - -import '@testing-library/jest-dom'; - -jest.mock('../../../../helpers', () => ({ - useBreakpointProps: jest.fn(), -})); - -describe('CardContent', () => { - beforeEach(() => { - (useBreakpointProps as jest.Mock).mockReturnValue({ - getCurrentBreakpointProps: jest.fn((props) => props), - }); - }); - - const renderComponent = (props?: CardContentProps, contextValue?: UnknownType) => { - const context = contextValue || {}; - return render( - - Test Content - - ); - }; - - it('renders without crashing with default props', () => { - renderComponent(); - const content = screen.getByText('Test Content'); - expect(content).toBeInTheDocument(); - expect(content).toHaveClass('tedi-card__content'); - }); - - it('applies additional className', () => { - renderComponent({ className: 'custom-class' }); - const content = screen.getByText('Test Content'); - expect(content).toHaveClass('custom-class'); - }); - - it('applies numeric padding', () => { - renderComponent({ padding: 2 }); - const content = screen.getByText('Test Content'); - expect(content).toHaveAttribute('data-padding', '2rem'); - }); - - it('applies object-based padding', () => { - renderComponent({ padding: { vertical: 1, horizontal: 2 } }); - const content = screen.getByText('Test Content'); - - expect(content).not.toHaveAttribute('data-padding'); - - expect(content).toHaveStyle({ - '--card-content-padding-top': '1rem', - '--card-content-padding-bottom': '1rem', - '--card-content-padding-left': '2rem', - '--card-content-padding-right': '2rem', - }); - }); - - it('applies background properties', () => { - renderComponent({ - backgroundImage: 'test-image.jpg', - backgroundPosition: 'center', - backgroundSize: 'cover', - backgroundRepeat: 'no-repeat', - }); - const content = screen.getByText('Test Content'); - expect(content).toHaveStyle({ - backgroundImage: 'url(test-image.jpg)', - backgroundPosition: 'center', - backgroundSize: 'cover', - backgroundRepeat: 'no-repeat', - }); - }); - - it('renders as a button when role="button"', () => { - renderComponent({ role: 'button' }); - const content = screen.getByRole('button'); - expect(content.tagName).toBe('BUTTON'); - }); - - it('renders as a div by default', () => { - renderComponent(); - const content = screen.getByText('Test Content'); - expect(content.tagName).toBe('DIV'); - }); -}); diff --git a/libs/react-components/src/tedi/components/cards/card/card-content/card-content.tsx b/libs/react-components/src/tedi/components/cards/card/card-content/card-content.tsx deleted file mode 100644 index 9a4632dcb..000000000 --- a/libs/react-components/src/tedi/components/cards/card/card-content/card-content.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import cn from 'classnames'; -import React, { CSSProperties } from 'react'; - -import { BreakpointSupport, useBreakpointProps } from '../../../../helpers'; -import { SharedCardProps } from '../card'; -import styles from '../card.module.scss'; -import { CardContext } from '../card-context'; -import { getPaddingCssVariables } from '../utility'; - -export interface CardContentProps extends BreakpointSupport { - children?: React.ReactNode; - role?: 'button'; - style?: CSSProperties; -} - -export const CardContent = (props: CardContentProps): JSX.Element => { - const { padding: rootPadding, background: rootBackground } = React.useContext(CardContext); - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - - const { - children, - className, - padding, - background = 'primary', - backgroundImage, - backgroundPosition, - backgroundSize, - backgroundRepeat, - hasSeparator, - role, - style, - ...rest - } = getCurrentBreakpointProps(props, { - padding: rootPadding, - background: rootBackground, - }); - - const backgroundClass = background ? styles[`tedi-card--background--${background}`] : ''; - const backgroundStyle: React.CSSProperties = { - backgroundImage: backgroundImage ? `url(${backgroundImage})` : undefined, - backgroundPosition, - backgroundSize, - backgroundRepeat, - }; - const Component = role === 'button' ? 'button' : 'div'; - - return ( - - {children} - - ); -}; - -export default CardContent; diff --git a/libs/react-components/src/tedi/components/cards/card/card-context.ts b/libs/react-components/src/tedi/components/cards/card/card-context.ts deleted file mode 100644 index 5760d16e9..000000000 --- a/libs/react-components/src/tedi/components/cards/card/card-context.ts +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -import type { CardContentProps } from './card-content/card-content'; - -type CardContext = Pick; - -export const CardContext = React.createContext({}); diff --git a/libs/react-components/src/tedi/components/cards/card/card-header/card-header.spec.tsx b/libs/react-components/src/tedi/components/cards/card/card-header/card-header.spec.tsx deleted file mode 100644 index 60f1362ff..000000000 --- a/libs/react-components/src/tedi/components/cards/card/card-header/card-header.spec.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import { UnknownType } from 'libs/react-components/src/tedi/types/commonTypes'; - -import { useBreakpointProps } from '../../../../helpers'; -import styles from '../card.module.scss'; -import { CardContentProps } from '../card-content/card-content'; -import { CardContext } from '../card-context'; -import CardHeader from './card-header'; - -jest.mock('../../../../helpers', () => ({ - useBreakpointProps: jest.fn(), -})); - -describe('CardHeader', () => { - beforeEach(() => { - (useBreakpointProps as jest.Mock).mockReturnValue({ - getCurrentBreakpointProps: jest.fn((props) => props), - }); - }); - - const renderComponent = (props?: CardContentProps, contextValue?: UnknownType) => { - const context = contextValue || {}; - return render( - - Test Header - - ); - }; - - it('renders without crashing with default props', () => { - renderComponent(); - const header = screen.getByText('Test Header'); - expect(header).toBeInTheDocument(); - expect(header).toHaveClass(styles['tedi-card__header']); - }); - - it('applies additional className', () => { - renderComponent({ className: 'extra-class' }); - const header = screen.getByText('Test Header'); - expect(header).toHaveClass('extra-class'); - }); - - it('applies numeric padding correctly', () => { - renderComponent({ padding: 1.5 }); - const header = screen.getByText('Test Header'); - expect(header).toHaveAttribute('data-padding', '1.5rem'); - }); - - it('applies object-based padding styles', () => { - renderComponent({ padding: { vertical: 1, horizontal: 2 } }); - const header = screen.getByText('Test Header'); - expect(header).toHaveStyle({ - '--card-content-padding-top': '1rem', - '--card-content-padding-bottom': '1rem', - '--card-content-padding-left': '2rem', - '--card-content-padding-right': '2rem', - }); - }); - - it('applies background properties correctly', () => { - renderComponent({ - backgroundImage: 'test-image.jpg', - backgroundPosition: 'center', - backgroundSize: 'cover', - backgroundRepeat: 'no-repeat', - }); - const header = screen.getByText('Test Header'); - expect(header).toHaveStyle({ - backgroundImage: 'url(test-image.jpg)', - backgroundPosition: 'center', - backgroundSize: 'cover', - backgroundRepeat: 'no-repeat', - }); - }); - - it('renders with separator class when hasSeparator is true', () => { - renderComponent({ hasSeparator: true }); - const header = screen.getByText('Test Header'); - expect(header).toHaveClass(styles['tedi-card__content--separator']); - }); - - it('renders as a button when role="button" is provided', () => { - renderComponent({ role: 'button' }); - const header = screen.getByRole('button'); - expect(header).toBeInTheDocument(); - }); - - it('renders as a div by default', () => { - renderComponent(); - const header = screen.getByText('Test Header'); - expect(header.tagName).toBe('DIV'); - }); -}); diff --git a/libs/react-components/src/tedi/components/cards/card/card-header/card-header.tsx b/libs/react-components/src/tedi/components/cards/card/card-header/card-header.tsx deleted file mode 100644 index 09b2653a8..000000000 --- a/libs/react-components/src/tedi/components/cards/card/card-header/card-header.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import cn from 'classnames'; - -import styles from '../card.module.scss'; -import { CardContent, CardContentProps } from '../card-content/card-content'; - -export const CardHeader = (props: CardContentProps): JSX.Element => { - const { className, background = 'brand-primary', ...rest } = props; - - return ; -}; - -export default CardHeader; diff --git a/libs/react-components/src/tedi/components/cards/card/card-notification/card-notification.module.scss b/libs/react-components/src/tedi/components/cards/card/card-notification/card-notification.module.scss deleted file mode 100644 index 70d53b832..000000000 --- a/libs/react-components/src/tedi/components/cards/card/card-notification/card-notification.module.scss +++ /dev/null @@ -1,17 +0,0 @@ -.tedi-card__notification-content { - z-index: 1; - padding: 0; - - [data-name='card-header'] + & { - margin-top: -1px; - } - - &:last-child { - margin-bottom: -1px; - } -} - -.tedi-card__notification { - padding: var(--card-content-padding-top, 1rem) var(--card-content-padding-right, 1rem) - var(--card-content-padding-bottom, 1rem) var(--card-content-padding-left, 1rem); -} diff --git a/libs/react-components/src/tedi/components/cards/card/card-notification/card-notification.spec.tsx b/libs/react-components/src/tedi/components/cards/card/card-notification/card-notification.spec.tsx deleted file mode 100644 index 301abddce..000000000 --- a/libs/react-components/src/tedi/components/cards/card/card-notification/card-notification.spec.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import cn from 'classnames'; - -import { Alert } from '../../../notifications/alert/alert'; -import CardNotification, { CardNotificationProps } from './card-notification'; -import style from './card-notification.module.scss'; - -jest.mock('../../../notifications/alert/alert', () => ({ - Alert: jest.fn(({ children, className }) =>
{children}
), -})); - -jest.mock('../card-content/card-content', () => ({ - __esModule: true, - default: jest.fn(({ children, className, 'data-name': dataName }) => ( -
- {children} -
- )), -})); - -describe('CardNotification', () => { - const renderComponent = (props?: Partial) => - render( - - Test Notification - - ); - - it('renders without crashing', () => { - renderComponent(); - const notification = screen.getByText('Test Notification'); - - expect(notification).toBeInTheDocument(); - }); - - it('passes children to Alert', () => { - renderComponent(); - const alert = screen.getByText('Test Notification'); - - expect(alert).toBeInTheDocument(); - }); - - it('applies custom class names', () => { - renderComponent({ className: 'extra-class' }); - const alert = screen.getByText('Test Notification'); - - expect(alert).toHaveClass(cn(style['tedi-card__notification'], 'extra-class')); - }); - - it('applies noSideBorders prop to Alert', () => { - renderComponent(); - expect(Alert).toHaveBeenCalledWith( - expect.objectContaining({ - noSideBorders: true, - }), - {} - ); - }); - - it('passes additional props to Alert', () => { - renderComponent({ type: 'success' }); - expect(Alert).toHaveBeenCalledWith( - expect.objectContaining({ - type: 'success', - }), - {} - ); - }); -}); diff --git a/libs/react-components/src/tedi/components/cards/card/card-notification/card-notification.tsx b/libs/react-components/src/tedi/components/cards/card/card-notification/card-notification.tsx deleted file mode 100644 index 35ee6eda8..000000000 --- a/libs/react-components/src/tedi/components/cards/card/card-notification/card-notification.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import cn from 'classnames'; - -import { Alert, AlertProps } from '../../../notifications/alert/alert'; -import CardContent, { CardContentProps } from '../card-content/card-content'; -import style from './card-notification.module.scss'; - -export type CardNotificationProps = AlertProps & Pick; - -export const CardNotification = (props: CardNotificationProps): JSX.Element => { - const { children, padding, className, ...rest } = props; - - const cardNotificationBEM = cn(style['tedi-card__notification'], className); - - return ( - - - {children} - - - ); -}; - -export default CardNotification; diff --git a/libs/react-components/src/tedi/components/cards/card/card-stories-templates.tsx b/libs/react-components/src/tedi/components/cards/card/card-stories-templates.tsx deleted file mode 100644 index 37fc11aa6..000000000 --- a/libs/react-components/src/tedi/components/cards/card/card-stories-templates.tsx +++ /dev/null @@ -1,463 +0,0 @@ -/* istanbul ignore file */ -import { StoryFn } from '@storybook/react/*'; - -import { Icon } from '../../base/icon/icon'; -import { Heading } from '../../base/typography/heading/heading'; -import { Text } from '../../base/typography/text/text'; -import { Button } from '../../buttons/button/button'; -import { HeadingWithIcon } from '../../content/heading-with-icon/heading-with-icon'; -import { Col, Row } from '../../layout/grid'; -import { VerticalSpacing } from '../../layout/vertical-spacing'; -import { Separator } from '../../misc/separator/separator'; -import { Link } from '../../navigation/link/link'; -import { StatusBadge } from '../../tags/status-badge/status-badge'; -import { CardStory } from './card.stories'; -import { Card, CardContentPadding } from './index'; -import { CardBackground } from './utility'; - -export const HeaderTypesTemplate: StoryFn = (_args) => ( - - - - Title - - - - - Title - Description - - - - - - - Title - - - - - - - - Description - - - - - - - - - Title - - - - - - - - - Description - - - - - - - - - Title - - - - View result - - - - - - Description - - - - - - - - - Title - - - Approved - - - - - Description - - - - - - - - - Title - - - - - - - - Description - - - - - - - - - Title - - - - - - - - Description - - - - - - - - - Title - - - - - - - - Description - - - - - - - - - Title - - - - - - - - Description - - - - - -); - -export const DefaultCardTemplates: StoryFn = (_args) => ( - - - - Description - - - - - Description - Approved - - - - - Title - Description - - - - - Title - - - Description - - - Approved - - - - - - - - - - Description - - - - - - - - - - - Title - Description - - - - - - - - - - - - Title - Description - - - - - - - - - - - - - - - Title - Description - - - - - - - - - - - - - -); - -export const CardInfoTemplate: StoryFn = (_args) => ( - - - - - - - - Title - Description - - - - - - - - - - - - Title - Description - - - - - - - - - - - - Title - Description - - - - - - - - - - - - Haigusleht: 118. päev - - - - - - -); - -export const AlternativeCardsTemplate: StoryFn = (_args) => ( - - - - - - - My statement of intention - - - - - - For example organ donation and blood transfusion - - - - - - - - - - - - - Title - For example organ donation and blood transfusion - - - - - - - - - - - - - - Short title - - - - - - - For example organ donation and blood transfusion - - - - - - - - - - - For example organ donation and blood transfusion - - - - - - - - - Card important - - - - - -); - -export const SpacingTemplate: StoryFn = (_args) => { - const paddings: CardContentPadding[] = [ - { top: 0.5, left: 0.5, right: 0.5, bottom: 0.5 }, - { top: 1, left: 1, right: 1, bottom: 1 }, - { top: 1.5, left: 1.5, right: 1.5, bottom: 1.5 }, - ]; - - return ( - - {paddings.map((padding, index) => ( - - - - - Cabbage, comprising several cultivars of Brassica oleracea, is a leafy green, red (purple), or white - (pale green) biennial plant grown as an annual vegetable crop for its dense-leaved heads. - - - - - ))} - - ); -}; - -export const BackgroundColorsTemplate: StoryFn = (_args) => { - const backgroundColors: CardBackground[] = [ - 'primary', - 'secondary', - 'tertiary', - 'brand-primary', - 'brand-secondary', - 'brand-tertiary', - 'brand-quaternary', - 'success-primary', - 'accent', - ]; - - return ( - - {backgroundColors.map((color, index) => ( - - - - - Cabbage, comprising several cultivars of Brassica oleracea, is a leafy green, red (purple), or white - (pale green) biennial plant grown as an annual vegetable crop for its dense-leaved heads. - - - - - ))} - - ); -}; diff --git a/libs/react-components/src/tedi/components/cards/card/card.module.scss b/libs/react-components/src/tedi/components/cards/card/card.module.scss deleted file mode 100644 index 391d242f1..000000000 --- a/libs/react-components/src/tedi/components/cards/card/card.module.scss +++ /dev/null @@ -1,157 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -$card-colors: ( - 'accent': '--card-background-accent', - 'brand-primary': '--card-background-brand-primary', - 'brand-secondary': '--card-background-brand-secondary', - 'brand-tertiary': '--card-background-brand-tertiary', - 'brand-quaternary': '--card-background-brand-quaternary', - 'primary': '--card-background-primary', - 'secondary': '--card-background-secondary', - 'tertiary': '--card-background-tertiary', - 'info-primary': '--general-status-info-background-light', - 'info-secondary': '--general-status-info-background-dark', - 'neutral-primary': '--general-status-neutral-background-light', - 'neutral-secondary': '--general-status-neutral-background-dark', - 'success-primary': '--card-background-success', - 'success-secondary': '--general-status-success-background-secondary', - 'danger-primary': '--general-status-danger-background-primary', - 'danger-secondary': '--general-status-danger-background-secondary', - 'warning-primary': '--general-status-warning-background-light', - 'warning-secondary': '--general-status-warning-background-dark', -); - -@mixin border-radius-reset($sides...) { - @each $side in $sides { - border-#{$side}-radius: 0; - - > .tedi-card__content:first-of-type, - > .tedi-card__content:last-child { - border-#{$side}-radius: 0; - } - } -} - -@mixin card-padding { - padding: var(--card-content-padding-top, 1rem) var(--card-content-padding-right, 1rem) - var(--card-content-padding-bottom, 1rem) var(--card-content-padding-left, 1rem); -} - -.tedi-card { - position: relative; - display: flex; - flex-direction: column; - border: 1px solid var(--card-border-primary); - - @include mixins.responsive-styles(border-radius, card-radius-rounded); - - @mixin card-color($name, $color-var) { - &--background--#{$name} { - background-color: var(#{$color-var}); - } - - &--border--#{$name} { - border-color: var(#{$color-var}); - - --card-border-color: var(#{$color-var}); - } - } - - @each $name, $color-var in $card-colors { - @include card-color($name, $color-var); - } - - &--border-left { - border-top-color: var(--card-border-primary); - border-right-color: var(--card-border-primary); - border-bottom-color: var(--card-border-primary); - border-left: 4px solid var(--card-border-color); - } - - &--border-top { - border-top: 4px solid var(--card-border-color); - border-right-color: var(--card-border-primary); - border-bottom-color: var(--card-border-primary); - border-left-color: var(--card-border-primary); - } - - &--borderless { - border: none; - } - - &--no-border-radius-top { - @include border-radius-reset(top-left, top-right); - } - - &--no-border-radius-right { - @include border-radius-reset(top-right, bottom-right); - } - - &--no-border-radius-bottom { - @include border-radius-reset(bottom-right, bottom-left); - } - - &--no-border-radius-left { - @include border-radius-reset(bottom-left, top-left); - } - - &--border-left, - &--border-top { - @media print { - border-color: var(--general-border-secondary); - } - } - - &--background--brand-primary, - &--background--brand-secondary { - color: var(--general-text-white); - } -} - -.tedi-card__content { - flex: 1 1 1px; - - @include card-padding; - - &--separator { - border-bottom: 1px solid var(--card-border-primary); - } -} - -.tedi-card__header { - z-index: 1; - flex: 0; - - @include card-padding; - - @media print { - color: var(--general-text-primary); - background: var(--card-background-primary); - border-bottom: 1px solid var(--card-border-primary); - } -} - -.tedi-card__header:first-of-type, -.tedi-card__content:first-of-type { - @include mixins.responsive-styles(border-start-start-radius, card-radius-rounded); - @include mixins.responsive-styles(border-start-end-radius, card-radius-rounded); - - .tedi-card--border-top & { - border-start-start-radius: 0; - border-start-end-radius: 0; - } -} - -.tedi-card__header:last-child, -.tedi-card__content:last-child { - @include mixins.responsive-styles(border-end-start-radius, card-radius-rounded); - @include mixins.responsive-styles(border-end-end-radius, card-radius-rounded); -} - -.tedi-card__header, -.tedi-card__content { - .tedi-card--border-left & { - border-start-start-radius: 0; - border-end-start-radius: 0; - } -} diff --git a/libs/react-components/src/tedi/components/cards/card/card.spec.tsx b/libs/react-components/src/tedi/components/cards/card/card.spec.tsx deleted file mode 100644 index 9a3f86a85..000000000 --- a/libs/react-components/src/tedi/components/cards/card/card.spec.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import { render, screen } from '@testing-library/react'; - -import { Card } from './card'; -import { CardContent } from './card-content/card-content'; -import { CardContext } from './card-context'; -import { CardHeader } from './card-header/card-header'; - -import '@testing-library/jest-dom'; - -describe('Card Component', () => { - it('renders the Card component with default props', () => { - render( - - -

Card Title

-
- -

Description

-
-
- ); - const card = screen.getByTestId('tedi-card'); - expect(card).toBeInTheDocument(); - expect(card).toHaveClass('tedi-card'); - }); - - it('renders children components correctly', () => { - render( - - -

Title

-
- -

Hello

-
-
- ); - - const cardContent = screen.getByText('Hello'); - expect(cardContent).toBeInTheDocument(); - }); - - it('provides context values to child components', () => { - render( - - - {(value) => ( -
- Padding: {value.padding as number}, Background: {value.background} -
- )} -
-
- ); - - const contextInfo = screen.getByText('Padding: 2, Background: primary'); - expect(contextInfo).toBeInTheDocument(); - }); - - it('applies border styles correctly', () => { - render( - - - - ); - - const card = screen.getByTestId('tedi-card'); - expect(card).toHaveClass('tedi-card tedi-card--border--primary'); - }); - - it('renders without border if `borderless` is true', () => { - render( - - - - ); - - const card = screen.getByTestId('tedi-card'); - expect(card).toHaveClass('tedi-card--borderless'); - }); - - it('applies custom border-radius styles', () => { - render( - - - - ); - - const card = screen.getByTestId('tedi-card'); - expect(card).toHaveClass('tedi-card--no-border-radius-top'); - expect(card).not.toHaveClass('tedi-card--no-border-radius-left'); - }); - - it('combines custom `className` with default styles', () => { - render( - - - - ); - - const card = screen.getByTestId('tedi-card'); - expect(card).toHaveClass('tedi-card custom-class'); - }); -}); diff --git a/libs/react-components/src/tedi/components/cards/card/card.stories.tsx b/libs/react-components/src/tedi/components/cards/card/card.stories.tsx deleted file mode 100644 index 5d8c968d5..000000000 --- a/libs/react-components/src/tedi/components/cards/card/card.stories.tsx +++ /dev/null @@ -1,331 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Icon } from '../../base/icon/icon'; -import { Heading } from '../../base/typography/heading/heading'; -import { Col, Row } from '../../layout/grid'; -import { Separator } from '../../misc/separator/separator'; -import { StretchContent } from '../../misc/stretch-content/stretch-content'; -import { CardsExample } from '../../misc/stretch-content/stretch-content.stories'; -import { - AlternativeCardsTemplate, - BackgroundColorsTemplate, - CardInfoTemplate, - DefaultCardTemplates, - HeaderTypesTemplate, - SpacingTemplate, -} from './card-stories-templates'; -import { Card, CardContentProps, CardNotificationProps, CardProps } from './index'; - -/** - * Figma ↗
- * Zeroheight ↗ - */ - -export default { - title: 'TEDI-Ready/Components/Cards/Card', - component: Card, - subcomponents: { - 'Card.Content': Card.Content, - 'Card.Header': Card.Header, - 'Card.Notification': Card.Notification, - }, - parameters: { - status: { - type: [{ name: 'breakpointSupport', url: '?path=/docs/helpers-usebreakpointprops--usebreakpointprops' }], - }, - controls: { - exclude: ['sm', 'md', 'lg', 'xl', 'xxl'], - }, - docs: { - source: { - transform: (code: string) => { - return code - .replaceAll('CardContent', 'Card.Content') - .replaceAll('CardHeader', 'Card.Header') - .replaceAll('CardNotification', 'Card.Notification'); - }, - }, - }, - design: { - type: 'figma', - url: 'https://www.figma.com/design/jWiRIXhHRxwVdMSimKX2FF/TEDI-READY-(work-in-progress)?node-id=163-19532&m=dev', - }, - }, -} as Meta; - -export interface CardStory { - card: CardProps; - cardContent: CardContentProps | boolean; - cardHeader: CardContentProps | boolean; - cardNotification: CardNotificationProps | boolean; - cardContent2?: CardContentProps | boolean; - splitContent?: boolean; -} - -type Story = StoryObj; - -const Template: StoryFn = (args) => ( - - Description - -); - -const GeneralTemplate: StoryFn = (args) => { - const getSplitContent = () => ( - - - - - -

Left

-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. In convallis mollis augue, vitae aliquet elit - congue a. Donec vitae sagittis odio, et maximus nulla. Quisque metus augue, euismod non auctor sed, - consequat in ligula. Pellentesque consectetur, justo in luctus sagittis, metus justo ultricies leo, et - mollis enim ipsum id erat. Pellentesque congue ante metus, ut tempor tortor lobortis non. Proin in - ligula sed ante accumsan viverra. Ut et tempor neque. -

-
-
- - - - - Right - - - -
-
- ); - - const getDefaultContent = (cardContent: CardContentProps) => ( - -

Description

-
- ); - - const getNotification = (notification: CardNotificationProps) => ( - -

Card notification

-
- ); - - const getContent2 = (content: CardContentProps) => ; - - const getCardHeader = (header: CardContentProps) => {header.children}; - - return ( - - {args.cardHeader && getCardHeader(typeof args.cardHeader === 'boolean' ? {} : args.cardHeader)} - {args.cardNotification && - getNotification(typeof args.cardNotification === 'boolean' ? {} : args.cardNotification)} - {args.splitContent - ? getSplitContent() - : args.cardContent === false - ? null - : getDefaultContent(typeof args.cardContent === 'boolean' ? {} : args.cardContent)} - {args.cardContent2 && getContent2(typeof args.cardContent2 === 'boolean' ? {} : args.cardContent2)} - - ); -}; - -export const Default: Story = { - render: Template, -}; - -export const HeaderTypes: Story = { - render: HeaderTypesTemplate, -}; - -export const DefaultCard: Story = { - render: DefaultCardTemplates, -}; - -export const CardInfo: Story = { - render: CardInfoTemplate, -}; - -export const AlternativeCards: Story = { - render: AlternativeCardsTemplate, -}; - -export const Spacing: Story = { - render: SpacingTemplate, -}; - -export const Backgrounds: Story = { - render: BackgroundColorsTemplate, -}; - -export const BorderColors: Story = { - render: GeneralTemplate, -}; - -export const MultipleContent: Story = { - render: GeneralTemplate, - - args: { - ...Default.args, - cardContent: { - hasSeparator: true, - }, - cardContent2: { - children:

Description 2

, - }, - cardHeader: false, - }, -}; - -const SplitCard: StoryFn = () => ( - - - - - -

Left

-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. In convallis mollis augue, vitae aliquet elit - congue a. Donec vitae sagittis odio, et maximus nulla. Quisque metus augue, euismod non auctor sed, - consequat in ligula. Pellentesque consectetur, justo in luctus sagittis, metus justo ultricies leo, et - mollis enim ipsum id erat. Pellentesque congue ante metus, ut tempor tortor lobortis non. Proin in ligula - sed ante accumsan viverra. Ut et tempor neque. -

-
-
- - - - - Right - - - -
-
-); -export const SplitCardBody: Story = { - render: SplitCard, -}; - -export const Borderless: Story = { - render: GeneralTemplate, - - args: { - ...Default.args, - card: { - borderless: true, - }, - cardHeader: false, - }, -}; - -export const WithoutBorderRadius: Story = { - render: GeneralTemplate, - - args: { - ...Default.args, - card: { - borderRadius: false, - }, - }, -}; - -export const BreakpointProps: Story = { - render: GeneralTemplate, - args: { - card: { - background: 'success-primary', - border: 'brand-primary', - }, - cardContent: { - className: 'test123', - background: undefined, - sm: { - background: 'brand-secondary', - padding: 0, - }, - md: { - background: 'brand-tertiary', - padding: 1, - }, - lg: { - background: undefined, - padding: 1.5, - }, - }, - }, -}; - -export const EqualHeight: StoryObj = { - ...CardsExample, -}; - -export const WithNotification: Story = { - render: GeneralTemplate, - args: { - card: { - padding: 0.75, - }, - cardHeader: { - background: 'primary', - children: Card title, - }, - cardNotification: true, - }, -}; - -const Timeline: StoryFn = (args) => ( - - - - -

Card content

- - - - - -

Card content

- -
-
-
-); - -export const TimelineCard: StoryObj = { - render: Timeline, - args: {}, -}; - -const TwoToned: StoryFn = (_args) => ( - - - - - - - - - - - - - - - - - -

Some statistic: x kg

-

Some description

-
-
- -
-
-); - -export const TwoTonedCard: StoryObj = { - render: TwoToned, - args: {}, -}; diff --git a/libs/react-components/src/tedi/components/cards/card/card.tsx b/libs/react-components/src/tedi/components/cards/card/card.tsx deleted file mode 100644 index 3463e99b3..000000000 --- a/libs/react-components/src/tedi/components/cards/card/card.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import cn from 'classnames'; -import React, { CSSProperties, forwardRef } from 'react'; - -import { BreakpointSupport, useBreakpointProps } from '../../../helpers'; -import styles from './card.module.scss'; -import { CardContent, CardContentProps } from './card-content/card-content'; -import { CardContext } from './card-context'; -import CardHeader from './card-header/card-header'; -import CardNotification from './card-notification/card-notification'; -import { CardBackground, CardBorderType, CardContentPaddingNumber, getCardBorderPlacementColor } from './utility'; - -export type CardContentPadding = - | CardContentPaddingNumber - | { vertical: CardContentPaddingNumber; horizontal: CardContentPaddingNumber } - | { - top: CardContentPaddingNumber; - right: CardContentPaddingNumber; - bottom: CardContentPaddingNumber; - left: CardContentPaddingNumber; - }; -export interface SharedCardProps { - /** - * Additional class. - */ - className?: string; - /** - * Card content padding - * Values can be:
- * - predefined number value in rems
- * - object of separated horizontal and vertical number values in rems - * - object of separated top, right, bottom, left number values in rems - */ - padding?: CardContentPadding; - /** - * Background color. - * @default primary - */ - background?: CardBackground; - /** - * Background image. - */ - backgroundImage?: CSSProperties['backgroundImage']; - /** - * Background position for the image. - */ - backgroundPosition?: CSSProperties['backgroundPosition']; - /** - * Background size for the image. - */ - backgroundSize?: CSSProperties['backgroundSize']; - /** - * Background repeat for the image. - */ - backgroundRepeat?: CSSProperties['backgroundRepeat']; - /** - * Separator. - */ - hasSeparator?: boolean; -} - -type CardBreakpointProps = { - /** - * Additional class. - */ - className?: string; - /** - * Follows the order in border-radius CSS property - * Top-left / Top-right / Bottom-right / Bottom-left - */ - borderRadius?: false | { top?: boolean; right?: boolean; bottom?: boolean; left?: boolean }; - /** - * Remove border from card - */ - borderless?: boolean; - /** - * Type of border - */ - border?: CardBorderType; -} & Pick; - -export interface CardProps extends BreakpointSupport { - children?: React.ReactNode; -} - -const CardComponent = forwardRef((props, ref): JSX.Element => { - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - const { children, className, padding, background, borderRadius, borderless, border, ...rest } = - getCurrentBreakpointProps(props, { padding: 1 }); - - const [borderPlacement, borderColor] = getCardBorderPlacementColor(border); - - const cardBEM = cn( - styles['tedi-card'], - { - [styles[`tedi-card--border-${borderPlacement}`]]: borderPlacement, - [styles[`tedi-card--border--${borderColor}`]]: borderColor, - [styles['tedi-card--borderless']]: borderless, - [styles['tedi-card--no-border-radius-top']]: borderRadius === false || borderRadius?.top === false, - [styles['tedi-card--no-border-radius-right']]: borderRadius === false || borderRadius?.right === false, - [styles['tedi-card--no-border-radius-bottom']]: borderRadius === false || borderRadius?.bottom === false, - [styles['tedi-card--no-border-radius-left']]: borderRadius === false || borderRadius?.left === false, - }, - className - ); - - return ( - -
- {children} -
-
- ); -}); - -CardComponent.displayName = 'Card'; - -export const Card = Object.assign(CardComponent, { - Content: CardContent, - Header: CardHeader, - Notification: CardNotification, -}); - -export default Card; diff --git a/libs/react-components/src/tedi/components/cards/card/index.ts b/libs/react-components/src/tedi/components/cards/card/index.ts deleted file mode 100644 index a4faeeecf..000000000 --- a/libs/react-components/src/tedi/components/cards/card/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './card'; -export * from './card-header/card-header'; -export * from './card-notification/card-notification'; -export * from './card-content/card-content'; diff --git a/libs/react-components/src/tedi/components/cards/card/utility.ts b/libs/react-components/src/tedi/components/cards/card/utility.ts deleted file mode 100644 index a666c74f4..000000000 --- a/libs/react-components/src/tedi/components/cards/card/utility.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { CardProps } from './card'; -import { CardContentProps } from './card-content/card-content'; - -export type CardBorderPlacement = 'top' | 'left'; -export type CardBorderType = `${CardBorderPlacement}-${CardBackground}` | CardBackground; -export type CardContentPaddingNumber = 0 | 0.5 | 0.75 | 1 | 1.5 | 2 | 2.5 | 3; -export type CardBackground = - | 'primary' - | 'secondary' - | 'tertiary' - | 'accent' - | 'brand-primary' - | 'brand-secondary' - | 'brand-tertiary' - | 'brand-quaternary' - | 'danger-primary' - | 'danger-secondary' - | 'success-primary' - | 'success-secondary' - | 'info-primary' - | 'info-secondary' - | 'warning-primary' - | 'warning-secondary' - | 'neutral-primary' - | 'neutral-secondary'; - -export type CardBorderTypeArray = [CardBorderPlacement, CardBackground]; - -/** - * Extracts the border placement and color from the provided border value. - * @param border - The border value from CardProps. - * @returns A tuple [placement, color] or an empty array if border is undefined. - */ -export const getCardBorderPlacementColor = (border?: CardProps['border']): CardBorderTypeArray | [] => { - const borderColor = border?.replace(/(top-)|(left-)/s, '') as CardBackground; - const borderPlacement = border?.replace(new RegExp(`(${borderColor})|-`, 'g'), '') as CardBorderPlacement; - - return [borderPlacement, borderColor]; -}; - -/** - * Generates CSS variables for card content padding based on the provided padding configuration. - * @param padding - The padding configuration from CardContentProps. - * @returns An object with CSS variables for padding. - */ -export const getPaddingCssVariables = (padding: CardContentProps['padding']) => { - const isDirectionObject = ( - value: CardContentProps['padding'] - ): value is { vertical: CardContentPaddingNumber; horizontal: CardContentPaddingNumber } => - typeof value === 'object' && 'vertical' in value && 'horizontal' in value; - - if (typeof padding === 'number') { - return { - '--card-content-padding-top': `${padding}rem`, - '--card-content-padding-right': `${padding}rem`, - '--card-content-padding-bottom': `${padding}rem`, - '--card-content-padding-left': `${padding}rem`, - }; - } - - if (isDirectionObject(padding)) { - const { vertical, horizontal } = padding; - return { - '--card-content-padding-top': `${vertical}rem`, - '--card-content-padding-right': `${horizontal}rem`, - '--card-content-padding-bottom': `${vertical}rem`, - '--card-content-padding-left': `${horizontal}rem`, - }; - } - - const { top = 0, right = 0, bottom = 0, left = 0 } = padding || {}; - return { - '--card-content-padding-top': `${top}rem`, - '--card-content-padding-right': `${right}rem`, - '--card-content-padding-bottom': `${bottom}rem`, - '--card-content-padding-left': `${left}rem`, - }; -}; diff --git a/libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.module.scss b/libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.module.scss deleted file mode 100644 index 35e472c6b..000000000 --- a/libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.module.scss +++ /dev/null @@ -1,8 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-heading-with-icon { - display: flex; - align-items: center; - - @include mixins.responsive-styles(gap, content-heading-inner-spacing-x); -} diff --git a/libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.spec.tsx b/libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.spec.tsx deleted file mode 100644 index e2b93140b..000000000 --- a/libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.spec.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { render } from '@testing-library/react'; - -import HeadingWithIcon from './heading-with-icon'; - -import '@testing-library/jest-dom'; - -describe('HeadingWithIcon', () => { - it('renders children and icon correctly', () => { - const { container } = render(Child content); - - const iconElement = container.querySelector('.tedi-heading-with-icon .tedi-icon'); - expect(iconElement).toBeInTheDocument(); - expect(iconElement).toHaveClass('tedi-icon--color-primary'); - - const headingElement = container.querySelector('h4.tedi-heading-with-icon'); - expect(headingElement).toBeInTheDocument(); - expect(headingElement).toHaveTextContent('Child content'); - }); - - it('renders the correct heading element based on the element prop', () => { - const { container } = render( - - Child content - - ); - - const headingElement = container.querySelector('h2.tedi-heading-with-icon'); - expect(headingElement).toBeInTheDocument(); - expect(headingElement).toHaveTextContent('Child content'); - }); - - it('applies the correct heading color and icon color', () => { - const { container } = render( - - Child content - - ); - - const headingElement = container.querySelector('.tedi-heading-with-icon'); - expect(headingElement).toHaveClass('tedi-heading-with-icon tedi-text--secondary'); - - const iconElement = container.querySelector('.tedi-icon'); - expect(iconElement).toHaveClass('tedi-icon--color-tertiary'); - }); -}); diff --git a/libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.stories.tsx b/libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.stories.tsx deleted file mode 100644 index 5357b102a..000000000 --- a/libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.stories.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { VerticalSpacing } from '../../layout/vertical-spacing'; -import HeadingWithIcon, { HeadingWithIconProps } from './heading-with-icon'; - -/** - * Figma ↗
- * Zeroheight ↗ - */ - -export default { - title: 'Tedi-Ready/Content/HeadingWithIcon', - component: HeadingWithIcon, - parameters: { - design: { - type: 'figma', - url: 'https://www.figma.com/file/jWiRIXhHRxwVdMSimKX2FF/TEDI-Design-System-(draft)?type=design&node-id=2137-19827&mode=dev', - }, - }, -} as Meta; -type Story = StoryObj; - -const Template: StoryFn = (args) => ; -const TemplateColors: StoryFn = (args) => { - return ( - - - {args.children} - - {args.children} - - ); -}; - -export const Default: Story = { - render: Template, - args: { - children: 'My family physician', - name: 'assignment_ind', - headingColor: 'brand', - iconColor: 'brand', - }, -}; - -export const Colors: Story = { - render: TemplateColors, - args: { - children: 'My family physician', - name: 'assignment_ind', - }, -}; diff --git a/libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.tsx b/libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.tsx deleted file mode 100644 index 16b034833..000000000 --- a/libs/react-components/src/tedi/components/content/heading-with-icon/heading-with-icon.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import cn from 'classnames'; - -import { Icon, IconColor, IconWithoutBackgroundProps } from '../../base/icon/icon'; -import { Heading, HeadingProps } from '../../base/typography/heading/heading'; -import { TextColor } from '../../base/typography/text/text'; -import styles from './heading-with-icon.module.scss'; - -export interface HeadingWithIconProps extends Omit, Omit { - /** - * Heading text - */ - children: React.ReactNode; - /** - * Additional class - */ - className?: string; - /** - * Heading text color - */ - headingColor?: TextColor; - /** - * Icon color - */ - iconColor?: IconColor; -} - -export const HeadingWithIcon = (props: HeadingWithIconProps): JSX.Element => { - const { - children, - className, - element = 'h4', - name, - size = 24, - headingColor = 'primary', - iconColor = 'primary', - ...rest - } = props; - - const headingProps: HeadingProps = { - children, - element, - className: cn(styles['tedi-heading-with-icon'], className), - color: headingColor, - ...rest, - }; - - const iconProps: IconWithoutBackgroundProps = { name, color: iconColor, size, ...rest }; - - return ( - - {name && } - {children} - - ); -}; - -export default HeadingWithIcon; diff --git a/libs/react-components/src/tedi/components/content/label/label.module.scss b/libs/react-components/src/tedi/components/content/label/label.module.scss deleted file mode 100644 index 634402efe..000000000 --- a/libs/react-components/src/tedi/components/content/label/label.module.scss +++ /dev/null @@ -1,30 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-label { - display: inline; - align-items: center; - font-style: normal; - font-feature-settings: 'clig' off, 'liga' off; - color: var(--general-text-secondary); - - @include mixins.responsive-styles(font-family, family-primary); - @include mixins.responsive-styles(font-size, body-regular-size); - @include mixins.responsive-styles(font-weight, body-regular-weight); - @include mixins.responsive-styles(line-height, body-regular-line-height); - - &--small { - @include mixins.responsive-styles(font-size, body-small-regular-size, $exclude: tablet); - @include mixins.responsive-styles(font-weight, body-small-regular-weight, $exclude: tablet); - } - - &--bold { - @include mixins.responsive-styles(font-weight, body-bold-weight); - @include mixins.responsive-styles(line-height, body-bold-line-height); - } - - &__required { - color: var(--form-general-feedback-error-border); - - @include mixins.responsive-styles(margin-left, content-label-inner-spacing-x); - } -} diff --git a/libs/react-components/src/tedi/components/content/label/label.spec.tsx b/libs/react-components/src/tedi/components/content/label/label.spec.tsx deleted file mode 100644 index bb55e534b..000000000 --- a/libs/react-components/src/tedi/components/content/label/label.spec.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { fireEvent, render, screen } from '@testing-library/react'; - -import { useBreakpointProps } from '../../../helpers'; -import { Label } from './label'; - -import '@testing-library/jest-dom'; - -jest.mock('../../../helpers', () => ({ - useBreakpointProps: jest.fn(), - useIsTouchDevice: jest.fn(), - useIsMounted: jest.fn(() => true), -})); - -describe('Label component', () => { - beforeEach(() => { - (useBreakpointProps as jest.Mock).mockReturnValue({ - getCurrentBreakpointProps: jest.fn((props) => props), - }); - }); - - it('renders with default props', () => { - const { container } = render(); - const label = container.querySelector('.tedi-label'); - expect(label).toBeInTheDocument(); - expect(label).toHaveTextContent('Label'); - expect(label).not.toHaveClass('tedi-label--bold'); - expect(label).not.toHaveClass('tedi-label--small'); - }); - - it('renders with isBold and required props', () => { - const { container } = render( - - ); - const label = container.querySelector('.tedi-label'); - const required = container.querySelector('.tedi-label__required'); - expect(label).toHaveClass('tedi-label--bold'); - expect(required).toBeInTheDocument(); - }); - - it('renders with isSmall size', () => { - const { container } = render(); - const label = container.querySelector('.tedi-label'); - expect(label).toHaveClass('tedi-label--small'); - }); - - it('renders with a custom class name', () => { - const { container } = render(); - const label = container.querySelector('.tedi-label'); - expect(label).toHaveClass('custom-class'); - }); - - it('handles breakpoint props correctly for isBold', () => { - (useBreakpointProps as jest.Mock).mockReturnValue({ - getCurrentBreakpointProps: jest.fn(() => ({ - isBold: true, - })), - }); - - const { container } = render(); - const label = container.querySelector('.tedi-label'); - expect(label).toHaveClass('tedi-label--bold'); - }); - - it('handles breakpoint props correctly for isSmall', () => { - (useBreakpointProps as jest.Mock).mockReturnValue({ - getCurrentBreakpointProps: jest.fn(() => ({ - isSmall: true, - })), - }); - - const { container } = render(); - const label = container.querySelector('.tedi-label'); - expect(label).toHaveClass('tedi-label--small'); - }); - - it('renders required symbol when required is true', () => { - const { container } = render(); - const required = container.querySelector('.tedi-label__required'); - expect(required).toBeInTheDocument(); - }); - - it('renders an InfoButton when tooltip is provided', () => { - render(); - - const infoButton = screen.getByRole('button'); - expect(infoButton).toBeInTheDocument(); - - fireEvent.mouseEnter(infoButton); - - expect(screen.getByRole('tooltip', { name: 'This is a tooltip' })).toBeInTheDocument(); - }); - - it('does not render InfoButton if tooltip is not provided', () => { - const { queryByRole } = render(); - const infoButton = queryByRole('button'); - expect(infoButton).not.toBeInTheDocument(); - }); -}); diff --git a/libs/react-components/src/tedi/components/content/label/label.stories.tsx b/libs/react-components/src/tedi/components/content/label/label.stories.tsx deleted file mode 100644 index 89b284d8c..000000000 --- a/libs/react-components/src/tedi/components/content/label/label.stories.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Label, LabelProps } from './label'; - -/** - * Figma ↗
- * Zeroheight ↗ - */ - -const meta: Meta = { - component: Label, - title: 'TEDI-Ready/Content/Label', - parameters: { - status: { - type: [{ name: 'breakpointSupport', url: '?path=/docs/helpers-usebreakpointprops--usebreakpointprops' }], - }, - controls: { - exclude: ['sm', 'md', 'lg', 'xl', 'xxl'], - }, - design: { - type: 'figma', - url: 'https://www.figma.com/design/jWiRIXhHRxwVdMSimKX2FF/TEDI-READY-(work-in-progress)?node-id=2137-19322&m=dev', - }, - }, -}; - -export default meta; -type Story = StoryObj; - -const Template: StoryFn = (args) =>
} - /> - - - Mari Maasikas - - } - type="horizontal" - /> - - - - ); -}; - -export const Default: Story = { - render: TemplateWithLayouts, - args: { - label: 'Accessibility', - value: Visible to doctor and representative, - }, -}; - -export const Types: Story = { - render: TemplateWithTypes, - args: { - label: 'Accessibility', - value: Visible to doctor and representative, - }, -}; - -export const PositionType: Story = { - render: TemplateWithLayouts, - args: { - label: 'Accessibility', - value: Visible to doctor and representative, - }, -}; - -export const HorizontalLabelLength: Story = { - render: MultipleTextGroupsTemplate, - args: { - type: 'horizontal', - }, -}; - -export const LongTextValues: Story = { - render: TemplateWithLayouts, - args: { - label: 'Accessibility', - labelWidth: '150px', - value: ( - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent pulvinar malesuada tellus, nec efficitur orci - interdum vitae. Proin semper venenatis est, vel malesuada sapien ornare at. Vestibulum egestas in lectus non - finibus. Donec rhoncus sapien vel justo elementum vestibulum. Vivamus euismod dui vel erat semper luctus. Nulla - egestas purus elit, non fermentum sapien sagittis nec. Pellentesque ac sapien non justo vehicula porta. - - ), - }, -}; diff --git a/libs/react-components/src/tedi/components/content/text-group/text-group.tsx b/libs/react-components/src/tedi/components/content/text-group/text-group.tsx deleted file mode 100644 index ec5294018..000000000 --- a/libs/react-components/src/tedi/components/content/text-group/text-group.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { BreakpointSupport, useBreakpointProps } from '../../../helpers'; -import { Label } from '../label/label'; -import styles from './text-group.module.scss'; - -type TextGroupType = 'vertical' | 'horizontal'; - -type TextGroupBreakpointProps = { - /** - * Type of text group layout - */ - type?: TextGroupType; - /** - * Width for the label (e.g., '200px', '30%', etc.) - * @default 'auto' - */ - labelWidth?: string | number; -}; - -export interface TextGroupProps extends BreakpointSupport { - /** - * Label for the text group - */ - label: string; - /** - * Value displayed alongside the label - */ - value: React.ReactNode | React.ReactNode[]; - /** - * Additional class name(s) to apply to the element - */ - className?: string; -} - -export const TextGroup = (props: TextGroupProps): JSX.Element => { - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - const { - label, - value, - labelWidth = 'auto', - className, - type = 'vertical', - } = getCurrentBreakpointProps(props); - - const textGroupBEM = cn(styles['tedi-text-group'], styles[`tedi-text-group--${type}`], className); - const labelWidthStyle = typeof labelWidth === 'number' ? `${labelWidth}%` : labelWidth; - - return ( -
-
- -
-
{value}
-
- ); -}; diff --git a/libs/react-components/src/tedi/components/content/truncate/truncate.spec.tsx b/libs/react-components/src/tedi/components/content/truncate/truncate.spec.tsx deleted file mode 100644 index 4f1dccc10..000000000 --- a/libs/react-components/src/tedi/components/content/truncate/truncate.spec.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { fireEvent, render, screen } from '@testing-library/react'; - -import { Truncate } from './truncate'; - -import '@testing-library/jest-dom'; - -describe('Truncate Component', () => { - const defaultProps = { - children: 'This is a long text that needs to be truncated for testing purposes.', - maxLength: 20, - }; - - it('handles ellipsis rendering', () => { - render(); - const truncatedText = screen.getByText(/This is a long text/); - expect(truncatedText).toBeInTheDocument(); - - if (defaultProps.children.length >= defaultProps.maxLength) { - expect(truncatedText).toHaveTextContent('...'); - } else { - expect(truncatedText).not.toHaveTextContent('...'); - } - }); - - it('renders the full text when expanded', () => { - render(); - - if (defaultProps.children.length >= defaultProps.maxLength) { - const button = screen.getByRole('button'); - fireEvent.click(button); - } - - const fullText = screen.getByText(defaultProps.children); - expect(fullText).toBeInTheDocument(); - expect(fullText).not.toHaveTextContent('...'); - }); - - it('does not render the button when expandable is false', () => { - render(); - - const button = screen.queryByRole('button'); - expect(button).not.toBeInTheDocument(); - }); - - it('renders custom ellipsis if provided', () => { - const ellipsis = '***' as const; - render(); - const truncatedText = screen.getByText(/This is a long text/); - - if (defaultProps.children.length >= defaultProps.maxLength) { - expect(truncatedText).toHaveTextContent(ellipsis); - } else { - expect(truncatedText).not.toHaveTextContent(ellipsis); - } - }); -}); diff --git a/libs/react-components/src/tedi/components/content/truncate/truncate.stories.tsx b/libs/react-components/src/tedi/components/content/truncate/truncate.stories.tsx deleted file mode 100644 index 4c76ed259..000000000 --- a/libs/react-components/src/tedi/components/content/truncate/truncate.stories.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Col, Row } from '../../layout/grid'; -import { Truncate } from './truncate'; - -/** - * Figma ↗
- * Zeroheight ↗ - */ - -const meta: Meta = { - component: Truncate, - title: 'Tedi-ready/Content/Truncate', - parameters: { - status: { - type: [{ name: 'breakpointSupport', url: '?path=/docs/helpers-usebreakpointprops--usebreakpointprops' }], - }, - controls: { - exclude: ['sm', 'md', 'lg', 'xl', 'xxl'], - }, - design: { - type: 'figma', - url: 'https://www.figma.com/design/jWiRIXhHRxwVdMSimKX2FF/TEDI-READY-(work-in-progress)?node-id=2427-40830&m=dev', - }, - }, -}; - -export default meta; -type Story = StoryObj; - -const TemplateColumn: StoryFn = (args) => { - return ( - - - - - - ); -}; - -export const Default: Story = { - render: TemplateColumn, - args: { - children: `Lorem ipsum dolor sit amet consectetur adipisicing elit. Alias, maiores! Tempora consequatur eveniet cupiditate. - Aspernatur id quia fugiat, consequatur rerum ipsa ipsam ad suscipit provident odio est commodi velit ut quisquam amet, - harum nisi molestias excepturi sit perferendis, aliquid at consectetur? - Minima quidem cumque eaque eveniet unde esse impedit necessitatibus aut non autem, - maxime sed odit repellat distinctio, molestias laudantium saepe dignissimos eius!`, - expandable: true, - }, -}; - -export const NoTruncate: Story = { - render: TemplateColumn, - args: { - children: 'This text does not get truncated, because the length is smaller than maxLength property.', - maxLength: 100, - }, -}; diff --git a/libs/react-components/src/tedi/components/content/truncate/truncate.tsx b/libs/react-components/src/tedi/components/content/truncate/truncate.tsx deleted file mode 100644 index b3fad8a61..000000000 --- a/libs/react-components/src/tedi/components/content/truncate/truncate.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import React, { ReactNode, useMemo, useState } from 'react'; - -import { BreakpointSupport, useBreakpointProps } from '../../../helpers'; -import { useLabels } from '../../../providers/label-provider'; -import { Text } from '../../base/typography/text/text'; -import Button, { ButtonProps } from '../../buttons/button/button'; - -type TruncateBreakpointProps = { - /** - * Additional class name - */ - className?: string; - /** - * Maximum number of characters to display - * @default 200 - */ - maxLength?: number; -}; - -export interface TruncateProps extends BreakpointSupport { - /** - * Text that will be truncated - */ - children: string; - /** - * Custom content to display at the end of truncated text - * @default '...' - */ - ellipsis?: ReactNode; - /** - * Whether the truncated text should be expandable - * @default true - */ - expandable?: boolean; - /** - * Override default button properties - */ - button?: Partial< - Omit & { onClick: (e: React.MouseEvent, isTruncated: boolean) => void } - >; -} - -export const Truncate = (props: TruncateProps): JSX.Element => { - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - const { - children, - className, - maxLength = 200, - ellipsis = '...', - expandable = true, - button, - } = getCurrentBreakpointProps(props); - const { getLabel } = useLabels(); - - const [isTruncated, setIsTruncated] = useState(true); - const truncatedText = useMemo(() => { - const slicedText = children.slice(0, maxLength).trimEnd(); - return slicedText + ellipsis + ' '; - }, [children, maxLength, ellipsis]); - - return ( - - {children.length >= maxLength && isTruncated ? truncatedText : children} - {children.length >= maxLength && expandable && ( - - )} - - ); -}; - -export default Truncate; diff --git a/libs/react-components/src/tedi/components/form/checkbox/checkbox.module.scss b/libs/react-components/src/tedi/components/form/checkbox/checkbox.module.scss deleted file mode 100644 index 83969201c..000000000 --- a/libs/react-components/src/tedi/components/form/checkbox/checkbox.module.scss +++ /dev/null @@ -1,117 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-checkbox { - position: relative; - color: var(--general-text-primary); - - @include mixins.print-grayscale; - - &:hover:not(.checkbox--disabled) { - cursor: pointer; - } - - &--disabled { - color: var(--general-text-disabled); - cursor: not-allowed; - } - - &__input { - @include mixins.visually-hidden; - } - - &__outer-indicator-wrapper { - display: flex; - align-items: center; - - @include mixins.responsive-styles(height, form-checkbox-radio-indicator-container-height); - } - - &__helper { - @include mixins.responsive-styles(padding-left, form-checkbox-radio-size-responsive); - @include mixins.responsive-styles(margin-left, form-checkbox-radio-inner-spacing); - } - - &__icon { - position: absolute; - color: var(--form-checkbox-radio-default-check-indicator-default); - opacity: 0; - transition: opacity 150ms ease; - - [type='checkbox']:checked + .tedi-checkbox__indicator &--check, - .tedi-checkbox__indicator--indeterminate &--indeterminate { - opacity: 1; - } - } - - &__tooltip-icon { - @include mixins.responsive-styles(margin-left, form-checkbox-radio-inner-spacing); - } -} - -.tedi-checkbox__indicator { - position: relative; - display: flex; - align-items: center; - justify-content: center; - background-color: var(--form-checkbox-radio-default-background-default); - border: 1px solid var(--form-checkbox-radio-default-border-default); - transition: border-color 150ms ease; - - @include mixins.responsive-styles(margin-right, form-checkbox-radio-inner-spacing); - @include mixins.responsive-styles(border-radius, form-checkbox-radio-indicator-radius-checkbox); - - &--size-default { - @include mixins.responsive-styles(width, form-checkbox-radio-size-responsive); - @include mixins.responsive-styles(height, form-checkbox-radio-size-responsive); - } - - &--size-large { - @include mixins.responsive-styles(width, form-checkbox-radio-size-large); - @include mixins.responsive-styles(height, form-checkbox-radio-size-large); - } - - &--invalid { - border-color: var(--form-general-feedback-error-border); - } - - .tedi-checkbox__input:not(:disabled) + &:active { - background: var(--form-checkbox-radio-default-background-active); - border-color: var(--form-checkbox-radio-default-border-active); - } - - .tedi-checkbox__input:not(:disabled) + &--hover, - .tedi-checkbox__input:hover:not(:disabled) + &, - .tedi-checkbox__input:not(:disabled) + &:hover, - .tedi-checkbox__input:focus:not(:disabled) + & { - cursor: pointer; - border-color: var(--form-checkbox-radio-default-border-selected); - outline: 1px solid var(--form-checkbox-radio-default-border-selected); - } - - .tedi-checkbox__input:focus-visible:not(:disabled) + & { - border-color: var(--form-checkbox-radio-default-border-selected); - outline: var(--form-checkbox-radio-default-border-selected) solid 2px; - outline-offset: 2px; - } - - [type='checkbox']:checked + &, - &--indeterminate { - background: var(--form-checkbox-radio-default-background-selected); - border-color: var(--form-checkbox-radio-default-border-selected); - } - - .tedi-checkbox__input:disabled + & { - background-color: var(--form-general-background-disabled); - border-color: var(--form-general-border-disabled); - } - - .tedi-checkbox__input:disabled:checked + & { - background-color: var(--form-checkbox-radio-default-background-selected-disabled); - border-color: var(--form-checkbox-radio-default-border-selected-disabled); - - &::after { - background-color: var(--form-checkbox-radio-default-background-selected-disabled); - border-color: var(--form-checkbox-radio-default-background-selected-disabled); - } - } -} diff --git a/libs/react-components/src/tedi/components/form/checkbox/checkbox.spec.tsx b/libs/react-components/src/tedi/components/form/checkbox/checkbox.spec.tsx deleted file mode 100644 index de72e2c29..000000000 --- a/libs/react-components/src/tedi/components/form/checkbox/checkbox.spec.tsx +++ /dev/null @@ -1,213 +0,0 @@ -import { fireEvent, render, screen } from '@testing-library/react'; -import { act, useState } from 'react'; - -import Checkbox from './checkbox'; - -import '@testing-library/jest-dom'; - -jest.mock('../../base/icon/icon', () => ({ - Icon: jest.fn(({ name }) => {name}), -})); - -describe('Checkbox component', () => { - it('renders with default props', () => { - const { container } = render(); - - const input = container.querySelector('input[type="checkbox"]'); - expect(input).toBeInTheDocument(); - expect(input).not.toBeChecked(); - }); - - it('renders with checked prop', () => { - const { container } = render( - - ); - - const input = container.querySelector('input[type="checkbox"]'); - expect(input).toBeChecked(); - }); - - it('renders with disabled prop', () => { - const { container } = render( - - ); - - const input = container.querySelector('input[type="checkbox"]'); - expect(input).toBeDisabled(); - }); - - it('calls onChange when clicked', () => { - const handleChange = jest.fn(); - const { container } = render( - - ); - - const input = container.querySelector('input[type="checkbox"]'); - if (input) { - fireEvent.click(input); - } - expect(handleChange).toHaveBeenCalledWith('check-value', true); - }); - - it('renders with hideLabel prop', () => { - const { container } = render( - - ); - - const hiddenLabel = container.querySelector('label'); - - expect(hiddenLabel).toBeInTheDocument(); - expect(hiddenLabel).toHaveClass('tedi-form-label--hidden'); - }); - - it('renders with tooltip', () => { - const { getByTestId } = render( - - ); - - expect(getByTestId('icon-info')).toBeInTheDocument(); - }); - - it('renders with extra content', () => { - const { getByText } = render( - - ); - - expect(getByText('Extra Content')).toBeInTheDocument(); - }); - - it('handles defaultChecked correctly', () => { - const { container } = render( - - ); - - const input = container.querySelector('input[type="checkbox"]'); - expect(input).toBeChecked(); - }); - - it('changes state when clicked if not controlled', async () => { - const TestComponent = () => { - const [isChecked, setIsChecked] = useState(false); - return ( - setIsChecked(!isChecked)} - /> - ); - }; - - render(); - const checkbox = screen.getByRole('checkbox'); - - expect(checkbox).not.toBeChecked(); - - await act(async () => { - fireEvent.click(checkbox); - }); - - expect(checkbox).toBeChecked(); - }); - - it('does not change state when clicked if controlled', async () => { - const handleChange = jest.fn(); - const { rerender } = render( - - ); - - const checkbox = screen.getByRole('checkbox'); - expect(checkbox).not.toBeChecked(); - - await act(async () => { - fireEvent.click(checkbox); - }); - - expect(checkbox).not.toBeChecked(); - expect(handleChange).toHaveBeenCalledTimes(1); - expect(handleChange).toHaveBeenCalledWith('check-value', true); - - rerender( - - ); - - expect(checkbox).toBeChecked(); - }); - - it('renders with indeterminate state', () => { - const { container } = render( - - ); - - const input = container.querySelector('input[type="checkbox"]'); - expect(input).toHaveAttribute('aria-checked', 'mixed'); - expect(input).not.toBeChecked(); - - const indeterminateIcon = container.querySelector('.tedi-checkbox__indicator--indeterminate'); - expect(indeterminateIcon).toBeInTheDocument(); - }); - - it('renders with indeterminate state and ignores checked', () => { - const { container } = render( - - ); - - const input = container.querySelector('input[type="checkbox"]'); - expect(input).toHaveAttribute('aria-checked', 'mixed'); - expect(input).not.toBeChecked(); - }); - - it('removes indeterminate state when clicked', () => { - const { container, rerender } = render( - - ); - - const input = container.querySelector('input[type="checkbox"]'); - expect(input).toHaveAttribute('aria-checked', 'mixed'); - - if (input) { - fireEvent.click(input); - } - - rerender(); - - expect(input).not.toHaveAttribute('aria-checked', 'mixed'); - }); - - it('calls labelRef.current.click() when clicked', () => { - const { getByTestId } = render( - - ); - - const label = getByTestId('checkbox-label'); - const indicator = getByTestId('checkbox-indicator'); - - jest.spyOn(label, 'click').mockImplementation(() => {}); - - fireEvent.click(indicator); - - expect(label.click).toHaveBeenCalled(); - }); -}); diff --git a/libs/react-components/src/tedi/components/form/checkbox/checkbox.stories.tsx b/libs/react-components/src/tedi/components/form/checkbox/checkbox.stories.tsx deleted file mode 100644 index 0276926a3..000000000 --- a/libs/react-components/src/tedi/components/form/checkbox/checkbox.stories.tsx +++ /dev/null @@ -1,263 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import React, { useState } from 'react'; - -import { Text } from '../../base/typography/text/text'; -import { Col, Row } from '../../layout/grid'; -import { VerticalSpacing } from '../../layout/vertical-spacing'; -import Alert from '../../notifications/alert/alert'; -import Checkbox, { CheckboxProps } from './checkbox'; - -/** - * Figma ↗
- * Zeroheight ↗

- * In most cases, you should use the `ChoiceGroup` component. However, we also provide a standalone `Check` component for custom use cases. - */ - -const meta: Meta = { - component: Checkbox, - title: 'TEDI-Ready/Components/Form/ChoiceGroup/Checkbox', -}; - -export default meta; -type Story = StoryObj; - -const Template: StoryFn = (args) => ; -const sizesArray: Array<'default' | 'large'> = ['default', 'large']; - -const TemplateSizes: StoryFn = (args) => { - return ( - - - {sizesArray.map((size, key) => ( - - - - {size.charAt(0).toUpperCase() + size.slice(1)} - {size === 'large' && ( - - Applied automatically on mobile screen sizes. - Otherwise, prefer using default size. - - )} - - - - - - - ))} - - - ); -}; - -export const Default: Story = { - render: Template, - - args: { - id: 'default-check', - name: 'default-check', - defaultChecked: true, - }, -}; - -export const Sizes: Story = { - render: TemplateSizes, -}; - -export const States = () => { - const [checked, setChecked] = useState(true); - const [indeterminate, setIndeterminate] = useState(true); - - return ( - - - - - - Default - - - - - - - - Hover - - - - - - - - Selected - - - setChecked(checked)} - /> - - - - - Disabled - - - - - - - - Disabled selected - - - setChecked(checked)} - /> - - - - - Indeterminate - - - { - setIndeterminate(false); - setChecked(checked); - }} - /> - - - - - Error - - - - - - - - - ); -}; - -export const HiddenLabel: Story = { - render: Template, - - args: { - id: 'hidden-label-check', - name: 'hidden-label-check', - hideLabel: true, - }, -}; - -export const WithHelper: Story = { - render: Template, - - args: { - id: 'extra-content-check', - name: 'extra-content-check', - helper: { - text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis scelerisque quis augue sit amet semper. Donec porttitor mauris neque, quis feugiat erat malesuada ac. Cras vel mauris a est pretium egestas.', - }, - }, -}; - -export const WithTooltip: Story = { - render: (args) => ( - - - - - - - - - - ), - - args: { - name: 'tooltip-check', - tooltip: 'This is a tooltip', - }, -}; - -export const Controlled = () => { - const [checked, setChecked] = React.useState(true); - - return ( - setChecked(checked)} - /> - ); -}; - -export const CheckWithLongTitle = () => { - return ( - - - - - - ); -}; diff --git a/libs/react-components/src/tedi/components/form/checkbox/checkbox.tsx b/libs/react-components/src/tedi/components/form/checkbox/checkbox.tsx deleted file mode 100644 index 25033fc0e..000000000 --- a/libs/react-components/src/tedi/components/form/checkbox/checkbox.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { Icon } from '../../base/icon/icon'; -import { Col, Row } from '../../layout/grid'; -import { ChoiceInputProps } from '../choice-input.types'; -import FeedbackText from '../feedback-text/feedback-text'; -import FormLabel from '../form-label/form-label'; -import styles from './checkbox.module.scss'; - -export interface CheckboxProps extends ChoiceInputProps { - /** - * If the check is in indeterminate state. (Not checked or unchecked) - * When this is true then the checked prop is ignored - */ - indeterminate?: boolean; -} - -export const Checkbox = (props: CheckboxProps): JSX.Element => { - const { - id, - label, - value, - className, - disabled = false, - onChange, - hideLabel = false, - helper, - checked, - defaultChecked, - indeterminate, - hover, - name, - tooltip, - invalid, - size = 'default', - ...rest - } = props; - const [innerChecked, setInnerChecked] = React.useState(defaultChecked || false); - const labelRef = React.useRef(null); - - const getChecked = React.useMemo((): boolean | 'mixed' => { - return indeterminate ? 'mixed' : onChange && typeof checked !== 'undefined' ? checked : innerChecked; - }, [indeterminate, onChange, checked, innerChecked]); - - const onChangeHandler = (event: React.ChangeEvent): void => { - if (typeof checked === 'undefined') { - setInnerChecked(event?.target.checked); - } - onChange?.(value, event?.target.checked); - }; - - const helperId = helper ? helper?.id ?? `${id}-helper` : undefined; - const LabelBEM = cn(styles['tedi-checkbox'], { [styles['tedi-checkbox--disabled']]: disabled }); - - return ( -
- - -
- - -
- - - {label && typeof label === 'string' ? ( - - ) : ( - - )} - -
- {helper && ( - - )} -
- ); -}; - -export default Checkbox; diff --git a/libs/react-components/src/tedi/components/form/choice-group/choice-group-context.spec.tsx b/libs/react-components/src/tedi/components/form/choice-group/choice-group-context.spec.tsx deleted file mode 100644 index b908951a4..000000000 --- a/libs/react-components/src/tedi/components/form/choice-group/choice-group-context.spec.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import { useContext } from 'react'; - -import { ChoiceGroupContext } from './choice-group-context'; - -const TestComponent = () => { - const context = useContext(ChoiceGroupContext); - return ( -
-

{context.name}

-

{context.inputType}

-

{JSON.stringify(context.currentValue)}

-
- ); -}; - -it('uses default ChoiceGroupContext values when no provider is present', () => { - render(); - - expect(screen.getByTestId('name')).toHaveTextContent(''); - expect(screen.getByTestId('inputType')).toHaveTextContent('radio'); - expect(screen.getByTestId('currentValue')).toHaveTextContent('[]'); -}); - -it('renders default ChoiceGroupContext without a provider', () => { - render( - - {(context) => { - expect(context).toEqual({ - name: '', - inputType: 'radio', - onChange: expect.any(Function), - currentValue: [], - }); - return null; - }} - - ); -}); diff --git a/libs/react-components/src/tedi/components/form/choice-group/choice-group-context.ts b/libs/react-components/src/tedi/components/form/choice-group/choice-group-context.ts deleted file mode 100644 index 6af0cd8a3..000000000 --- a/libs/react-components/src/tedi/components/form/choice-group/choice-group-context.ts +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; - -import { ChoiceGroupItemType, ChoiceGroupValue } from './choice-group.types'; - -export interface IChoiceGroupContext { - name: string; - inputType: ChoiceGroupItemType; - currentValue: ChoiceGroupValue; - onChange: (value: string, checked: boolean) => void; -} - -export const ChoiceGroupContext = React.createContext({ - name: '', - inputType: 'radio', - onChange: () => null, - currentValue: [], -}); diff --git a/libs/react-components/src/tedi/components/form/choice-group/choice-group.module.scss b/libs/react-components/src/tedi/components/form/choice-group/choice-group.module.scss deleted file mode 100644 index d704a2dc6..000000000 --- a/libs/react-components/src/tedi/components/form/choice-group/choice-group.module.scss +++ /dev/null @@ -1,23 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -.tedi-choice-group { - position: relative; - padding: 0; - margin: 0; - border: none; - - legend { - padding: 0; - } -} - -.tedi-choice-group__inner--indented { - padding-left: calc(var(--_padding-left) - 5px); - - @include mixins.responsive-styles(--_padding-left, form-checkbox-radio-subitem-padding-left); - - @include breakpoints.media-breakpoint-down(md) { - @include mixins.responsive-styles(padding-left, form-checkbox-radio-subitem-padding-left); - } -} diff --git a/libs/react-components/src/tedi/components/form/choice-group/choice-group.spec.tsx b/libs/react-components/src/tedi/components/form/choice-group/choice-group.spec.tsx deleted file mode 100644 index 4e5dbf71b..000000000 --- a/libs/react-components/src/tedi/components/form/choice-group/choice-group.spec.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import { fireEvent, render, screen } from '@testing-library/react'; - -import ChoiceGroup, { ChoiceGroupProps } from './choice-group'; -import { ChoiceGroupContext } from './choice-group-context'; - -import '@testing-library/jest-dom'; - -const defaultProps: ChoiceGroupProps = { - id: 'test-choice-group', - label: 'Test Choice Group', - name: 'test-choice-group', - items: [ - { id: 'option-1', value: 'option-1', label: 'Option 1' }, - { id: 'option-2', value: 'option-2', label: 'Option 2' }, - { id: 'option-3', value: 'option-3', label: 'Option 3', disabled: true }, - ], - inputType: 'checkbox', - onChange: jest.fn(), - color: 'secondary', -}; - -describe('ChoiceGroup Component', () => { - it('renders correctly with required props', () => { - render( - - - - ); - - expect(screen.getByText('Test Choice Group')).toBeInTheDocument(); - expect(screen.getByLabelText('Option 1')).toBeInTheDocument(); - expect(screen.getByLabelText('Option 2')).toBeInTheDocument(); - expect(screen.getByLabelText('Option 3')).toBeDisabled(); - }); - - it('calls onChange when selecting a checkbox', () => { - const onChangeMock = jest.fn(); - - render( - - ); - - const option1 = screen.getByLabelText('Option 1'); - - fireEvent.click(option1); - - expect(onChangeMock).toHaveBeenCalledTimes(1); - expect(onChangeMock).toHaveBeenCalledWith(['option-1']); - }); - - it('supports radio button selection', () => { - render( - - - - ); - - const option1 = screen.getByLabelText('Option 1'); - const option2 = screen.getByLabelText('Option 2'); - - fireEvent.click(option1); - expect(option1).toBeChecked(); - - fireEvent.click(option2); - expect(option1).not.toBeChecked(); - expect(option2).toBeChecked(); - }); - - it('renders helper text', () => { - render( - - - - ); - - expect(screen.getByText('This is a helper message')).toBeInTheDocument(); - }); - - it('renders and toggles the indeterminate checkbox', () => { - const onChangeMock = jest.fn(); - - render( - - ); - - const indeterminateCheckbox = screen.getByLabelText(/table.filter.select-all/i); - expect(indeterminateCheckbox).toBeInTheDocument(); - - fireEvent.click(indeterminateCheckbox); - - expect(onChangeMock).toHaveBeenCalledTimes(1); - }); - - it('returns correct indeterminate label when indeterminateCheck is a string', () => { - render(); - expect(screen.getByText('Custom Label')).toBeInTheDocument(); - }); - - it('calls indeterminateCheck function correctly', () => { - const mockIndeterminateCheck = jest.fn((state) => `State: ${state}`); - render(); - - expect(mockIndeterminateCheck).toHaveBeenCalledWith('none'); - expect(screen.getByText('State: none')).toBeInTheDocument(); - }); - - it('returns remove-all label when all items are selected', () => { - render(); - expect(screen.getByText(/table.filter.remove-all/i)).toBeInTheDocument(); - }); - - it('returns select-all label when no items are selected', () => { - render(); - expect(screen.getByText(/table.filter.select-all/i)).toBeInTheDocument(); - }); - - it('handles indeterminate checkbox change correctly', () => { - const onChangeMock = jest.fn(); - - render(); - - const indeterminateCheckbox = screen.getByLabelText(/table.filter.select-all/i); - fireEvent.click(indeterminateCheckbox); - - expect(onChangeMock).toHaveBeenCalledTimes(1); - }); -}); diff --git a/libs/react-components/src/tedi/components/form/choice-group/choice-group.stories.tsx b/libs/react-components/src/tedi/components/form/choice-group/choice-group.stories.tsx deleted file mode 100644 index 6e3d24074..000000000 --- a/libs/react-components/src/tedi/components/form/choice-group/choice-group.stories.tsx +++ /dev/null @@ -1,478 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; -import { useState } from 'react'; - -import { Icon } from '../../base/icon/icon'; -import { Text } from '../../base/typography/text/text'; -import { Col, ColProps, Row } from '../../layout/grid'; -import { VerticalSpacing } from '../../layout/vertical-spacing'; -import Separator from '../../misc/separator/separator'; -import ChoiceGroup from './choice-group'; -import { ChoiceGroupValue } from './choice-group.types'; -import { ExtendedChoiceGroupItemProps } from './components/choice-group-item/choice-group-item'; - -/** - * Radio Figma ↗
- * Radio Zeroheight ↗
- * Checkbox Figma ↗
- * Checkbox Zeroheight ↗

- * The `ChoiceGroup` component manages the state of input elements with either the radio or checkbox role.
- * It provides flexibility to show or hide the `FormLabel` for the fieldset and supports displaying a `FormHelper` to provide additional context or guidance for the entire group. - */ -const meta: Meta = { - component: ChoiceGroup, - title: 'TEDI-Ready/Components/Form/ChoiceGroup/ChoiceGroup', - subcomponents: { 'ChoiceGroup.Item': ChoiceGroup.Item } as never, - parameters: { - docs: { - source: { - transform: (code: string) => { - return code.replaceAll('ChoiceGroupItem', 'ChoiceGroup.Item'); - }, - }, - }, - status: { - type: [{ name: 'breakpointSupport', url: '?path=/docs/helpers-usebreakpointprops--usebreakpointprops' }], - }, - controls: { - exclude: ['sm', 'md', 'lg', 'xl', 'xxl'], - }, - }, -}; - -export default meta; -type Story = StoryObj; - -interface GenerateItemsArgs { - index: number; - inputType?: 'radio' | 'checkbox'; - variant?: 'primary' | 'secondary'; - withHelper?: boolean; - withIndicator?: boolean; - extraLongTitle?: boolean; - tooltip?: boolean; - colProps?: ColProps; - layout?: 'separated' | 'segmented'; - justifyContent?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'; -} - -const generateItems = ({ - index, - inputType = 'radio', - variant = 'primary', - withHelper = false, - withIndicator = false, - tooltip = false, - colProps, - layout, - justifyContent, -}: GenerateItemsArgs): ExtendedChoiceGroupItemProps[] => [ - { - id: `${inputType}-${variant}-value-${index * 10 + 1}-${withHelper}-${withIndicator}-${layout}`, - label: 'Text', - value: `${inputType}-${variant}-value-${index * 10 + 1}-${withHelper}-${withIndicator}-${layout}`, - ...(withHelper && { helper: { text: 'Description' } }), - colProps, - tooltip: tooltip ? 'Tooltip' : undefined, - justifyContent, - }, - { - id: `${inputType}-${variant}-value-${index * 10 + 2}-${withHelper}-${withIndicator}-${layout}`, - label: 'Text', - value: `${inputType}-${variant}-value-${index * 10 + 2}-${withHelper}-${withIndicator}-${layout}`, - ...(withHelper && { helper: { text: 'Description' } }), - colProps, - tooltip: tooltip ? 'Tooltip' : undefined, - justifyContent, - }, - { - id: `${inputType}-${variant}-value-${index * 10 + 3}-${withHelper}-${withIndicator}-${layout}`, - label: 'Text', - value: `${inputType}-${variant}-value-${index * 10 + 3}-${withHelper}-${withIndicator}-${layout}`, - ...(withHelper && { helper: { text: 'Description', type: 'error' } }), - disabled: true, - colProps, - tooltip: tooltip ? 'Tooltip' : undefined, - justifyContent, - }, -]; - -const renderGroup = ( - inputType: 'radio' | 'checkbox', - variant: 'primary' | 'secondary', - withHelper: boolean, - withIndicator: boolean, - layout: 'segmented' | 'separated', - index: number, - justifyContent: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly' -) => ( - - - - - - - - -); - -const renderChoiceGroups = (inputType: 'radio' | 'checkbox', layout: 'segmented' | 'separated') => ( - - - - Primary - - - Secondary - - - {renderGroup(inputType, 'primary', false, true, layout, 1, 'start')} - {renderGroup(inputType, 'primary', true, true, layout, 2, 'start')} - {inputType !== 'radio' || - (layout !== 'separated' && renderGroup(inputType, 'primary', false, false, layout, 3, 'start'))} - {inputType !== 'radio' || - (layout !== 'separated' && renderGroup(inputType, 'primary', true, false, layout, 4, 'start'))} - -); - -export const Radio: Story = { - args: { - label: 'ChoiceGroup with radios:', - id: 'example-1', - defaultValue: [], - inputType: 'radio', - name: 'radio-1', - items: generateItems({ index: 0 }), - }, -}; - -export const RadioRow: Story = { - args: { - label: 'ChoiceGroup with radios:', - id: 'example-1.2', - defaultValue: [], - inputType: 'radio', - name: 'radio-1.2', - direction: 'row', - items: generateItems({ index: 1 }), - }, -}; - -export const Checkbox: Story = { - args: { - label: 'ChoiceGroup with checkboxes:', - id: 'example-2', - defaultValue: [], - inputType: 'checkbox', - name: 'check-2', - items: generateItems({ index: 2 }), - }, -}; - -export const CheckboxRow: Story = { - args: { - label: 'ChoiceGroup with checkboxes:', - id: 'example-2.1', - defaultValue: [], - inputType: 'checkbox', - name: 'check-2.1', - direction: 'row', - items: generateItems({ index: 33 }), - }, -}; - -export const RadioCardSegmented = () => {renderChoiceGroups('radio', 'segmented')}; -export const RadioCardSeparated = () => {renderChoiceGroups('radio', 'separated')}; -export const CheckboxCard = () => {renderChoiceGroups('checkbox', 'separated')}; - -export const WithError: Story = { - render: function Render(args) { - const [selectedValues, setSelectedValues] = useState([]); - const hasError = Array.isArray(selectedValues) && selectedValues.length === 0; - - const handleChange = (value: ChoiceGroupValue) => { - setSelectedValues(value); - }; - - return ( - - ); - }, - args: { - label: 'Select at least one option:', - id: 'example-with-error', - inputType: 'checkbox', - name: 'with-error', - items: [ - { - id: 'error-option-1', - label: 'Option 1', - value: 'option-1', - }, - { - id: 'error-option-2', - label: 'Option 2', - value: 'option-2', - }, - { - id: 'error-option-3', - label: 'Option 3', - value: 'option-3', - }, - ], - }, -}; - -export const WithDefaultValue: Story = { - args: { - ...Checkbox.args, - label: 'I have the second item selected by default:', - items: generateItems({ index: 13 }), - defaultValue: ['radio-primary-value-132-false-false-undefined'], - }, -}; - -export const WithIndeterminate: Story = { - args: { - ...Checkbox.args, - label: 'I have an indeterminate checkbox:', - items: generateItems({ index: 14 }), - indeterminateCheck: (state) => (state === 'all' ? 'Unselect all' : 'Select all'), - }, -}; - -export const WithExtraContent: Story = { - args: { - inputType: 'checkbox', - label: 'I have extra content after each option:', - id: 'example-extra-content', - name: 'extra-content', - items: [ - { - id: 'extra-content-1', - label: 'Basic plan', - value: 'basic', - helper: { text: 'Includes 5GB storage and basic support' }, - }, - { - id: 'extra-content-2', - label: 'Pro plan', - value: 'pro', - helper: { text: 'Includes 20GB storage and priority support' }, - }, - { - id: 'extra-content-3', - label: 'Enterprise plan', - value: 'enterprise', - helper: { text: 'Includes unlimited storage and 24/7 support' }, - }, - ], - }, -}; - -export const Responsive: Story = { - args: { - inputType: 'radio', - label: 'Choose an option:', - variant: 'card', - showIndicator: true, - layout: 'separated', - color: 'primary', - direction: 'row', - lg: { layout: 'segmented', direction: 'row', color: 'secondary' }, - items: [ - { - id: 'radio-card-1', - label: 'Option 1', - value: 'value-1', - sm: { justifyContent: 'start' }, - lg: { justifyContent: 'center', colProps: { width: 'auto', grow: 1 } }, - }, - { - id: 'radio-card-2', - label: 'Option 2', - value: 'value-2', - defaultChecked: true, - sm: { justifyContent: 'start' }, - lg: { justifyContent: 'center', colProps: { width: 'auto', grow: 1 } }, - }, - { - id: 'radio-card-3', - label: 'Option 3', - value: 'value-3', - sm: { justifyContent: 'start' }, - lg: { justifyContent: 'center', colProps: { width: 'auto', grow: 1 } }, - }, - ], - }, -}; - -export const CustomLabel: Story = { - args: { - inputType: 'checkbox', - direction: 'row', - label: ( - - Custom label - - ), - id: 'custom-label', - name: 'custom-label', - items: generateItems({ index: 16 }), - }, -}; - -export const CustomItemLabels: Story = { - args: { - inputType: 'radio', - label: 'Custom item labels:', - id: 'custom-item-labels', - name: 'custom-item-labels', - items: [ - { - id: 'radio-custom-item-labels-1', - label: ( - - Lorem ipsum dolor sit, amet - - ), - value: 'radio-custom-item-labels-1', - }, - { - id: 'radio-custom-item-labels-2', - label: ( - - - ), - value: 'radio-custom-item-labels-2', - defaultChecked: true, - }, - { - id: 'radio-custom-item-labels-3', - label: ( - - - ), - value: 'radio-custom-item-labels-3', - }, - { - id: 'radio-custom-item-labels-4', - label: 'Lorem ipsum', - value: 'radio-custom-item-labels-4', - }, - ], - }, -}; - -export const CustomItemHTMLLabels: Story = { - args: { - inputType: 'checkbox', - label: 'Custom item HTML labels:', - id: 'custom-item-html-labels', - name: 'custom-item-html-labels', - items: [ - { - id: 'checkbox-custom-item-labels-1', - label: ( -
- Lorem ipsum 1 -
- ), - value: 'checkbox-custom-item-labels-1', - }, - { - id: 'checkbox-custom-item-labels-2', - label: ( -
-
- ), - value: 'checkbox-custom-item-labels-2', - defaultChecked: true, - }, - { - id: 'checkbox-custom-item-labels-3', - label: 'Lorem ipsum 3', - value: 'checkbox-custom-item-labels-3', - }, - { - id: 'checkbox-custom-item-labels-4', - label: 'Lorem ipsum 4', - value: 'checkbox-custom-item-labels-4', - }, - ], - }, -}; diff --git a/libs/react-components/src/tedi/components/form/choice-group/choice-group.tsx b/libs/react-components/src/tedi/components/form/choice-group/choice-group.tsx deleted file mode 100644 index e2ade8d04..000000000 --- a/libs/react-components/src/tedi/components/form/choice-group/choice-group.tsx +++ /dev/null @@ -1,233 +0,0 @@ -import cn from 'classnames'; -import React, { useState } from 'react'; - -import { FeedbackText, FeedbackTextProps } from '../../../../tedi/components/form/feedback-text/feedback-text'; -import FormLabel, { FormLabelProps } from '../../../../tedi/components/form/form-label/form-label'; -import { useLabels } from '../../../../tedi/providers/label-provider'; -import { BreakpointSupport, isBreakpointBelow, useBreakpoint, useBreakpointProps } from '../../../helpers'; -import { Col, Direction, Row, RowProps } from '../../layout/grid'; -import Checkbox, { CheckboxProps } from '../checkbox/checkbox'; -import styles from './choice-group.module.scss'; -import { - ChoiceGroupIndeterminateState, - ChoiceGroupItemColor, - ChoiceGroupItemLayout, - ChoiceGroupItemType, - ChoiceGroupItemVariant, - ChoiceGroupValue, -} from './choice-group.types'; -import { ChoiceGroupContext, IChoiceGroupContext } from './choice-group-context'; -import ChoiceGroupItem, { ExtendedChoiceGroupItemProps } from './components/choice-group-item/choice-group-item'; - -interface ChoiceGroupAllProps extends Omit { - id: string; - items: ExtendedChoiceGroupItemProps[]; - name: string; - label: React.ReactNode | string; - inputType?: ChoiceGroupItemType; - helper?: FeedbackTextProps; - className?: string; - defaultValue?: ChoiceGroupValue; - value?: ChoiceGroupValue; - onChange?: (value: ChoiceGroupValue) => void; - variant?: ChoiceGroupItemVariant; - color?: ChoiceGroupItemColor; - direction?: Direction; - layout?: ChoiceGroupItemLayout; - rowProps?: RowProps; - showIndicator?: boolean; - indeterminateCheck?: boolean | string | ((state: ChoiceGroupIndeterminateState) => string); - indeterminateCheckProps?: { indented?: boolean } & Partial< - Omit - >; -} - -export interface ChoiceGroupProps extends BreakpointSupport {} - -export const ChoiceGroup = (props: ChoiceGroupProps): React.ReactElement => { - const { getLabel } = useLabels(); - const currentBreakpoint = useBreakpoint(props.defaultServerBreakpoint); - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - const { - id, - className, - label, - required, - helper, - items, - variant = 'default', - direction = variant === 'default' || isBreakpointBelow(currentBreakpoint, 'md') ? 'column' : 'row', - rowProps, - name, - inputType = 'radio', - value, - defaultValue, - onChange, - hideLabel, - indeterminateCheck, - indeterminateCheckProps = {}, - color, - layout, - showIndicator, - ...rest - } = getCurrentBreakpointProps(props); - - const { ...restIndeterminate } = indeterminateCheckProps; - const isIndented = indeterminateCheckProps?.indented ?? true; - const helperId = helper?.id ?? `${id}-helper`; - const showIndeterminate = indeterminateCheck && inputType === 'checkbox'; - - const [innerValue, setInnerValue] = useState(() => { - if (defaultValue) return defaultValue; - - if (inputType === 'radio') { - const defaultItem = items.find((item) => item.defaultChecked); - return defaultItem ? defaultItem.value : null; - } - - if (inputType === 'checkbox') { - return items.filter((item) => item.defaultChecked).map((item) => item.value); - } - - return null; - }); - - const isValueControlled = (value = props.value): value is ChoiceGroupValue => - !!onChange && typeof value !== 'undefined'; - - const currentValue: ChoiceGroupValue = isValueControlled(value) ? value : innerValue; - - const isNoneSelected = React.useMemo(() => currentValue?.length === 0, [currentValue?.length]); - const isAllSelected = React.useMemo( - () => currentValue?.length === items?.filter((item) => !item.disabled)?.length, - [currentValue?.length, items] - ); - const isSomeSelected = React.useMemo(() => !isNoneSelected && !isAllSelected, [isAllSelected, isNoneSelected]); - - const getIndeterminateLabel = React.useMemo(() => { - const state = isAllSelected ? 'all' : isNoneSelected ? 'none' : 'some'; - - return typeof indeterminateCheck === 'string' - ? indeterminateCheck - : typeof indeterminateCheck === 'function' - ? indeterminateCheck(state) - : indeterminateCheck - ? state === 'all' - ? getLabel('table.filter.remove-all') - : getLabel('table.filter.select-all') - : ''; - }, [getLabel, indeterminateCheck, isAllSelected, isNoneSelected]); - - const onChangeHandler = (value: string, checked: boolean): void => { - let nextValue = currentValue; - - if (inputType === 'checkbox' && nextValue) { - nextValue = checked - ? Array.isArray(nextValue) - ? [...nextValue, value] - : [value] - : Array.isArray(nextValue) - ? nextValue.filter((item) => item !== value) - : nextValue; - } else { - nextValue = value; - } - - if (!isValueControlled()) { - setInnerValue(Array.isArray(nextValue) ? [...nextValue] : nextValue); - } - - onChange?.(nextValue); - }; - - const ContextValue: IChoiceGroupContext = { - name, - inputType, - onChange: onChangeHandler, - currentValue: currentValue, - }; - - const FieldSetBEM = cn(styles['tedi-choice-group'], className); - const CheckGroupBEM = cn(styles['tedi-choice-group__inner'], rowProps?.className, { - [styles['tedi-choice-group__inner--indented']]: showIndeterminate && isIndented, - }); - - const onIndeterminateChangeHandler = (): void => { - const nextValue = !isAllSelected ? items?.filter((item) => !item.disabled)?.map((item) => item.value) : []; - - if (!isValueControlled()) { - setInnerValue([...nextValue]); - } - - onChange?.(nextValue); - }; - - return ( - -
- {label && typeof label === 'string' ? ( - - ) : ( - - )} - - - {items?.length ? ( - <> - {showIndeterminate && ( - - )} - - {items.map((item) => ( - - ))} - - - ) : ( -

{getLabel('table.filter.no-options')}

- )} - -
- {helper && } -
-
- ); -}; - -ChoiceGroup.Item = ChoiceGroupItem; -export default ChoiceGroup; diff --git a/libs/react-components/src/tedi/components/form/choice-group/choice-group.types.ts b/libs/react-components/src/tedi/components/form/choice-group/choice-group.types.ts deleted file mode 100644 index 37a8f98dd..000000000 --- a/libs/react-components/src/tedi/components/form/choice-group/choice-group.types.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type ChoiceGroupItemType = 'radio' | 'checkbox'; -export type ChoiceGroupItemVariant = 'default' | 'card'; -export type ChoiceGroupItemLayout = 'segmented' | 'separated'; -export type ChoiceGroupItemColor = 'primary' | 'secondary'; -export type ChoiceGroupIndeterminateState = 'none' | 'some' | 'all'; -export type ChoiceGroupValue = string | string[] | null; diff --git a/libs/react-components/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.module.scss b/libs/react-components/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.module.scss deleted file mode 100644 index c1b3f5e8a..000000000 --- a/libs/react-components/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.module.scss +++ /dev/null @@ -1,257 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-choice-group-item { - position: relative; - - &--card { - display: flex; - align-items: center; - min-height: 2.5rem; - margin-top: 0; - - @include mixins.responsive-styles(border-radius, form-checkbox-radio-card-radius); - @include mixins.responsive-styles(padding-left, form-checkbox-radio-card-checkbox-padding-x); - @include mixins.responsive-styles(padding-right, form-checkbox-radio-card-checkbox-padding-x); - @include mixins.responsive-styles(padding-top, form-checkbox-radio-card-checkbox-padding-y); - @include mixins.responsive-styles(padding-bottom, form-checkbox-radio-card-checkbox-padding-y); - - &:hover { - cursor: pointer; - } - - label, - &__feedback-text { - color: var(--general-text-secondary); - cursor: unset; - } - - .tedi-choice-group-item__input { - @include mixins.visually-hidden; - } - - &__label { - box-sizing: border-box; - display: block; - width: 100%; - cursor: pointer; - - .tedi-choice-group-item__input:focus + & { - @include mixins.focus-element; - } - } - - &.tedi-choice-group-item--disabled { - background-color: var(--form-general-background-disabled); - border-color: var(--form-general-border-disabled); - - &:hover { - cursor: unset; - } - - label, - .tedi-choice-group-item__feedback-text { - color: var(--general-text-disabled); - cursor: unset; - } - } - - &:has(:focus-visible) { - z-index: 5; - outline: 2px solid var(--form-checkbox-radio-default-border-selected); - outline-offset: 2px; - } - } -} - -.tedi-choice-group-item--card-primary { - background-color: var(--form-checkbox-radio-card-primary-inactive-background); - border: 1px solid var(--form-checkbox-radio-card-primary-inactive-border-group); - - &.tedi-choice-group-item--checkbox { - border-color: var(--filter-primary-inactive-background); - } - - &.tedi-choice-group-item--checked { - background-color: var(--form-checkbox-radio-card-primary-active-background); - border-color: var(--form-checkbox-radio-card-primary-hover-border); - - [type='checkbox']:checked + .tedi-choice-group-item__indicator { - border-color: var(--form-checkbox-radio-default-border-inverted); - } - - [type='radio']:checked + .tedi-choice-group-item__indicator { - background-color: var(--form-checkbox-radio-card-primary-active-background); - border-color: var(--form-checkbox-radio-default-border-inverted); - } - - [type='radio']:checked + .tedi-choice-group-item__indicator::after { - background-color: var(--form-checkbox-radio-default-background-selected-inverted); - border-color: var(--form-checkbox-radio-default-background-inverted); - } - - label, - .tedi-choice-group-item__label, - .tedi-choice-group-item__feedback-text { - color: var(--form-checkbox-radio-card-primary-active-text); - } - } -} - -.tedi-choice-group-item--card-secondary { - background-color: var(--form-checkbox-radio-card-secondary-inactive-background); - border: 1px solid var(--form-checkbox-radio-card-secondary-inactive-border); - - &.tedi-choice-group-item--checked { - outline: 2px solid var(--form-checkbox-radio-card-secondary-active-border); - outline-offset: -2px; - - &:not(:last-child) { - border-right: 2px solid var(--form-checkbox-radio-card-secondary-active-border); - } - - [type='radio']:checked + .tedi-choice-group-item__indicator { - border-color: var(--form-checkbox-radio-default-border-selected); - } - - label, - .tedi-choice-group-item__label, - .tedi-choice-group-item__feedback-text { - color: var(--form-checkbox-radio-card-secondary-active-text); - } - } - - &:has(:focus-visible) { - z-index: 5; - outline: 2px solid var(--form-checkbox-radio-default-border-selected); - outline-offset: 2px; - } -} - -.tedi-choice-group-item--segmented { - .tedi-choice-group-item { - border-radius: 0; - } - - &.tedi-choice-group-item--column { - &:not(:first-of-type) { - margin-top: -1px; - } - - &:not(:first-of-type) .tedi-choice-group-item--disabled { - margin-top: 1px; - border-top-color: var(--form-general-background-disabled); - } - - &:first-of-type .tedi-choice-group-item { - border-top-left-radius: var(--border-radius-default); - border-top-right-radius: var(--border-radius-default); - } - - &:last-of-type .tedi-choice-group-item { - border-bottom-right-radius: var(--border-radius-default); - border-bottom-left-radius: var(--border-radius-default); - } - } - - &.tedi-choice-group-item--row { - &:not(:first-of-type) .tedi-choice-group-item { - margin-left: -1px; - } - - &:not(:first-of-type) .tedi-choice-group-item--disabled { - margin-left: 0; - - &.tedi-choice-group-item--card-primary { - border-left-color: var(--form-checkbox-radio-card-primary-inactive-background); - } - - &.tedi-choice-group-item--card-secondary { - border-left-color: var(--form-checkbox-radio-card-secondary-inactive-background); - } - } - - &:first-of-type .tedi-choice-group-item { - border-top-left-radius: var(--border-radius-default); - border-bottom-left-radius: var(--border-radius-default); - } - - &:last-of-type .tedi-choice-group-item { - border-top-right-radius: var(--border-radius-default); - border-bottom-right-radius: var(--border-radius-default); - } - - .tedi-choice-group-item--disabled.tedi-choice-group-item--card-secondary { - background-color: var(--form-checkbox-radio-card-secondary-inactive-background); - border-color: var(--form-general-border-disabled); - } - } - - .tedi-choice-group-item--card-primary:not(.tedi-choice-group-item--disabled):hover { - background-color: var(--form-checkbox-radio-card-primary-hover-background); - border-color: var(--form-checkbox-radio-card-primary-hover-border); - - label, - .tedi-choice-group-item__label, - .tedi-choice-group-item__feedback-text { - color: var(--form-checkbox-radio-card-primary-hover-text); - } - } - - .tedi-choice-group-item--card-primary .tedi-choice-group-item--checked { - outline: 1px solid var(--form-checkbox-radio-card-primary-selected-background); - } - - .tedi-choice-group-item--card-secondary:not(.tedi-choice-group-item--disabled):hover { - background-color: var(--form-checkbox-radio-card-secondary-hover-background); - border-color: var(--form-checkbox-radio-card-secondary-hover-border); - - label, - .tedi-choice-group-item__label, - .tedi-choice-group-item__feedback-text { - color: var(--form-checkbox-radio-card-secondary-hover-text); - } - } -} - -.tedi-choice-group-item--separated { - .tedi-choice-group-item--card-primary { - border: 1px solid var(--form-checkbox-radio-card-primary-default-background); - - .tedi-choice-group-item--checked { - border: 1px solid var(--form-checkbox-radio-card-primary-selected-background); - } - - &:not(.tedi-choice-group-item--disabled):hover { - background-color: var(--form-checkbox-radio-card-primary-hover-background); - border-color: var(--form-checkbox-radio-card-primary-hover-border); - - label, - .tedi-choice-group-item__label, - .tedi-choice-group-item__feedback-text { - color: var(--form-checkbox-radio-card-primary-hover-text); - } - } - - &.tedi-choice-group-item--radio { - border-color: var(--filter-primary-inactive-background); - } - } - - .tedi-choice-group-item--card-secondary { - &:not(.tedi-choice-group-item--disabled):hover { - background-color: var(--form-checkbox-radio-card-secondary-hover-background); - outline: 2px solid var(--form-checkbox-radio-card-secondary-hover-border); - outline-offset: -2px; - - label, - .tedi-choice-group-item__label, - .tedi-choice-group-item__feedback-text { - color: var(--form-checkbox-radio-card-secondary-hover-text); - } - } - - &.tedi-choice-group-item--disabled { - background-color: var(--form-checkbox-radio-card-secondary-inactive-background); - } - } -} diff --git a/libs/react-components/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.spec.tsx b/libs/react-components/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.spec.tsx deleted file mode 100644 index 22e97fab7..000000000 --- a/libs/react-components/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.spec.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { fireEvent, render, screen } from '@testing-library/react'; - -import { ChoiceGroupItemType } from '../../choice-group.types'; -import { ChoiceGroupContext } from '../../choice-group-context'; -import ChoiceGroupItem, { ExtendedChoiceGroupItemProps } from './choice-group-item'; - -describe('ChoiceGroupItem', () => { - const defaultProps: ExtendedChoiceGroupItemProps = { - id: 'test-id', - label: 'Test Label', - value: 'test-value', - type: 'radio', - variant: 'default', - color: 'primary', - showIndicator: false, - }; - - const renderWithContext = ( - props = {}, - contextValue = { - currentValue: '', - name: 'test-name', - onChange: jest.fn(), - inputType: 'radio' as ChoiceGroupItemType, - } - ) => { - return render( - - - - ); - }; - - it('renders the radio input correctly', () => { - renderWithContext(); - const radioInput = screen.getByRole('radio', { name: 'Test Label' }); - expect(radioInput).toBeInTheDocument(); - }); - - it('renders the checkbox input correctly when type is checkbox', () => { - renderWithContext({ type: 'checkbox' }); - const checkboxInput = screen.getByRole('checkbox', { name: 'Test Label' }); - expect(checkboxInput).toBeInTheDocument(); - }); - - it('renders the card variant correctly', () => { - renderWithContext({ variant: 'card' }); - const cardInput = screen.getByRole('radio', { name: 'Test Label' }); - expect(cardInput).toBeInTheDocument(); - }); - - it('calls onChange handler when input is clicked', () => { - const onChange = jest.fn(); - renderWithContext({ onChange }, { currentValue: '', name: 'test-name', onChange, inputType: 'radio' }); - const radioInput = screen.getByRole('radio', { name: 'Test Label' }); - fireEvent.click(radioInput); - expect(onChange).toHaveBeenCalledWith('test-value', true); - }); - - it('renders with disabled state correctly', () => { - renderWithContext({ disabled: true }); - const radioInput = screen.getByRole('radio', { name: 'Test Label' }); - expect(radioInput).toBeDisabled(); - }); - - it('renders with helper text correctly', () => { - const helper = { text: 'Helper text', className: 'helper-class' }; - renderWithContext({ helper }); - const helperText = screen.getByText('Helper text'); - expect(helperText).toBeInTheDocument(); - }); - - it('renders with indicator when showIndicator is true', () => { - renderWithContext({ showIndicator: true }); - const indicator = screen.getByTestId('choice-group-item-indicator'); - expect(indicator).toBeInTheDocument(); - }); - - it('calls onChange handler when card input is clicked', () => { - const onChange = jest.fn(); - renderWithContext( - { variant: 'card', onChange }, - { currentValue: '', name: 'test-name', onChange, inputType: 'radio' } - ); - const cardInput = screen.getByRole('radio', { name: 'Test Label' }); - fireEvent.click(cardInput); - expect(onChange).toHaveBeenCalledWith('test-value', true); - }); - - it('renders the card variant with disabled state correctly', () => { - renderWithContext({ variant: 'card', disabled: true }); - const cardInput = screen.getByRole('radio', { name: 'Test Label' }); - expect(cardInput).toBeDisabled(); - }); - - it('renders the card variant with helper text correctly', () => { - const helper = { text: 'Helper text', className: 'helper-class' }; - renderWithContext({ variant: 'card', helper }); - const helperText = screen.getByText('Helper text'); - expect(helperText).toBeInTheDocument(); - }); -}); diff --git a/libs/react-components/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.tsx b/libs/react-components/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.tsx deleted file mode 100644 index 4f919120b..000000000 --- a/libs/react-components/src/tedi/components/form/choice-group/components/choice-group-item/choice-group-item.tsx +++ /dev/null @@ -1,145 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { BreakpointSupport, useBreakpointProps } from '../../../../../helpers'; -import { Col, ColProps, Direction } from '../../../../layout/grid'; -import Checkbox from '../../../checkbox/checkbox'; -import { ChoiceInputProps } from '../../../choice-input.types'; -import FeedbackText from '../../../feedback-text/feedback-text'; -import Radio from '../../../radio/radio'; -import { - ChoiceGroupItemColor, - ChoiceGroupItemLayout, - ChoiceGroupItemType, - ChoiceGroupItemVariant, -} from '../../choice-group.types'; -import { ChoiceGroupContext } from '../../choice-group-context'; -import styles from './choice-group-item.module.scss'; - -interface ChoiceGroupItemBreakpointProps extends Omit { - direction?: Direction; - showIndicator?: boolean; - justifyContent?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'; - className?: string; - type?: ChoiceGroupItemType; - variant?: ChoiceGroupItemVariant; - color?: ChoiceGroupItemColor; - colProps?: ColProps; - layout?: ChoiceGroupItemLayout; -} - -export interface ExtendedChoiceGroupItemProps extends BreakpointSupport { - id: string; - label: string | React.ReactNode; - value: string; -} - -export const ChoiceGroupItem = (props: ExtendedChoiceGroupItemProps): React.ReactElement => { - const { getCurrentBreakpointProps } = useBreakpointProps(props.defaultServerBreakpoint); - const { - id, - label, - value, - className, - direction, - disabled, - colProps = direction === 'column' ? { width: 12 } : { width: 'auto' }, - onChange: onChangeItem, - hideLabel, - helper, - tooltip, - type = 'radio', - variant = 'default', - color = 'primary', - layout, - showIndicator, - justifyContent = 'start', - } = getCurrentBreakpointProps(props); - - const { currentValue, name, onChange, inputType } = React.useContext(ChoiceGroupContext); - const isChecked = Array.isArray(currentValue) ? currentValue.includes(value) : value === currentValue; - const defaultChecked = currentValue === undefined ? props.defaultChecked : isChecked; - - const onChangeHandler = (value: string, checked: boolean): void => { - onChange?.(value, checked); - onChangeItem?.(value, checked); - }; - - const ColumnBEM = cn( - styles[`tedi-choice-group-item--${layout === 'separated' ? 'separated' : 'segmented'}`], - direction && styles[`tedi-choice-group-item--${direction}`] - ); - - const ChoiceGroupItemBEM = cn( - styles['tedi-choice-group-item'], - styles[`tedi-choice-group-item--${variant}`], - styles[`tedi-choice-group-item--${variant}-${color}`], - showIndicator && styles['tedi-choice-group-item--indicator'], - type && styles[`tedi-choice-group-item--${type}`], - { [styles['tedi-choice-group-item--disabled']]: disabled }, - { [styles['tedi-choice-group-item--checked']]: isChecked }, - { [`justify-content-${justifyContent}`]: justifyContent } - ); - - const InputComponent = type === 'radio' ? Radio : Checkbox; - - const handleClick = (e: React.MouseEvent) => { - if ((e.target as HTMLElement).tagName === 'LABEL') return; - if (!disabled && variant === 'card') { - onChangeHandler(value, !isChecked); - } - }; - - return ( - -
- {variant === 'default' || showIndicator ? ( - - ) : ( - <> - onChangeHandler(value, e.target.checked)} - className={styles['tedi-choice-group-item__input']} - role={type === 'radio' ? 'radio' : undefined} - aria-checked={isChecked} - /> - - - )} -
- - ); -}; - -export default ChoiceGroupItem; diff --git a/libs/react-components/src/tedi/components/form/choice-group/index.ts b/libs/react-components/src/tedi/components/form/choice-group/index.ts deleted file mode 100644 index 7cd93cd62..000000000 --- a/libs/react-components/src/tedi/components/form/choice-group/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './choice-group'; -export * from './choice-group-context'; -export * from './choice-group.types'; -export * from './components/choice-group-item/choice-group-item'; diff --git a/libs/react-components/src/tedi/components/form/choice-input.types.ts b/libs/react-components/src/tedi/components/form/choice-input.types.ts deleted file mode 100644 index 74106bbaa..000000000 --- a/libs/react-components/src/tedi/components/form/choice-input.types.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { FeedbackTextProps } from './feedback-text/feedback-text'; - -export interface ChoiceInputProps { - /** - * ID property - */ - id: string; - /** - * Label text - */ - label: string | React.ReactNode; - /** - * Additional classes. - */ - className?: string; - /** - * Value property - */ - value: string; - /** - * name of the input - */ - name: string; - /** - * is the label hidden - */ - hideLabel?: boolean; - /** - * If the option is disabled - */ - disabled?: boolean; - /** - * onChange handler - */ - onChange?: (value: string, checked: boolean) => void; - /** - * Helper text displayed below the input. - */ - helper?: FeedbackTextProps; - /** - * If the check is controlled from outside the components - */ - checked?: boolean; - /** - * If the check is checked by default - */ - defaultChecked?: boolean; - /** - * If the item should be in hover state - */ - hover?: boolean; - /** - * Provide content for tooltip. - */ - tooltip?: string; - /** - * Input size - */ - size?: 'default' | 'large'; - /** - * Whether the input is marked as invalid. - */ - invalid?: boolean; -} diff --git a/libs/react-components/src/tedi/components/form/feedback-text/feedback-text.module.scss b/libs/react-components/src/tedi/components/form/feedback-text/feedback-text.module.scss deleted file mode 100644 index 3f762d04b..000000000 --- a/libs/react-components/src/tedi/components/form/feedback-text/feedback-text.module.scss +++ /dev/null @@ -1,26 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-feedback-text { - color: var(--general-text-tertiary); - - @include mixins.responsive-styles(font-size, body-small-regular-size, $exclude: tablet); - @include mixins.print-grayscale; - - &--valid { - color: var(--general-status-success-text); - } - - &--error { - color: var(--general-status-danger-text); - } - - &--left { - flex-grow: 1; - text-align: left; - } - - &--right { - flex-grow: 0; - text-align: right; - } -} diff --git a/libs/react-components/src/tedi/components/form/feedback-text/feedback-text.spec.tsx b/libs/react-components/src/tedi/components/form/feedback-text/feedback-text.spec.tsx deleted file mode 100644 index 7cbeb8fd9..000000000 --- a/libs/react-components/src/tedi/components/form/feedback-text/feedback-text.spec.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { render } from '@testing-library/react'; - -import { FeedbackText, FeedbackTextProps } from './feedback-text'; - -import '@testing-library/jest-dom'; - -describe('FeedbackText component', () => { - const defaultProps: FeedbackTextProps = { - text: 'Helper text', - }; - - it('renders with default props', () => { - const { container } = render(); - const helperElement = container.querySelector('div[data-name="feedback-text"]'); - expect(helperElement).toBeInTheDocument(); - expect(helperElement).toHaveClass('tedi-feedback-text'); - expect(helperElement).toHaveClass('tedi-feedback-text--hint'); - expect(helperElement).toHaveClass('tedi-feedback-text--left'); - expect(helperElement).toHaveTextContent('Helper text'); - }); - - it('renders with custom id', () => { - const { container } = render(); - const helperElement = container.querySelector('div[data-name="feedback-text"]'); - expect(helperElement).toBeInTheDocument(); - expect(helperElement).toHaveAttribute('id', 'custom-id'); - }); - - it('renders with additional className', () => { - const { container } = render(); - const helperElement = container.querySelector('div[data-name="feedback-text"]'); - expect(helperElement).toBeInTheDocument(); - expect(helperElement).toHaveClass('custom-class'); - }); - - it('applies the "valid" type style and role="alert"', () => { - const { container } = render(); - const helperElement = container.querySelector('div[data-name="feedback-text"]'); - expect(helperElement).toBeInTheDocument(); - expect(helperElement).toHaveClass('tedi-feedback-text--valid'); - expect(helperElement).toHaveAttribute('role', 'alert'); - }); - - it('applies the "error" type style and role="alert"', () => { - const { container } = render(); - const helperElement = container.querySelector('div[data-name="feedback-text"]'); - expect(helperElement).toBeInTheDocument(); - expect(helperElement).toHaveClass('tedi-feedback-text--error'); - expect(helperElement).toHaveAttribute('role', 'alert'); - }); - - it('renders with "help" type without role attribute', () => { - const { container } = render(); - const helperElement = container.querySelector('div[data-name="feedback-text"]'); - expect(helperElement).toBeInTheDocument(); - expect(helperElement).toHaveClass('tedi-feedback-text--hint'); - expect(helperElement).not.toHaveAttribute('role'); - }); - - it('renders with the "left" position by default', () => { - const { container } = render(); - const helperElement = container.querySelector('div[data-name="feedback-text"]'); - expect(helperElement).toBeInTheDocument(); - expect(helperElement).toHaveClass('tedi-feedback-text--left'); - }); - - it('renders with the "right" position when specified', () => { - const { container } = render(); - const helperElement = container.querySelector('div[data-name="feedback-text"]'); - expect(helperElement).toBeInTheDocument(); - expect(helperElement).toHaveClass('tedi-feedback-text--right'); - }); -}); diff --git a/libs/react-components/src/tedi/components/form/feedback-text/feedback-text.stories.tsx b/libs/react-components/src/tedi/components/form/feedback-text/feedback-text.stories.tsx deleted file mode 100644 index d3d19834e..000000000 --- a/libs/react-components/src/tedi/components/form/feedback-text/feedback-text.stories.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { Meta, StoryObj } from '@storybook/react'; - -import { FeedbackText } from './feedback-text'; - -/** - * Zeroheight ↗ - */ - -const meta: Meta = { - component: FeedbackText, - title: 'TEDI-Ready/Components/Form/FeedbackText', - parameters: { - status: { - type: ['devComponent'], - }, - }, -}; - -export default meta; -type Story = StoryObj; - -export const Helper: Story = { - args: { - text: 'I am a hint text', - }, -}; - -export const Error: Story = { - args: { - text: 'I am an error text', - type: 'error', - }, -}; - -export const Valid: Story = { - args: { - text: 'I am a valid text', - type: 'valid', - }, -}; - -export const PositionLeft: Story = { - args: { - text: 'I am a hint text', - position: 'left', - }, -}; - -export const PositionRight: Story = { - args: { - text: 'I am a valid text', - type: 'valid', - position: 'right', - }, -}; diff --git a/libs/react-components/src/tedi/components/form/feedback-text/feedback-text.tsx b/libs/react-components/src/tedi/components/form/feedback-text/feedback-text.tsx deleted file mode 100644 index bc9e98f8f..000000000 --- a/libs/react-components/src/tedi/components/form/feedback-text/feedback-text.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import cn from 'classnames'; -import { AriaRole } from 'react'; - -import styles from './feedback-text.module.scss'; - -export type FeedbackTextType = 'hint' | 'valid' | 'error'; -export type FeedbackTextPosition = 'left' | 'right'; - -export interface FeedbackTextProps { - /** - * Helper text - */ - text: string; - /** - * ID to reference the helper from aria-describedby attributes. - * If omitted, then the id might be set through a parent component. - */ - id?: string; - /** - * Additional custom class. - */ - className?: string; - /** - * Type of form-helper. - * @default hint - */ - type?: FeedbackTextType; - /** - * Position of the helper. - * @default left - */ - position?: FeedbackTextPosition; -} - -export const FeedbackText = (props: FeedbackTextProps): JSX.Element => { - const { text, id, className, type = 'hint', position = 'left', ...rest } = props; - - const role: AriaRole | undefined = type === 'valid' || type === 'error' ? 'alert' : undefined; - const ariaLive = type === 'error' || type === 'valid' ? 'assertive' : 'polite'; - - return ( -
- {text} -
- ); -}; - -export default FeedbackText; diff --git a/libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.module.scss b/libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.module.scss deleted file mode 100644 index 9b071793c..000000000 --- a/libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.module.scss +++ /dev/null @@ -1,79 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-file-dropzone { - text-align: center; - cursor: pointer; - background-color: var(--file-dropzone-background-default); - border: 2px dotted var(--file-dropzone-border-default); - transition: border-color 0.2s ease-in-out, background-color 0.2s ease-in-out; - - @include mixins.responsive-styles(border-radius, form-field-radius); - @include mixins.responsive-styles(padding-left, file-dropzone-padding-x); - @include mixins.responsive-styles(padding-right, file-dropzone-padding-x); - @include mixins.responsive-styles(padding-top, file-dropzone-padding-y); - @include mixins.responsive-styles(padding-bottom, file-dropzone-padding-y); - @include mixins.responsive-styles(margin-bottom, layout-grid-gutters-04); - - &:hover { - background-color: var(--file-dropzone-background-hover); - border-color: var(--file-dropzone-border-hover); - } - - .tedi-file-dropzone__label-wrapper { - display: flex; - justify-content: center; - - .tedi-file-dropzone__label { - color: var(--file-dropzone-text-default); - - &:hover { - cursor: pointer; - } - } - } - - &--disabled { - pointer-events: none; - cursor: not-allowed; - background-color: var(--file-dropzone-background-disabled); - border-color: var(--file-dropzone-border-disabled); - - .tedi-file-dropzone__label-wrapper .tedi-file-dropzone__label { - color: var(--general-text-disabled); - } - } - - &--invalid { - border-color: var(--form-general-feedback-error-border); - } - - &--valid { - border-color: var(--form-general-feedback-success-border); - } - - &--drop-over { - color: var(--file-dropzone-text-drop-over); - background-color: var(--file-dropzone-background-drop-over); - border-color: var(--file-dropzone-border-drop-over); - } - - &:focus-visible { - outline: 2px solid var(--file-dropzone-border-hover); - outline-offset: 1px; - } -} - -.tedi-file-dropzone__input { - display: none; -} - -.tedi-file-dropzone__file-list { - width: 100%; - list-style: none; - - @include mixins.responsive-styles(margin-top, layout-grid-gutters-04); -} - -.tedi-file-dropzone__file-name { - overflow-wrap: anywhere; -} diff --git a/libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.spec.tsx b/libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.spec.tsx deleted file mode 100644 index 57176cd4c..000000000 --- a/libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.spec.tsx +++ /dev/null @@ -1,144 +0,0 @@ -import { fireEvent, render, screen } from '@testing-library/react'; -import React from 'react'; -import { useDropzone } from 'react-dropzone'; - -import { useFileUpload } from '../../../helpers/hooks/use-file-upload'; -import { useLabels } from '../../../providers/label-provider'; -import FileDropzone from './file-dropzone'; - -jest.mock('../../../helpers/hooks/use-file-upload'); -jest.mock('../../../providers/label-provider'); - -jest.mock('react-dropzone', () => ({ - useDropzone: jest.fn(), -})); - -describe('FileDropzone', () => { - const mockUseFileUpload = useFileUpload as jest.Mock; - const mockUseLabels = useLabels as jest.Mock; - const mockUseDropzone = useDropzone as jest.Mock; - - beforeEach(() => { - mockUseFileUpload.mockReturnValue({ - innerFiles: [], - uploadErrorHelper: undefined, - onFileChange: jest.fn(), - onFileRemove: jest.fn(), - handleClear: jest.fn(), - fileInputRef: { current: null }, - }); - - mockUseLabels.mockReturnValue({ - getLabel: (key: string) => key, - }); - - mockUseDropzone.mockImplementation((props) => { - return { - getRootProps: jest.fn(() => ({ - className: 'tedi-file-dropzone', - })), - getInputProps: jest.fn(() => ({ - type: 'file', - })), - isDragActive: false, - ...props, - }; - }); - }); - - afterEach(() => { - jest.clearAllMocks(); - }); - - it('renders the dropzone with the correct label', () => { - render(); - expect(screen.getByText('Upload File')).toBeInTheDocument(); - }); - - it('renders the dropzone with a helper text', () => { - render(); - expect(screen.getByText('Helper text')).toBeInTheDocument(); - }); - - it('renders the dropzone with an error message', () => { - mockUseFileUpload.mockReturnValue({ - innerFiles: [], - uploadErrorHelper: { type: 'error', text: 'Error message' }, - onFileChange: jest.fn(), - onFileRemove: jest.fn(), - handleClear: jest.fn(), - fileInputRef: { current: null }, - }); - - render(); - expect(screen.getByText('Error message')).toBeInTheDocument(); - }); - - it('configures useDropzone with correct props and handles file drop', () => { - const onFileChange = jest.fn(); - mockUseFileUpload.mockReturnValue({ - innerFiles: [], - uploadErrorHelper: undefined, - onFileChange, - onFileRemove: jest.fn(), - handleClear: jest.fn(), - fileInputRef: { current: null }, - }); - - render(); - - const useDropzoneMock = useDropzone as jest.Mock; - const dropzoneProps = useDropzoneMock.mock.calls[0][0]; - - expect(dropzoneProps.accept).toEqual({ 'application/*': ['image/png'] }); - expect(dropzoneProps.multiple).toBe(true); - expect(dropzoneProps.maxSize).toBe(5 * 1024 ** 2); - - const file = new File(['file content'], 'file.png', { type: 'image/png' }); - dropzoneProps.onDrop([file]); - - expect(onFileChange).toHaveBeenCalledWith({ - target: { files: [file] }, - } as unknown as React.ChangeEvent); - }); - - it('renders uploaded files', () => { - const file = { id: '1', name: 'file.png', isValid: true }; - mockUseFileUpload.mockReturnValue({ - innerFiles: [file], - uploadErrorHelper: undefined, - onFileChange: jest.fn(), - onFileRemove: jest.fn(), - handleClear: jest.fn(), - fileInputRef: { current: null }, - }); - - render(); - expect(screen.getByText('file.png')).toBeInTheDocument(); - }); - - it('calls onFileRemove when a file is removed', () => { - const onFileRemove = jest.fn(); - const file = { id: '1', name: 'file.png', isValid: true }; - mockUseFileUpload.mockReturnValue({ - innerFiles: [file], - uploadErrorHelper: undefined, - onFileChange: jest.fn(), - onFileRemove, - handleClear: jest.fn(), - fileInputRef: { current: null }, - }); - - render(); - const removeButton = screen.getByRole('button', { name: /clear/i }); - fireEvent.click(removeButton); - - expect(onFileRemove).toHaveBeenCalledWith(file); - }); - - it('disables the dropzone when disabled prop is true', () => { - render(); - const dropzone = screen.getByText('Upload File').closest('.tedi-file-dropzone'); - expect(dropzone).toHaveClass('tedi-file-dropzone--disabled'); - }); -}); diff --git a/libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.stories.tsx b/libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.stories.tsx deleted file mode 100644 index 3849c37eb..000000000 --- a/libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.stories.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Col, Row } from '../../layout/grid'; -import { FileDropzone, FileDropzoneProps } from './file-dropzone'; - -/** - * Figma ↗
- * Zeroheight ↗ - */ - -const meta: Meta = { - component: FileDropzone, - title: 'TEDI-Ready/Components/Form/FileDropzone', - args: { - name: 'file-dropzone', - }, -}; - -export default meta; -type Story = StoryObj; - -export const Default: Story = {}; - -const Template: StoryFn = (args) => ( - - - - - -); - -export const WithHint: Story = { - render: Template, - args: { - name: 'file', - helper: { - text: 'JPG, PNG, PDF with size 1MB.', - }, - }, -}; - -export const Disabled: Story = { - render: Template, - args: { - id: 'file-dropzone-disabled', - name: 'file-loading', - label: 'Drop files here', - disabled: true, - }, -}; - -export const Multiple: Story = { - render: Template, - args: { - id: 'file-dropzone-multiple', - name: 'file-multiple', - multiple: true, - defaultFiles: [{ name: 'report.pdf' }, { name: 'report_1.pdf' }, { name: 'report_2.pdf' }], - helper: { - text: 'JPG, PNG, PDF with size 1MB.', - }, - }, -}; - -export const ValidationFailed: Story = { - args: { - id: 'file-dropzone-validation-failed', - name: 'file-validation-failed', - maxSize: 1, - accept: '.pdf,.txt', - multiple: true, - validateIndividually: true, - defaultFiles: [{ name: 'invalid_file.pdf', isValid: false }], - }, - render: (args) => ( - - - - - - ), -}; - -export const MultipleWithIndividualValidation: Story = { - args: { - id: 'file-dropzone-multiple-individual-validation', - name: 'file-multiple-individual-validation', - multiple: true, - maxSize: 0.01, - accept: '.pdf,.txt', - validateIndividually: true, - defaultFiles: [ - { name: 'taotlus_scan_lk_1.pdf' }, - { name: 'taotlus_scan_lk_2.pdf' }, - { name: 'taotlus_scan_lk_3.pdf' }, - { name: 'taotlus_scan_lk_4.pdf' }, - { name: 'taotlus_scan_lk_5.pdf', isValid: false }, - ], - helper: { - text: 'Only .pdf and .txt files under 1KB are allowed.', - type: 'error', - }, - }, - render: (args) => ( - - - { - console.log('Uploaded files:', files); - }} - /> - - - ), -}; diff --git a/libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.tsx b/libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.tsx deleted file mode 100644 index e0631cc19..000000000 --- a/libs/react-components/src/tedi/components/form/file-dropzone/file-dropzone.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; -import { useDropzone } from 'react-dropzone'; - -import { FileUploadFile, useFileUpload, UseFileUploadProps } from '../../../helpers/hooks/use-file-upload'; -import { useLabels } from '../../../providers/label-provider'; -import { Icon } from '../../base/icon/icon'; -import ClosingButton from '../../buttons/closing-button/closing-button'; -import { Card, CardContent } from '../../cards/card'; -import { Col, Row } from '../../layout/grid'; -import { VerticalSpacing } from '../../layout/vertical-spacing'; -import FeedbackText, { FeedbackTextProps } from '../feedback-text/feedback-text'; -import FormLabel, { FormLabelProps } from '../form-label/form-label'; -import styles from './file-dropzone.module.scss'; - -export interface FileDropzoneProps extends Omit, UseFileUploadProps { - /* - * Additional CSS class names to apply to the dropzone for custom styling - */ - className?: string; - /* - * The name attribute for the file input, used for form submission and identifying the field. - */ - name: string; - /* - * The text label displayed for the file dropzone, providing context for users. - */ - label: string; - /* - * Provides helper text or feedback (such as an error or instruction message) to guide the user. - */ - helper?: FeedbackTextProps; - /* - * Disables the file dropzone, preventing user interaction. - */ - disabled?: boolean; -} - -export const FileDropzone = (props: FileDropzoneProps): JSX.Element => { - const { getLabel } = useLabels(); - const { label = getLabel('file-dropzone.label'), className, disabled = false, helper, id } = props; - const { innerFiles, uploadErrorHelper, onFileChange, onFileRemove } = useFileUpload(props); - - const { getRootProps, getInputProps, isDragActive } = useDropzone({ - accept: props.accept ? { 'application/*': [props.accept] } : undefined, - multiple: props.multiple, - maxSize: props.maxSize ? props.maxSize * 1024 ** 2 : undefined, - onDrop: (acceptedFiles) => { - const event = { - target: { files: acceptedFiles }, - } as unknown as React.ChangeEvent; - onFileChange(event); - }, - }); - - const fileDropzoneBEM = cn( - styles['tedi-file-dropzone'], - { [styles['tedi-file-dropzone--disabled']]: disabled }, - { [styles['tedi-file-dropzone--invalid']]: (uploadErrorHelper?.type || helper?.type) === 'error' }, - { [styles['tedi-file-dropzone--valid']]: (uploadErrorHelper?.type || helper?.type) === 'valid' }, - { [styles['tedi-file-dropzone--drop-over']]: isDragActive }, - className - ); - const helperId = helper ? helper?.id ?? `${id}-helper` : undefined; - - return ( - <> -
- -
- - -
-
- {helper ? ( - - ) : uploadErrorHelper ? ( - - ) : null} - {!!innerFiles.length && ( - - {innerFiles.map((file: FileUploadFile) => ( - - - - - {file.name}{' '} - {file.isValid === false && } - - - onFileRemove(file)} /> - - - - - ))} - - )} - - ); -}; - -export default FileDropzone; diff --git a/libs/react-components/src/tedi/components/form/file-upload/examples/multiple-handled.tsx b/libs/react-components/src/tedi/components/form/file-upload/examples/multiple-handled.tsx deleted file mode 100644 index 2430e854f..000000000 --- a/libs/react-components/src/tedi/components/form/file-upload/examples/multiple-handled.tsx +++ /dev/null @@ -1,12 +0,0 @@ -/* istanbul ignore file */ -import { StoryFn } from '@storybook/react'; -import React from 'react'; - -import { FileUploadFile } from '../../../../helpers/hooks/use-file-upload'; -import FileUpload from '../file-upload'; - -export const MultipleHandledTemplate: StoryFn = (args) => { - const [files, setFiles] = React.useState([{ name: 'avaldus.pdf' }]); - - return ; -}; diff --git a/libs/react-components/src/tedi/components/form/file-upload/file-upload.module.scss b/libs/react-components/src/tedi/components/form/file-upload/file-upload.module.scss deleted file mode 100644 index a855c50e7..000000000 --- a/libs/react-components/src/tedi/components/form/file-upload/file-upload.module.scss +++ /dev/null @@ -1,99 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; -@use '@tehik-ee/tedi-core/bootstrap-utility/breakpoints'; - -$container-height: 2.5rem; -$container-height-small: 2rem; - -.tedi-file-upload { - display: flex; - align-items: center; - - & input[type='file'] { - display: none; - } -} - -.tedi-file-upload__items { - display: flex; - flex-wrap: wrap; - margin: 0; - - @include mixins.responsive-styles(gap, form-field-inner-spacing); - @include mixins.responsive-styles(padding-top, form-field-inner-spacing); - @include mixins.responsive-styles(padding-bottom, form-field-inner-spacing); - - & li { - word-break: break-word; - overflow-wrap: break-word; - list-style-type: none; - } -} - -.tedi-file-upload__container { - display: flex; - flex-direction: column; - justify-content: center; - background-color: var(--form-input-background-default); - border: 1px solid var(--form-input-border-default); - - @include mixins.responsive-styles(border-radius, form-field-radius); - - &--default { - min-height: $container-height; - - @include mixins.responsive-styles(padding-left, form-field-padding-x-md-default); - @include mixins.responsive-styles(padding-right, form-field-padding-x-md-default); - - .tedi-file-upload__button { - height: $container-height; - } - } - - &--small { - min-height: $container-height-small; - - @include mixins.responsive-styles(padding-left, form-field-padding-x-md-default); - @include mixins.responsive-styles(padding-right, form-field-padding-x-md-default); - @include mixins.responsive-styles(padding-top, form-field-padding-y-xxs); - @include mixins.responsive-styles(padding-bottom, form-field-padding-y-xxs); - - .tedi-file-upload__button { - height: $container-height-small; - - @include mixins.responsive-styles(padding-left, form-field-padding-x-md-default); - } - } - - .tedi-file-upload__button { - padding-right: 0; - padding-left: 0; - - @include breakpoints.media-breakpoint-down(md) { - width: 100%; - margin: 0 auto; - } - } - - &.tedi-file-upload--disabled { - color: var(--form-input-text-disabled); - pointer-events: none; - cursor: initial; - background-color: var(--form-input-background-disabled); - border-color: var(--form-input-border-disabled); - } - - &.tedi-file-upload--error { - border-color: var(--form-general-feedback-error-border); - } - - &.tedi-file-upload--valid { - border-color: var(--form-general-feedback-success-border); - } -} - -.tedi-file-upload__content { - display: flex; - flex-direction: column; - - @include mixins.responsive-styles(gap, form-field-inner-spacing); -} diff --git a/libs/react-components/src/tedi/components/form/file-upload/file-upload.spec.tsx b/libs/react-components/src/tedi/components/form/file-upload/file-upload.spec.tsx deleted file mode 100644 index 96c810c0f..000000000 --- a/libs/react-components/src/tedi/components/form/file-upload/file-upload.spec.tsx +++ /dev/null @@ -1,354 +0,0 @@ -import { fireEvent, render, screen, waitFor } from '@testing-library/react'; -import React from 'react'; - -import { FileUploadFile } from '../../../helpers'; -import FileUpload, { FileUploadProps } from './file-upload'; - -import '@testing-library/jest-dom'; - -jest.mock('../../../providers/label-provider', () => ({ - useLabels: () => ({ getLabel: jest.fn((key) => key) }), -})); - -describe('FileUpload component', () => { - const defaultProps: FileUploadProps = { - id: 'test-file-upload', - name: 'file-upload', - onChange: jest.fn(), - onDelete: jest.fn(), - accept: '.jpg,.png', - multiple: true, - maxSize: 5, - label: 'Upload files', - }; - - afterEach(() => { - jest.clearAllMocks(); - }); - - it('renders the FileUpload component', () => { - render(); - const input = screen.getByLabelText(/Upload files/i); - expect(input).toBeInTheDocument(); - }); - - it('allows file selection', () => { - render(); - const input = screen.getByLabelText(/Upload files/i); - const file = new File(['dummy content'], 'test.jpg', { type: 'image/jpeg' }); - fireEvent.change(input, { target: { files: [file] } }); - expect(defaultProps.onChange).toHaveBeenCalledWith([expect.objectContaining({ name: 'test.jpg' })]); - }); - - it('rejects files with invalid extensions', async () => { - render(); - const input = screen.getByLabelText(/Upload files/i); - const file = new File(['dummy content'], 'test.txt', { type: 'text/plain' }); - fireEvent.change(input, { target: { files: [file] } }); - await waitFor(() => { - expect(defaultProps.onChange).not.toHaveBeenCalled(); - expect(screen.getByText(/file-upload.extension-rejected/i)).toBeInTheDocument(); - }); - }); - - it('rejects files exceeding max size', () => { - render(); - const input = screen.getByLabelText(/Upload files/i); - const file = new File(['a'.repeat(6 * 1024 * 1024)], 'large.jpg', { type: 'image/jpeg' }); - Object.defineProperty(file, 'size', { value: 6 * 1024 * 1024 }); - fireEvent.change(input, { target: { files: [file] } }); - expect(defaultProps.onChange).not.toHaveBeenCalled(); - expect(screen.getByText(/file-upload.size-rejected/i)).toBeInTheDocument(); - }); - - it('does not render close button when there is only one file', () => { - render(); - expect(screen.queryByRole('button', { name: /close/i })).not.toBeInTheDocument(); - }); - - it('renders file list but no input when readOnly is true', () => { - render(); - expect(screen.getByText('test.jpg')).toBeInTheDocument(); - expect(screen.queryByRole('button', { name: /Upload files/i })).not.toBeInTheDocument(); - expect(screen.queryByLabelText(/Upload files/i)).not.toBeInTheDocument(); - }); - - it('clears all files when clear button is clicked', () => { - render(); - const clearButton = screen.getByRole('button', { name: /clear/i }); - fireEvent.click(clearButton); - expect(defaultProps.onChange).toHaveBeenCalledWith([]); - }); - - it('renders the file list correctly', () => { - const files = [ - { name: 'test1.jpg', id: '1' }, - { name: 'test2.png', id: '2' }, - ]; - render(); - files.forEach((file) => { - expect(screen.getByText(file.name)).toBeInTheDocument(); - }); - }); - - it('should return helper text when accept and maxSize are provided', () => { - const props = { ...defaultProps, accept: '.jpg,.png', maxSize: 5 }; - render(); - expect(screen.getByText(/file-upload.accept .jpg, .png/i)).toBeInTheDocument(); - expect(screen.getByText(/file-upload.max-size 5MB/i)).toBeInTheDocument(); - }); - - it('should not return helper text when accept and maxSize are not provided', () => { - const props = { ...defaultProps, accept: undefined, maxSize: undefined }; - render(); - expect(screen.queryByText(/file-upload.accept/i)).not.toBeInTheDocument(); - expect(screen.queryByText(/file-upload.max-size/i)).not.toBeInTheDocument(); - }); - - it('should display error message for files with invalid extensions', () => { - render(); - const input = screen.getByLabelText(/Upload files/i); - const file = new File(['dummy content'], 'test.txt', { type: 'text/plain' }); - fireEvent.change(input, { target: { files: [file] } }); - expect(screen.getByText(/file-upload.extension-rejected/i)).toBeInTheDocument(); - }); - - it('should display error message for files exceeding max size', () => { - render(); - const input = screen.getByLabelText(/Upload files/i); - const file = new File(['a'.repeat(6 * 1024 * 1024)], 'large.jpg', { type: 'image/jpeg' }); - Object.defineProperty(file, 'size', { value: 6 * 1024 * 1024 }); - fireEvent.change(input, { target: { files: [file] } }); - expect(screen.getByText(/file-upload.size-rejected/i)).toBeInTheDocument(); - }); - - it('handles empty accept prop', () => { - const { container } = render(); - const fileInput = container.querySelector('input[type="file"]'); - expect((fileInput as HTMLInputElement)?.accept).toBe(''); - - const file = new File(['test'], 'test.pdf', { type: 'application/pdf' }); - fireEvent.change(fileInput!, { - target: { files: [file] }, - }); - expect(defaultProps.onChange).toHaveBeenCalled(); - }); - - it('handles controlled and uncontrolled state transitions', () => { - const files = [{ name: 'test.pdf', id: '1' }]; - render(); - expect(screen.getByText('test.pdf')).toBeInTheDocument(); - - render(); - const input = screen.getByLabelText(/Upload files/i); - const file = new File(['test'], 'test.pdf', { type: 'application/pdf' }); - fireEvent.change(input, { target: { files: [file] } }); - expect(screen.getByText('test.pdf')).toBeInTheDocument(); - }); - - it('handles multiple error conditions', () => { - render(); - const input = screen.getByLabelText(/Upload files/i); - - const invalidFiles = [ - new File(['test'], 'test.txt', { type: 'text/plain' }), - new File(['a'.repeat(6 * 1024 * 1024)], 'large.pdf', { type: 'application/pdf' }), - ]; - - fireEvent.change(input, { target: { files: invalidFiles } }); - expect(screen.getByText(/file-upload.extension-rejected/i)).toBeInTheDocument(); - expect(screen.getByText(/file-upload.size-rejected/i)).toBeInTheDocument(); - }); - - it('calls handleClear when clicked', () => { - const handleClear = jest.fn(); - render( - - ); - - const clearButton = screen.getByRole('button', { - name: /clear/i, - }); - - expect(clearButton).toBeInTheDocument(); - - fireEvent.click(clearButton); - expect(handleClear).toHaveBeenCalled(); - }); - - it('should use files prop when provided and onChange is defined', () => { - const files = [{ name: 'test.jpg', id: '1' }]; - render(); - expect(screen.getByText('test.jpg')).toBeInTheDocument(); - }); - - it('should use innerFiles when files prop is not provided', () => { - render(); - expect(screen.getByText('test.jpg')).toBeInTheDocument(); - }); - - it('should add valid files individually when validateIndividually is true', () => { - render(); - const input = screen.getByLabelText(/Upload files/i); - const validFile = new File(['dummy content'], 'test.jpg', { type: 'image/jpeg' }); - const invalidFile = new File(['dummy content'], 'test.txt', { type: 'text/plain' }); - fireEvent.change(input, { target: { files: [validFile, invalidFile] } }); - expect(defaultProps.onChange).toHaveBeenCalledWith([ - expect.objectContaining({ - name: 'test.jpg', - isValid: true, - isLoading: false, - }), - expect.objectContaining({ - name: 'test.txt', - isValid: false, - isLoading: false, - }), - ]); - }); - - it('should update innerFiles when files prop is not provided', () => { - render(); - const removeButton = screen.getByRole('button', { name: /clear/i }); - fireEvent.click(removeButton); - expect(screen.queryByText('test.jpg')).not.toBeInTheDocument(); - }); - - it('should render Tag component for each file', () => { - render(); - expect(screen.getByText('test.jpg')).toBeInTheDocument(); - }); - - it('should handle file size validation correctly', () => { - render(); - - const input = screen.getByLabelText(/Upload files/i); - const largeFile = new File(['a'.repeat(6 * 1024 * 1024)], 'large.jpg', { - type: 'image/jpeg', - }); - - fireEvent.change(input, { target: { files: [largeFile] } }); - - expect(defaultProps.onChange).not.toHaveBeenCalled(); - expect(screen.getByText(/file-upload.size-rejected/i)).toBeInTheDocument(); - }); - - it('should update innerFiles when files prop is not provided', () => { - render(); - - const removeButton = screen.getByRole('button', { name: /clear/i }); - fireEvent.click(removeButton); - - expect(screen.queryByText('test.jpg')).not.toBeInTheDocument(); - }); - - it('should call onChange with the updated list of files', () => { - const onChange = jest.fn(); - render(); - - const removeButton = screen.getByRole('button', { name: /clear/i }); - fireEvent.click(removeButton); - - expect(onChange).toHaveBeenCalledWith([]); - }); - - it('should use files prop when files and onChange are provided', () => { - const files = [{ name: 'test.jpg', id: '1' }]; - render(); - expect(screen.getByText('test.jpg')).toBeInTheDocument(); - }); - - it('renders Tag component with onClose prop when file is valid and not read-only', () => { - const file = { name: 'test.jpg', id: '1', isValid: true, isLoading: false }; - render(); - - const closeButton = screen.getByRole('button', { name: /clear/i }); - expect(closeButton).toBeInTheDocument(); - }); - - it('does not render onClose prop for Tag when file is disabled and read-only', () => { - const file = { name: 'test.jpg', id: '1', isValid: true, isLoading: true }; - render(); - - const closeButton = screen.queryByRole('button', { name: /clear/i }); - expect(closeButton).not.toBeInTheDocument(); - }); - - it('does not render onClose prop for Tag when file is disabled', () => { - const file = { name: 'test.jpg', id: '1', isValid: true, isLoading: false }; - render(); - - const closeButton = screen.queryByRole('button', { name: /clear/i }); - expect(closeButton).not.toBeInTheDocument(); - }); - - it('does not render onClose prop for Tag when file is read-only', () => { - const file = { name: 'test.jpg', id: '1', isValid: true, isLoading: false }; - render(); - - const closeButton = screen.queryByRole('button', { name: /clear/i }); - expect(closeButton).not.toBeInTheDocument(); - }); - - it('renders single file name using Text component', () => { - const file = { name: 'test.jpg', id: '1' }; - render(); - - const fileName = screen.getByText('test.jpg'); - expect(fileName).toBeInTheDocument(); - expect(fileName.tagName.toLowerCase()).toBe('p'); - }); - - it('triggers file input click when the "Add" button is clicked', () => { - render(); - - const fileInput = screen.getByLabelText(/Upload files/i) as HTMLInputElement; - const clickSpy = jest.spyOn(fileInput, 'click'); - - const addButton = screen.getByRole('button', { name: /file-upload.add/i }); - fireEvent.click(addButton); - - expect(clickSpy).toHaveBeenCalled(); - }); - - it('handles controlled files prop correctly', () => { - const files = [{ name: 'controlled.jpg', id: '1', isValid: true }]; - render(); - - expect(screen.getByText('controlled.jpg')).toBeInTheDocument(); - }); - - it('handles controlled mode with file uploads and rejections', async () => { - const ControlledWrapper = ({ initialFiles }: { initialFiles: FileUploadFile[] }) => { - const [files, setFiles] = React.useState(initialFiles); - return ; - }; - - const initialFiles = [{ name: 'initial.jpg', id: '1', isValid: true }]; - render(); - - expect(screen.getByText('initial.jpg')).toBeInTheDocument(); - - const input = screen.getByLabelText(/Upload files/i); - const validFile = new File(['dummy content'], 'new.jpg', { type: 'image/jpeg' }); - const invalidFile = new File(['dummy content'], 'test.txt', { type: 'text/plain' }); - fireEvent.change(input, { target: { files: [validFile, invalidFile] } }); - - await waitFor(() => { - expect(screen.getByText('new.jpg')).toBeInTheDocument(); - expect(screen.getByText(/file-upload.extension-rejected/i)).toBeInTheDocument(); - }); - - const clearButton = screen.getByRole('button', { name: /clear/i }); - fireEvent.click(clearButton); - await waitFor(() => { - expect(screen.queryByText('initial.jpg')).not.toBeInTheDocument(); - expect(screen.queryByText('new.jpg')).not.toBeInTheDocument(); - }); - }); -}); diff --git a/libs/react-components/src/tedi/components/form/file-upload/file-upload.stories.tsx b/libs/react-components/src/tedi/components/form/file-upload/file-upload.stories.tsx deleted file mode 100644 index b6ea36a9b..000000000 --- a/libs/react-components/src/tedi/components/form/file-upload/file-upload.stories.tsx +++ /dev/null @@ -1,268 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; -import React from 'react'; - -import { FileUploadFile } from '../../../helpers'; -import { Text } from '../../base/typography/text/text'; -import Button from '../../buttons/button/button'; -import { Col, Row } from '../../layout/grid'; -import { MultipleHandledTemplate } from './examples/multiple-handled'; -import FileUpload, { FileUploadProps } from './file-upload'; - -/** - * Figma ↗
- * Zeroheight ↗ - */ - -const meta: Meta = { - component: FileUpload, - title: 'TEDI-Ready/Components/Form/FileUpload', - parameters: { - design: { - type: 'figma', - url: 'https://www.figma.com/design/jWiRIXhHRxwVdMSimKX2FF/TEDI-READY-(work-in-progress)?node-id=4536-78765&m=dev', - }, - }, -}; - -export default meta; -type Story = StoryObj; - -const sizesArray: Array<'default' | 'small'> = ['default', 'small']; - -const TemplateSizes: StoryFn = (args) => { - return ( -
- {sizesArray.map((size, key) => ( - - - {size.charAt(0).toUpperCase() + size.slice(1)} - - - - - - ))} -
- ); -}; - -export const Default: Story = { - args: { - id: 'file-upload', - name: 'file', - label: 'Upload file', - }, -}; - -export const Sizes: Story = { - render: TemplateSizes, - args: { - label: 'Label', - }, -}; - -export const WithHint: Story = { - args: { - id: 'file-upload', - name: 'file', - label: 'Upload file', - helper: { - text: 'JPG, PNG, PDF with size 0.001MB.', - }, - }, -}; - -export const Disabled: Story = { - args: { - id: 'file-upload-disabled', - name: 'file-loading', - label: 'Upload file', - defaultFiles: [{ name: 'report.pdf' }], - disabled: true, - }, -}; - -export const ValidationFailed: Story = { - args: { - id: 'file-upload-validation-failed', - name: 'file-validation-failed', - label: 'Upload file', - maxSize: 0.001, - accept: '.pdf,.txt', - multiple: true, - validateIndividually: true, - defaultFiles: [{ name: 'taotlus_scan_lk_1.pdf', isValid: false }], - }, - render: (args) => ( - - ), -}; - -export const ValidationSuccess: Story = { - args: { - id: 'file-upload-validation-failed', - name: 'file-validation-failed', - label: 'Upload file', - maxSize: 0.001, - accept: '.pdf,.txt', - multiple: true, - validateIndividually: true, - defaultFiles: [{ name: 'taotlus_scan_lk_1.pdf', isValid: false }], - }, - render: (args) => ( - - ), -}; - -export const MultipleWithIndividualValidation: Story = { - args: { - id: 'file-upload-multiple-individual-validation', - name: 'file-multiple-individual-validation', - label: 'Upload files', - multiple: true, - maxSize: 0.01, - accept: '.pdf,.txt', - validateIndividually: true, - hasClearButton: true, - defaultFiles: [ - { name: 'taotlus_scan_lk_1.pdf' }, - { name: 'taotlus_scan_lk_2.pdf' }, - { name: 'taotlus_scan_lk_3.pdf' }, - { name: 'taotlus_scan_lk_4.pdf' }, - { name: 'taotlus_scan_lk_5.pdf', isValid: false }, - ], - helper: { - text: 'Only .pdf and .txt files under 1KB are allowed.', - }, - }, - render: (args) => ( - { - console.log('Uploaded files:', files); - }} - helper={{ - type: 'error', - text: 'Invalid file uploaded. Only .pdf and .txt files are allowed, and must be under 1KB.', - }} - /> - ), -}; - -export const LoadingState: Story = { - args: { - id: 'file-upload-loading', - name: 'file-loading', - label: 'Upload file', - defaultFiles: [{ name: 'report.pdf', isLoading: true }, { name: 'report_1.pdf' }], - }, -}; - -export const Multiple: Story = { - args: { - id: 'file-upload-MULTIPLE', - name: 'file-multiple', - label: 'Upload file', - multiple: true, - defaultFiles: [{ name: 'report.pdf' }, { name: 'report_1.pdf' }, { name: 'report_2.pdf' }], - helper: { - text: 'JPG, PNG, PDF with size 0.001MB.', - }, - }, -}; - -export const MultipleHandled: Story = { - render: MultipleHandledTemplate, - args: { - id: 'file-upload-handled', - name: 'file-loading-handled', - label: 'Upload file', - multiple: true, - onDelete: (file) => { - console.log(`Deleted - ${file.name}`); - }, - }, -}; - -export const ReadOnlyFiles: Story = { - args: { - id: 'file-upload-read-only', - name: 'file-loading', - label: 'Upload file', - defaultFiles: [{ name: 'report.pdf' }, { name: 'report_1.pdf' }, { name: 'report_2.pdf' }], - onChange: (files) => { - console.log(files); - }, - readOnly: true, - }, -}; - -export const PdfAndTxtOnly: Story = { - args: { - id: 'file-upload-accepts', - name: 'file-accepts', - label: 'Upload file', - accept: '.pdf,.txt', - }, -}; - -export const SizeLimited: Story = { - args: { - id: 'file-upload-size-limited', - name: 'file-size-limited', - label: 'Upload file', - maxSize: 0.001, - multiple: true, - }, -}; - -export const ExtensionAndSizeLimit: Story = { - args: { - id: 'file-upload-size-extension-limited', - name: 'file-size-extension-limited', - label: 'Upload file', - maxSize: 0.001, - accept: '.pdf,.txt', - multiple: true, - }, -}; - -export const ControlledClearing: Story = { - render: (args) => { - const [files, setFiles] = React.useState([ - { name: 'report.pdf' }, - { name: 'report_1.pdf' }, - { name: 'report_2.pdf' }, - ]); - - return ( - <> - setFiles(f)} multiple /> - -
- - -
Files: {JSON.stringify(files, null, 2)}
-
- - ); - }, - args: { - id: 'file-upload-clear-controlled', - name: 'file-upload-clear-controlled', - label: 'Upload file', - hasClearButton: true, - }, -}; diff --git a/libs/react-components/src/tedi/components/form/file-upload/file-upload.tsx b/libs/react-components/src/tedi/components/form/file-upload/file-upload.tsx deleted file mode 100644 index 9ed237d8e..000000000 --- a/libs/react-components/src/tedi/components/form/file-upload/file-upload.tsx +++ /dev/null @@ -1,248 +0,0 @@ -import cn from 'classnames'; -import React from 'react'; - -import { isBreakpointBelow, useBreakpoint } from '../../../helpers'; -import { FileUploadFile, useFileUpload } from '../../../helpers/hooks/use-file-upload'; -import { useLabels } from '../../../providers/label-provider'; -import { Text } from '../../base/typography/text/text'; -import { Button } from '../../buttons/button/button'; -import { ClosingButton } from '../../buttons/closing-button/closing-button'; -import { FormLabel, FormLabelProps } from '../../form/form-label/form-label'; -import { Col, Row } from '../../layout/grid'; -import Separator from '../../misc/separator/separator'; -import { Tag } from '../../tags/tag/tag'; -import { FeedbackText, FeedbackTextProps } from '../feedback-text/feedback-text'; -import styles from './file-upload.module.scss'; - -export interface FileUploadProps extends FormLabelProps { - /** - * Additional class names for styling the component. - */ - className?: string; - - /** - * The name of the file input field, used for form submission and accessibility. - */ - name: string; - - /** - * A helper text or error message to display below the file upload field. - */ - helper?: FeedbackTextProps; - - /** - * Specifies the allowed file types (e.g., "image/png, image/jpeg"). - */ - accept?: string; - - /** - * Allows multiple file selection if `true`. Defaults to `false`. - */ - multiple?: boolean; - - /** - * Callback function triggered when files are added or changed. - */ - onChange?: (files: FileUploadFile[]) => void; - - /** - * An array of preloaded files that appear in the upload field by default. - */ - defaultFiles?: FileUploadFile[]; - - /** - * Callback function triggered when a file is removed. - */ - onDelete?: (file: FileUploadFile) => void; - - /** - * Determines whether a "Clear" button is shown to remove all files. - */ - hasClearButton?: boolean; - - /** - * A controlled list of uploaded files. If provided, `onChange` should be used to update them. - */ - files?: FileUploadFile[]; - - /** - * If `true`, prevents file selection and removal, making the field read-only. - */ - readOnly?: boolean; - - /** - * Disables the file upload field, preventing interactions. - */ - disabled?: boolean; - - /** - * Maximum allowed file size in bytes. - */ - maxSize?: number; - - /** - * If `true`, validates each file separately instead of rejecting all at once. - */ - validateIndividually?: boolean; - - /** - * Determines the visual size of the file upload field. Defaults to `"default"`. - */ - size?: 'small' | 'default'; -} - -export const FileUpload = (props: FileUploadProps): JSX.Element => { - const { getLabel } = useLabels(); - const { - id, - name, - accept, - multiple, - onChange, - className, - defaultFiles, - onDelete, - hasClearButton = true, - files, - readOnly, - disabled = false, - maxSize, - validateIndividually = false, - size = 'default', - helper, - ...rest - } = props; - - const { innerFiles, uploadErrorHelper, onFileChange, onFileRemove, handleClear } = useFileUpload({ - accept, - maxSize, - multiple, - validateIndividually, - defaultFiles, - onChange, - onDelete, - files, - }); - - const currentBreakpoint = useBreakpoint(); - - const fileUploadBEM = cn(styles['tedi-file-upload'], { [styles['tedi-file-upload--disabled']]: disabled }, className); - const helperId = helper ? helper?.id ?? `${id}-helper` : undefined; - - const getFiles = React.useMemo(() => { - return !!files && !!onChange ? files : innerFiles; - }, [files, innerFiles, onChange]); - - const getFileElement = (file: FileUploadFile, index: number) => { - return ( -
  • - onFileRemove(file) : undefined} - isLoading={file.isLoading} - > - {file.name} - -
  • - ); - }; - - const showFiles = () => { - if (getFiles.length > 1) { - return ( -
      - {getFiles.map((file, index) => getFileElement(file, index))} -
    - ); - } else if (getFiles.length === 1) { - return {getFiles[0].name}; - } - return null; - }; - - return ( - <> -
    - -
    - {readOnly ? ( - showFiles() - ) : ( -
    -
    - - {showFiles()} - -
    - - {hasClearButton && getFiles.length > 0 && !disabled && ( - <> - {isBreakpointBelow(currentBreakpoint, 'md') ? ( - - ) : ( - - )} - - - )} - -
    - -
    -
    -
    - )} - {helper ? ( - - ) : uploadErrorHelper ? ( - - ) : null} - - ); -}; - -export default FileUpload; diff --git a/libs/react-components/src/tedi/components/form/file-upload/index.ts b/libs/react-components/src/tedi/components/form/file-upload/index.ts deleted file mode 100644 index a00190ec5..000000000 --- a/libs/react-components/src/tedi/components/form/file-upload/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './file-upload'; diff --git a/libs/react-components/src/tedi/components/form/form-label/form-label.module.scss b/libs/react-components/src/tedi/components/form/form-label/form-label.module.scss deleted file mode 100644 index 49524d44e..000000000 --- a/libs/react-components/src/tedi/components/form/form-label/form-label.module.scss +++ /dev/null @@ -1,11 +0,0 @@ -@use '@tehik-ee/tedi-core/mixins'; - -.tedi-form-label { - &--hidden { - @include mixins.visually-hidden; - } - - &--hidden-keep-space { - visibility: hidden; - } -} diff --git a/libs/react-components/src/tedi/components/form/form-label/form-label.spec.tsx b/libs/react-components/src/tedi/components/form/form-label/form-label.spec.tsx deleted file mode 100644 index 9c470d5aa..000000000 --- a/libs/react-components/src/tedi/components/form/form-label/form-label.spec.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { render } from '@testing-library/react'; - -import { FormLabel } from './form-label'; - -describe('FormLabel component', () => { - it('renders with default props', () => { - const { container } = render(); - - const label = container.querySelector('label'); - expect(label).toBeInTheDocument(); - expect(label).toHaveTextContent('Test Label'); - expect(label).toHaveAttribute('for', 'test-id'); - expect(label).not.toHaveClass('tedi-form-label--small'); - }); - - it('renders with hideLabel as true', () => { - const { container } = render(); - - const label = container.querySelector('.tedi-form-label'); - expect(label).toHaveClass('tedi-form-label--hidden'); - }); - - it('renders with hideLabel as "keep-space"', () => { - const { container } = render(); - - const label = container.querySelector('.tedi-form-label'); - expect(label).toHaveClass('tedi-form-label--hidden-keep-space'); - }); - - it('renders with a custom class name', () => { - const { container } = render(); - - const label = container.querySelector('.tedi-form-label'); - expect(label).toHaveClass('custom-class'); - }); - - it('renders as span when renderWithoutLabel is true', () => { - const { container } = render(); - - const span = container.querySelector('span'); - expect(span).toBeInTheDocument(); - expect(span).toHaveTextContent('Test Label'); - }); - - it('renders with small size', () => { - const { container } = render(); - - const label = container.querySelector('.tedi-form-label'); - expect(label).toHaveClass('tedi-form-label--small'); - }); - - it('renders with default size', () => { - const { container } = render(); - - const label = container.querySelector('.tedi-form-label'); - expect(label).toHaveClass('tedi-form-label--default'); - }); - - it('renders the label text correctly', () => { - const { getByText } = render(); - - expect(getByText('Form Label Text')).toBeInTheDocument(); - }); -}); diff --git a/libs/react-components/src/tedi/components/form/form-label/form-label.stories.tsx b/libs/react-components/src/tedi/components/form/form-label/form-label.stories.tsx deleted file mode 100644 index e9c4daedb..000000000 --- a/libs/react-components/src/tedi/components/form/form-label/form-label.stories.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import { Meta, StoryFn, StoryObj } from '@storybook/react'; - -import { Label } from '../../content/label/label'; -import { Col, Row } from '../../layout/grid'; -import FormLabel from './form-label'; - -const meta: Meta = { - component: FormLabel, - title: 'TEDI-Ready/Components/Form/FormLabel', - parameters: { - status: { - type: 'internalComponent', - }, - }, -}; - -export default meta; -type Story = StoryObj; - -export const Default: Story = { - args: { - id: 'input-id-1', - label: 'Label of input', - }, -}; - -const sizeArray = ['default', 'small']; - -const SizeTemplate: StoryFn = () => { - return ( -
    - {sizeArray.map((size, key) => ( - - - {size.charAt(0).toUpperCase() + size.slice(1)} - - - - - - - ))} -
    - ); -}; - -export const Size = { - render: SizeTemplate, -}; - -const StructureTemplate: StoryFn = () => { - return ( - - - - - - - - - - - - - - - ); -}; - -export const Structure = { - render: StructureTemplate, -}; diff --git a/libs/react-components/src/tedi/components/form/form-label/form-label.tsx b/libs/react-components/src/tedi/components/form/form-label/form-label.tsx deleted file mode 100644 index 287c92d6b..000000000 --- a/libs/react-components/src/tedi/components/form/form-label/form-label.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import cn from 'classnames'; -import { forwardRef } from 'react'; - -import { Label } from '../../content/label/label'; -import styles from './form-label.module.scss'; - -export interface FormLabelProps { - /** - * The unique identifier for the input element that this label is associated with. - * This ID should match the input element's `id` attribute to ensure accessibility. - */ - id: string; - /** - * The text content of the label that describes the input field. - */ - label: string; - /** - * Controls the visibility of the label. - * Use `true` to hide the label visually while maintaining its space in the layout, - * or use 'keep-space' to hide it without collapsing the space it occupies. - */ - hideLabel?: boolean | 'keep-space'; - /** - * Indicates whether the input field is required. - * If set to `true`, the required indicator (if provided) will be displayed next to the label. - */ - required?: boolean; - /** - * Additional className. - */ - className?: string; - /** - * Renders the label as a `` instead of a `