diff --git a/angular/package.json b/angular/package.json index 98dd238a0..b03ff41b3 100644 --- a/angular/package.json +++ b/angular/package.json @@ -34,16 +34,16 @@ "@angular/cli": "21.2.7", "@angular/compiler-cli": "21.2.8", "@types/jest": "^30.0.0", - "@types/node": "^12.11.1", - "@vitest/browser-playwright": "^4.0.16", - "@vitest/coverage-v8": "^4.0.16", - "@vitest/ui": "4.0.16", + "@types/node": "^20.0.0", + "@vitest/browser-playwright": "4.1.5", + "@vitest/coverage-v8": "4.1.5", + "@vitest/ui": "4.1.5", "esbuild-plugin-ignore": "^1.1.1", "jsdom": "^27.4.0", "ng-packagr": "21.0.0", "playwright": "^1.57.0", "prettier": "3.7.4", "typescript": "5.9.3", - "vitest": "^4.0.16" + "vitest": "4.1.5" } } diff --git a/core/eslint.config.js b/core/eslint.config.mjs similarity index 73% rename from core/eslint.config.js rename to core/eslint.config.mjs index 2125704e7..dd645e1e2 100644 --- a/core/eslint.config.js +++ b/core/eslint.config.mjs @@ -1,11 +1,14 @@ -const { defineConfig, globalIgnores } = require('eslint/config'); +import { defineConfig, globalIgnores } from 'eslint/config'; +import globals from 'globals'; +import tsParser from '@typescript-eslint/parser'; +import typescriptEslint from '@typescript-eslint/eslint-plugin'; +import js from '@eslint/js'; +import { FlatCompat } from '@eslint/eslintrc'; +import { fileURLToPath } from 'node:url'; +import { dirname } from 'node:path'; -const globals = require('globals'); -const tsParser = require('@typescript-eslint/parser'); -const typescriptEslint = require('@typescript-eslint/eslint-plugin'); -const js = require('@eslint/js'); - -const { FlatCompat } = require('@eslint/eslintrc'); +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); const compat = new FlatCompat({ baseDirectory: __dirname, @@ -15,7 +18,7 @@ const compat = new FlatCompat({ const WARN = 1, ERROR = 2; -module.exports = defineConfig([ +export default defineConfig([ { files: ['**/*.ts', '**/*.tsx'], languageOptions: { @@ -77,9 +80,9 @@ module.exports = defineConfig([ '**/.eslintrc.js', '**/eslint.config.js', '**/replace.js', - '**/setupTests.js', '**/stencil.config.ts', '**/playwright.config.ts', - '**/stencil.transformer.js' + '**/vitest-setup-plugin.ts', + '**/vitest.config.ts' ]) ]); diff --git a/core/package.json b/core/package.json index 1b29eef4e..39a18553f 100644 --- a/core/package.json +++ b/core/package.json @@ -30,10 +30,10 @@ "postbuild": "node replace", "postbuild:ci": "node replace", "start": "stencil build --dev --watch --serve", - "test": "stencil test --spec --runInBand", + "test": "stencil-test", "test:e2e": "playwright test", "posttest:e2e": "node replace && pnpm --filter @haiilo/catalyst-angular-workspace run prettier", - "test:watch": "stencil test --spec --watchAll", + "test:watch": "stencil-test watch", "generate": "stencil generate", "prettier": "prettier --write .", "prettier:check": "prettier --check .", @@ -49,7 +49,7 @@ "dependencies": { "@floating-ui/dom": "1.6.13", "@haiilo/catalyst-tokens": "workspace:*", - "@stencil/core": "4.38.3", + "@stencil/core": "4.43.3", "autosize": "6.0.1", "autosize-input": "1.0.2", "cleave-zen": "0.0.17", @@ -67,16 +67,14 @@ "@stencil/playwright": "0.2.3", "@stencil/react-output-target": "0.5.3", "@stencil/sass": "3.2.3", + "@stencil/vitest": "1.11.6", "@types/autosize": "^4.0.3", - "@types/jest": "^29.5.10", "@types/node": "^20.14.2", "@types/toastify-js": "^1.12.3", "@typescript-eslint/eslint-plugin": "8.52.0", "@typescript-eslint/parser": "8.52.0", "eslint": "9.39.2", "eslint-config-prettier": "9.1.2", - "jest": "29.7.0", - "jest-cli": "29.7.0", "prettier": "3.7.4", "puppeteer": "24.32.0", "replace-in-file": "8.4.0", @@ -85,6 +83,7 @@ "stylelint": "16.26.1", "stylelint-config-prettier-scss": "1.0.0", "stylelint-config-standard-scss": "14.0.0", - "typescript": "5.9.3" + "typescript": "5.9.3", + "vitest": "4.1.5" } } diff --git a/core/setupTests.js b/core/setupTests.js deleted file mode 100644 index bdf1343cd..000000000 --- a/core/setupTests.js +++ /dev/null @@ -1,11 +0,0 @@ -global.ResizeObserver = jest.fn().mockImplementation(() => ({ - observe: jest.fn(), - unobserve: jest.fn(), - disconnect: jest.fn() -})); - -global.MutationObserver = jest.fn().mockImplementation(() => ({ - observe: jest.fn(), - takeRecords: jest.fn(), - disconnect: jest.fn() -})); diff --git a/core/src/components.d.ts b/core/src/components.d.ts index 0098b8714..d8b810902 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -3143,6 +3143,10 @@ declare namespace LocalJSX { * @default false */ "disabled"?: boolean; + /** + * The `id` of a `
` element to associate this element with. + */ + "form"?: string; /** * Optional hint text(s) to be displayed with the checkbox. */ @@ -3765,6 +3769,10 @@ declare namespace LocalJSX { * If the horizontal value is not provided, this fallback value is used. Can be set by form-group. */ "fallbackHorizontal"?: boolean; + /** + * The `id` of a `` element to associate this element with. + */ + "form"?: string; /** * Optional hint text(s) to be displayed with the input. */ @@ -4698,6 +4706,10 @@ declare namespace LocalJSX { * If the horizontal value is not provided, this fallback value is used. Can be set by form-group. */ "fallbackHorizontal"?: boolean; + /** + * The `id` of a `` element to associate this element with. + */ + "form"?: string; /** * Optional hint text(s) to be displayed with the textarea. */ @@ -4938,6 +4950,10 @@ declare namespace LocalJSX { * @default false */ "disabled"?: boolean; + /** + * The `id` of a `` element to associate this element with. + */ + "form"?: string; /** * Optional hint text(s) to be displayed with the toggle. */ @@ -5051,39 +5067,472 @@ declare namespace LocalJSX { */ "size"?: 's' | 'm' | 'l'; } + + interface CatAlertAttributes { + "color": 'primary' | 'secondary' | 'danger' | 'success' | 'warning' | 'none'; + "icon": string; + "noIcon": boolean; + } + interface CatAvatarAttributes { + "size": 'xs' | 's' | 'm' | 'l' | 'xl'; + "round": boolean; + "label": string; + "initials": string; + "src": string; + "icon": string; + "url": string; + "urlTarget": '_blank' | '_self'; + } + interface CatBadgeAttributes { + "variant": 'filled' | 'outlined'; + "color": 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'danger'; + "size": 'xs' | 's' | 'm' | 'l' | 'xl'; + "round": boolean; + "pulse": boolean; + "icon": string; + "iconOnly": string; + "iconRight": boolean; + } + interface CatButtonAttributes { + "variant": 'filled' | 'outlined' | 'text' | 'link'; + "color": 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'danger'; + "active": boolean; + "size": 'xs' | 's' | 'm' | 'l' | 'xl'; + "name": string; + "value": string; + "disabled": boolean; + "loading": boolean; + "submit": boolean; + "noEllipsis": boolean; + "round": boolean; + "url": string; + "urlTarget": '_blank' | '_self'; + "icon": string; + "iconOnly": string; + "iconRight": boolean; + "buttonId": string; + "a11yLabel": string; + "a11yCurrent": string; + "testId": string; + "buttonGroupPosition": 'first' | 'last' | 'middle'; + } + interface CatButtonGroupAttributes { + "a11yLabel": string; + } + interface CatCheckboxAttributes { + "checked": boolean; + "indeterminate": boolean; + "disabled": boolean; + "identifier": string; + "label": string; + "labelHidden": boolean; + "name": string; + "required": boolean; + "value": string; + "noValue": string; + "resolvedValue": string; + "hint": string | string[]; + "labelLeft": boolean; + "alignment": 'center' | 'top' | 'bottom'; + "testId": string; + "requiredMarker": 'none' | 'required' | 'optional' | 'none!' | 'optional!' | 'required!'; + } + interface CatDateAttributes { + "requiredMarker": 'none' | 'required' | 'optional' | 'none!' | 'optional!' | 'required!'; + "horizontal": boolean; + "fallbackHorizontal": boolean; + "autoComplete": string; + "clearable": boolean; + "disabled": boolean; + "hint": string | string[]; + "icon": string; + "iconRight": boolean; + "identifier": string; + "label": string; + "labelHidden": boolean; + "max": string; + "min": string; + "name": string; + "placeholder": string; + "textPrefix": string; + "textSuffix": string; + "readonly": boolean; + "required": boolean; + "value": string; + "errors": boolean | string[] | ErrorMap; + "errorUpdate": string; + "testId": string; + "placement": Placement; + } + interface CatDateInlineAttributes { + "noClear": boolean; + "identifier": string; + "hint": boolean; + "noToday": boolean; + "weeks": boolean; + "label": string; + "labelHidden": boolean; + "min": string; + "max": string; + "range": boolean; + "required": boolean; + "a11yLabel": string; + "requiredMarker": 'none' | 'required' | 'optional' | 'none!' | 'optional!' | 'required!'; + "value": string; + } + interface CatDatepickerAttributes { + "requiredMarker": 'none' | 'required' | 'optional' | 'none!' | 'optional!' | 'required!'; + "horizontal": boolean; + "fallbackHorizontal": boolean; + "autoComplete": string; + "clearable": boolean; + "disabled": boolean; + "hint": string | string[]; + "icon": string; + "iconRight": boolean; + "identifier": string; + "label": string; + "labelHidden": boolean; + "max": string; + "min": string; + "mode": CatDatepickerMode; + "name": string; + "placeholder": string; + "textPrefix": string; + "textSuffix": string; + "readonly": boolean; + "required": boolean; + "step": number; + "attachToElement": boolean; + "position": BaseOptions['position'] | Placement; + "value": string; + "errors": boolean | string[] | ErrorMap; + "errorUpdate": string; + } + interface CatDatepickerInlineAttributes { + "disabled": boolean; + "max": string; + "min": string; + "mode": CatDatepickerMode; + "readonly": boolean; + "step": number; + "value": string; + } + interface CatDropdownAttributes { + "placement": Placement; + "justify": boolean; + "noAutoClose": boolean; + "arrowNavigation": 'horizontal' | 'vertical' | 'none'; + "noResize": boolean; + "overflow": boolean; + "noInitialFocus": boolean; + "isOpen": boolean; + "noReturnFocus": boolean; + "delayedTriggerInit": boolean; + "focusTrap": boolean; + } + interface CatFormGroupAttributes { + "requiredMarker": 'none' | 'required' | 'optional' | 'auto'; + "horizontal": boolean; + "labelSize": string; + } + interface CatIconAttributes { + "icon": string; + "iconSrc": string; + "size": 'xs' | 's' | 'm' | 'l' | 'xl' | 'inline'; + "a11yLabel": string; + } + interface CatInputAttributes { + "requiredMarker": 'none' | 'required' | 'optional' | 'none!' | 'optional!' | 'required!'; + "horizontal": boolean; + "fallbackHorizontal": boolean; + "accept": string; + "multiple": boolean; + "autoComplete": string; + "clearable": boolean; + "togglePassword": boolean; + "disabled": boolean; + "loading": boolean; + "hint": string | string[]; + "icon": string; + "iconRight": boolean; + "identifier": string; + "label": string; + "labelHidden": boolean; + "max": string; + "maxLength": number; + "min": string; + "minLength": number; + "name": string; + "placeholder": string; + "textPrefix": string; + "textSuffix": string; + "readonly": boolean; + "required": boolean; + "round": boolean; + "type": InputType; + "value": string; + "errors": boolean | string[] | ErrorMap; + "errorUpdate": string; + "testId": string; + } + interface CatMenuAttributes { + "placement": Placement; + "arrowNavigation": 'horizontal' | 'vertical'; + "triggerVariant": 'filled' | 'outlined' | 'text'; + "triggerSize": 'xs' | 's' | 'm' | 'l' | 'xl'; + "triggerIcon": string; + "triggerIconOnly": string; + "triggerLabel": string; + "triggerColor": 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'danger'; + "triggerA11yLabel": string; + "triggerClass": string; + "triggerTestId": string; + "triggerRound": boolean; + "triggerIconRight": boolean; + "disabled": boolean; + "justify": boolean; + "noResize": boolean; + "overflow": boolean; + "delayedTriggerInit": boolean; + } + interface CatMenuItemAttributes { + "identifier": string; + "icon": string; + "color": 'primary' | 'secondary' | 'danger' | 'warning' | 'success' | 'info'; + "active": boolean; + "variant": 'filled' | 'outlined' | 'text'; + "loading": boolean; + "iconOnly": string; + "iconRight": boolean; + "url": string; + "urlTarget": '_blank' | '_self'; + "disabled": boolean; + "testId": string; + "subMenu": boolean; + } + interface CatPaginationAttributes { + "page": number; + "pageCount": number; + "activePadding": number; + "sidePadding": number; + "size": 'xs' | 's' | 'm' | 'l' | 'xl'; + "variant": 'filled' | 'outlined' | 'text'; + "round": boolean; + "compact": boolean; + "iconPrev": string; + "iconNext": string; + } + interface CatRadioAttributes { + "checked": boolean; + "disabled": boolean; + "identifier": string; + "label": string; + "labelHidden": boolean; + "name": string; + "required": boolean; + "value": string; + "hint": string | string[]; + "labelLeft": boolean; + "alignment": 'center' | 'top' | 'bottom'; + "testId": string; + } + interface CatRadioGroupAttributes { + "name": string; + "value": string; + "disabled": boolean; + "a11yLabel": string; + "labelLeft": boolean; + } + interface CatScrollableAttributes { + "noShadowX": boolean; + "noShadowY": boolean; + "noOverflowX": boolean; + "noOverflowY": boolean; + "noOverscroll": boolean; + "noScrolledInit": boolean; + "scrolledBuffer": number; + } + interface CatSelectAttributes { + "requiredMarker": 'none' | 'required' | 'optional' | 'none!' | 'optional!' | 'required!'; + "horizontal": boolean; + "fallbackHorizontal": boolean; + "multiple": boolean; + "debounce": number; + "placement": Placement; + "value": CatSelectValue; + "disabled": boolean; + "placeholder": string; + "hint": string | string[]; + "identifier": string; + "label": string; + "name": string; + "labelHidden": boolean; + "required": boolean; + "clearable": boolean; + "tags": boolean; + "tagHint": string; + "noItems": string; + "errors": boolean | string[] | ErrorMap; + "errorUpdate": string; + "testId": string; + } + interface CatSkeletonAttributes { + "effect": 'plain' | 'sheen' | 'pulse'; + "variant": 'rectangle' | 'square' | 'circle' | 'head' | 'body'; + "size": 'xs' | 's' | 'm' | 'l' | 'xl'; + "lines": number; + } + interface CatSpinnerAttributes { + "size": 'xs' | 's' | 'm' | 'l' | 'xl' | 'inline'; + "a11yLabel": string; + "value": number; + } + interface CatTabAttributes { + "label": string; + "icon": string; + "iconOnly": string; + "iconRight": boolean; + "url": string; + "urlTarget": '_blank' | '_self'; + "deactivated": boolean; + "noActive": boolean; + "sticky": boolean; + "error": boolean; + "testId": string; + } + interface CatTabsAttributes { + "activeTab": string; + "tabsAlign": 'left' | 'center' | 'right' | 'justify'; + "adaptive": boolean; + "activeTabAlwaysVisible": boolean; + } + interface CatTagAttributes { + "requiredMarker": 'none' | 'required' | 'optional' | 'none!' | 'optional!' | 'required!'; + "disabled": boolean; + "placeholder": string; + "hint": string | string[]; + "identifier": string; + "label": string; + "name": string; + "labelHidden": boolean; + "required": boolean; + "testId": string; + "clearable": boolean; + "errors": boolean | string[] | ErrorMap; + "errorUpdate": string; + "addOnBlur": boolean; + } + interface CatTextareaAttributes { + "requiredMarker": 'none' | 'required' | 'optional' | 'none!' | 'optional!' | 'required!'; + "horizontal": boolean; + "fallbackHorizontal": boolean; + "autoComplete": string; + "disabled": boolean; + "hint": string | string[]; + "identifier": string; + "label": string; + "labelHidden": boolean; + "maxLength": number; + "minLength": number; + "name": string; + "placeholder": string; + "readonly": boolean; + "required": boolean; + "rows": number; + "value": string; + "errors": boolean | string[] | ErrorMap; + "errorUpdate": string; + "testId": string; + } + interface CatTimeAttributes { + "requiredMarker": 'none' | 'required' | 'optional' | 'none!' | 'optional!' | 'required!'; + "horizontal": boolean; + "fallbackHorizontal": boolean; + "autoComplete": string; + "clearable": boolean; + "disabled": boolean; + "hint": string | string[]; + "icon": string; + "iconRight": boolean; + "identifier": string; + "label": string; + "labelHidden": boolean; + "max": string; + "min": string; + "name": string; + "placeholder": string; + "textPrefix": string; + "textSuffix": string; + "readonly": boolean; + "required": boolean; + "value": string; + "errors": boolean | string[] | ErrorMap; + "errorUpdate": string; + "testId": string; + "placement": Placement; + "step": number; + } + interface CatToggleAttributes { + "checked": boolean; + "disabled": boolean; + "identifier": string; + "label": string; + "labelHidden": boolean; + "name": string; + "required": boolean; + "value": string; + "noValue": string; + "resolvedValue": string; + "hint": string | string[]; + "labelLeft": boolean; + "alignment": 'center' | 'top' | 'bottom'; + "testId": string; + } + interface CatTooltipAttributes { + "content": string; + "disabled": boolean; + "placement": TooltipPlacement; + "round": boolean; + "size": 's' | 'm' | 'l'; + "showDelay": number; + "hideDelay": number; + "longTouchDuration": number; + } + interface IntrinsicElements { - "cat-alert": CatAlert; - "cat-avatar": CatAvatar; - "cat-badge": CatBadge; - "cat-button": CatButton; - "cat-button-group": CatButtonGroup; + "cat-alert": Omit & { [K in keyof CatAlert & keyof CatAlertAttributes]?: CatAlert[K] } & { [K in keyof CatAlert & keyof CatAlertAttributes as `attr:${K}`]?: CatAlertAttributes[K] } & { [K in keyof CatAlert & keyof CatAlertAttributes as `prop:${K}`]?: CatAlert[K] }; + "cat-avatar": Omit & { [K in keyof CatAvatar & keyof CatAvatarAttributes]?: CatAvatar[K] } & { [K in keyof CatAvatar & keyof CatAvatarAttributes as `attr:${K}`]?: CatAvatarAttributes[K] } & { [K in keyof CatAvatar & keyof CatAvatarAttributes as `prop:${K}`]?: CatAvatar[K] }; + "cat-badge": Omit & { [K in keyof CatBadge & keyof CatBadgeAttributes]?: CatBadge[K] } & { [K in keyof CatBadge & keyof CatBadgeAttributes as `attr:${K}`]?: CatBadgeAttributes[K] } & { [K in keyof CatBadge & keyof CatBadgeAttributes as `prop:${K}`]?: CatBadge[K] }; + "cat-button": Omit & { [K in keyof CatButton & keyof CatButtonAttributes]?: CatButton[K] } & { [K in keyof CatButton & keyof CatButtonAttributes as `attr:${K}`]?: CatButtonAttributes[K] } & { [K in keyof CatButton & keyof CatButtonAttributes as `prop:${K}`]?: CatButton[K] }; + "cat-button-group": Omit & { [K in keyof CatButtonGroup & keyof CatButtonGroupAttributes]?: CatButtonGroup[K] } & { [K in keyof CatButtonGroup & keyof CatButtonGroupAttributes as `attr:${K}`]?: CatButtonGroupAttributes[K] } & { [K in keyof CatButtonGroup & keyof CatButtonGroupAttributes as `prop:${K}`]?: CatButtonGroup[K] }; "cat-card": CatCard; - "cat-checkbox": CatCheckbox; - "cat-date": CatDate; - "cat-date-inline": CatDateInline; - "cat-datepicker": CatDatepicker; - "cat-datepicker-inline": CatDatepickerInline; - "cat-dropdown": CatDropdown; - "cat-form-group": CatFormGroup; - "cat-icon": CatIcon; - "cat-input": CatInput; - "cat-menu": CatMenu; - "cat-menu-item": CatMenuItem; - "cat-pagination": CatPagination; - "cat-radio": CatRadio; - "cat-radio-group": CatRadioGroup; - "cat-scrollable": CatScrollable; - "cat-select": CatSelect; + "cat-checkbox": Omit & { [K in keyof CatCheckbox & keyof CatCheckboxAttributes]?: CatCheckbox[K] } & { [K in keyof CatCheckbox & keyof CatCheckboxAttributes as `attr:${K}`]?: CatCheckboxAttributes[K] } & { [K in keyof CatCheckbox & keyof CatCheckboxAttributes as `prop:${K}`]?: CatCheckbox[K] }; + "cat-date": Omit & { [K in keyof CatDate & keyof CatDateAttributes]?: CatDate[K] } & { [K in keyof CatDate & keyof CatDateAttributes as `attr:${K}`]?: CatDateAttributes[K] } & { [K in keyof CatDate & keyof CatDateAttributes as `prop:${K}`]?: CatDate[K] }; + "cat-date-inline": Omit & { [K in keyof CatDateInline & keyof CatDateInlineAttributes]?: CatDateInline[K] } & { [K in keyof CatDateInline & keyof CatDateInlineAttributes as `attr:${K}`]?: CatDateInlineAttributes[K] } & { [K in keyof CatDateInline & keyof CatDateInlineAttributes as `prop:${K}`]?: CatDateInline[K] }; + "cat-datepicker": Omit & { [K in keyof CatDatepicker & keyof CatDatepickerAttributes]?: CatDatepicker[K] } & { [K in keyof CatDatepicker & keyof CatDatepickerAttributes as `attr:${K}`]?: CatDatepickerAttributes[K] } & { [K in keyof CatDatepicker & keyof CatDatepickerAttributes as `prop:${K}`]?: CatDatepicker[K] }; + "cat-datepicker-inline": Omit & { [K in keyof CatDatepickerInline & keyof CatDatepickerInlineAttributes]?: CatDatepickerInline[K] } & { [K in keyof CatDatepickerInline & keyof CatDatepickerInlineAttributes as `attr:${K}`]?: CatDatepickerInlineAttributes[K] } & { [K in keyof CatDatepickerInline & keyof CatDatepickerInlineAttributes as `prop:${K}`]?: CatDatepickerInline[K] }; + "cat-dropdown": Omit & { [K in keyof CatDropdown & keyof CatDropdownAttributes]?: CatDropdown[K] } & { [K in keyof CatDropdown & keyof CatDropdownAttributes as `attr:${K}`]?: CatDropdownAttributes[K] } & { [K in keyof CatDropdown & keyof CatDropdownAttributes as `prop:${K}`]?: CatDropdown[K] }; + "cat-form-group": Omit & { [K in keyof CatFormGroup & keyof CatFormGroupAttributes]?: CatFormGroup[K] } & { [K in keyof CatFormGroup & keyof CatFormGroupAttributes as `attr:${K}`]?: CatFormGroupAttributes[K] } & { [K in keyof CatFormGroup & keyof CatFormGroupAttributes as `prop:${K}`]?: CatFormGroup[K] }; + "cat-icon": Omit & { [K in keyof CatIcon & keyof CatIconAttributes]?: CatIcon[K] } & { [K in keyof CatIcon & keyof CatIconAttributes as `attr:${K}`]?: CatIconAttributes[K] } & { [K in keyof CatIcon & keyof CatIconAttributes as `prop:${K}`]?: CatIcon[K] }; + "cat-input": Omit & { [K in keyof CatInput & keyof CatInputAttributes]?: CatInput[K] } & { [K in keyof CatInput & keyof CatInputAttributes as `attr:${K}`]?: CatInputAttributes[K] } & { [K in keyof CatInput & keyof CatInputAttributes as `prop:${K}`]?: CatInput[K] }; + "cat-menu": Omit & { [K in keyof CatMenu & keyof CatMenuAttributes]?: CatMenu[K] } & { [K in keyof CatMenu & keyof CatMenuAttributes as `attr:${K}`]?: CatMenuAttributes[K] } & { [K in keyof CatMenu & keyof CatMenuAttributes as `prop:${K}`]?: CatMenu[K] }; + "cat-menu-item": Omit & { [K in keyof CatMenuItem & keyof CatMenuItemAttributes]?: CatMenuItem[K] } & { [K in keyof CatMenuItem & keyof CatMenuItemAttributes as `attr:${K}`]?: CatMenuItemAttributes[K] } & { [K in keyof CatMenuItem & keyof CatMenuItemAttributes as `prop:${K}`]?: CatMenuItem[K] }; + "cat-pagination": Omit & { [K in keyof CatPagination & keyof CatPaginationAttributes]?: CatPagination[K] } & { [K in keyof CatPagination & keyof CatPaginationAttributes as `attr:${K}`]?: CatPaginationAttributes[K] } & { [K in keyof CatPagination & keyof CatPaginationAttributes as `prop:${K}`]?: CatPagination[K] }; + "cat-radio": Omit & { [K in keyof CatRadio & keyof CatRadioAttributes]?: CatRadio[K] } & { [K in keyof CatRadio & keyof CatRadioAttributes as `attr:${K}`]?: CatRadioAttributes[K] } & { [K in keyof CatRadio & keyof CatRadioAttributes as `prop:${K}`]?: CatRadio[K] }; + "cat-radio-group": Omit & { [K in keyof CatRadioGroup & keyof CatRadioGroupAttributes]?: CatRadioGroup[K] } & { [K in keyof CatRadioGroup & keyof CatRadioGroupAttributes as `attr:${K}`]?: CatRadioGroupAttributes[K] } & { [K in keyof CatRadioGroup & keyof CatRadioGroupAttributes as `prop:${K}`]?: CatRadioGroup[K] }; + "cat-scrollable": Omit & { [K in keyof CatScrollable & keyof CatScrollableAttributes]?: CatScrollable[K] } & { [K in keyof CatScrollable & keyof CatScrollableAttributes as `attr:${K}`]?: CatScrollableAttributes[K] } & { [K in keyof CatScrollable & keyof CatScrollableAttributes as `prop:${K}`]?: CatScrollable[K] }; + "cat-select": Omit & { [K in keyof CatSelect & keyof CatSelectAttributes]?: CatSelect[K] } & { [K in keyof CatSelect & keyof CatSelectAttributes as `attr:${K}`]?: CatSelectAttributes[K] } & { [K in keyof CatSelect & keyof CatSelectAttributes as `prop:${K}`]?: CatSelect[K] }; "cat-select-demo": CatSelectDemo; - "cat-skeleton": CatSkeleton; - "cat-spinner": CatSpinner; - "cat-tab": CatTab; - "cat-tabs": CatTabs; - "cat-tag": CatTag; - "cat-textarea": CatTextarea; - "cat-time": CatTime; - "cat-toggle": CatToggle; - "cat-tooltip": CatTooltip; + "cat-skeleton": Omit & { [K in keyof CatSkeleton & keyof CatSkeletonAttributes]?: CatSkeleton[K] } & { [K in keyof CatSkeleton & keyof CatSkeletonAttributes as `attr:${K}`]?: CatSkeletonAttributes[K] } & { [K in keyof CatSkeleton & keyof CatSkeletonAttributes as `prop:${K}`]?: CatSkeleton[K] }; + "cat-spinner": Omit & { [K in keyof CatSpinner & keyof CatSpinnerAttributes]?: CatSpinner[K] } & { [K in keyof CatSpinner & keyof CatSpinnerAttributes as `attr:${K}`]?: CatSpinnerAttributes[K] } & { [K in keyof CatSpinner & keyof CatSpinnerAttributes as `prop:${K}`]?: CatSpinner[K] }; + "cat-tab": Omit & { [K in keyof CatTab & keyof CatTabAttributes]?: CatTab[K] } & { [K in keyof CatTab & keyof CatTabAttributes as `attr:${K}`]?: CatTabAttributes[K] } & { [K in keyof CatTab & keyof CatTabAttributes as `prop:${K}`]?: CatTab[K] }; + "cat-tabs": Omit & { [K in keyof CatTabs & keyof CatTabsAttributes]?: CatTabs[K] } & { [K in keyof CatTabs & keyof CatTabsAttributes as `attr:${K}`]?: CatTabsAttributes[K] } & { [K in keyof CatTabs & keyof CatTabsAttributes as `prop:${K}`]?: CatTabs[K] }; + "cat-tag": Omit & { [K in keyof CatTag & keyof CatTagAttributes]?: CatTag[K] } & { [K in keyof CatTag & keyof CatTagAttributes as `attr:${K}`]?: CatTagAttributes[K] } & { [K in keyof CatTag & keyof CatTagAttributes as `prop:${K}`]?: CatTag[K] }; + "cat-textarea": Omit & { [K in keyof CatTextarea & keyof CatTextareaAttributes]?: CatTextarea[K] } & { [K in keyof CatTextarea & keyof CatTextareaAttributes as `attr:${K}`]?: CatTextareaAttributes[K] } & { [K in keyof CatTextarea & keyof CatTextareaAttributes as `prop:${K}`]?: CatTextarea[K] }; + "cat-time": Omit & { [K in keyof CatTime & keyof CatTimeAttributes]?: CatTime[K] } & { [K in keyof CatTime & keyof CatTimeAttributes as `attr:${K}`]?: CatTimeAttributes[K] } & { [K in keyof CatTime & keyof CatTimeAttributes as `prop:${K}`]?: CatTime[K] }; + "cat-toggle": Omit & { [K in keyof CatToggle & keyof CatToggleAttributes]?: CatToggle[K] } & { [K in keyof CatToggle & keyof CatToggleAttributes as `attr:${K}`]?: CatToggleAttributes[K] } & { [K in keyof CatToggle & keyof CatToggleAttributes as `prop:${K}`]?: CatToggle[K] }; + "cat-tooltip": Omit & { [K in keyof CatTooltip & keyof CatTooltipAttributes]?: CatTooltip[K] } & { [K in keyof CatTooltip & keyof CatTooltipAttributes as `attr:${K}`]?: CatTooltipAttributes[K] } & { [K in keyof CatTooltip & keyof CatTooltipAttributes as `prop:${K}`]?: CatTooltip[K] }; } } export { LocalJSX as JSX }; @@ -5094,77 +5543,77 @@ declare module "@stencil/core" { * Informs user about important changes or conditions in the interface. Use this * component if you need to capture user’s attention in a prominent way. */ - "cat-alert": LocalJSX.CatAlert & JSXBase.HTMLAttributes; + "cat-alert": LocalJSX.IntrinsicElements["cat-alert"] & JSXBase.HTMLAttributes; /** * Avatars are used to represent a person or object. */ - "cat-avatar": LocalJSX.CatAvatar & JSXBase.HTMLAttributes; + "cat-avatar": LocalJSX.IntrinsicElements["cat-avatar"] & JSXBase.HTMLAttributes; /** * Badges are used to inform users of the status of an object or of an action * that’s been taken. */ - "cat-badge": LocalJSX.CatBadge & JSXBase.HTMLAttributes; + "cat-badge": LocalJSX.IntrinsicElements["cat-badge"] & JSXBase.HTMLAttributes; /** * Buttons are used for interface actions. Primary style should be used only * once per view for main call-to-action. */ - "cat-button": LocalJSX.CatButton & JSXBase.HTMLAttributes; + "cat-button": LocalJSX.IntrinsicElements["cat-button"] & JSXBase.HTMLAttributes; /** * Button groups are designed to bring together button controls that are of a * similar nature. For example text formatting controls. */ - "cat-button-group": LocalJSX.CatButtonGroup & JSXBase.HTMLAttributes; + "cat-button-group": LocalJSX.IntrinsicElements["cat-button-group"] & JSXBase.HTMLAttributes; /** * Cards are surfaces that display content and actions on a single topic. They * should be easy to scan for relevant and actionable information. */ - "cat-card": LocalJSX.CatCard & JSXBase.HTMLAttributes; + "cat-card": LocalJSX.IntrinsicElements["cat-card"] & JSXBase.HTMLAttributes; /** * Checkboxes are used to let a user choose one or more options from a limited * number of options. */ - "cat-checkbox": LocalJSX.CatCheckbox & JSXBase.HTMLAttributes; + "cat-checkbox": LocalJSX.IntrinsicElements["cat-checkbox"] & JSXBase.HTMLAttributes; /** * A date input component to select a date from a calendar in a dropdown. */ - "cat-date": LocalJSX.CatDate & JSXBase.HTMLAttributes; + "cat-date": LocalJSX.IntrinsicElements["cat-date"] & JSXBase.HTMLAttributes; /** * An inline date picker component to select a date. */ - "cat-date-inline": LocalJSX.CatDateInline & JSXBase.HTMLAttributes; - "cat-datepicker": LocalJSX.CatDatepicker & JSXBase.HTMLAttributes; - "cat-datepicker-inline": LocalJSX.CatDatepickerInline & JSXBase.HTMLAttributes; + "cat-date-inline": LocalJSX.IntrinsicElements["cat-date-inline"] & JSXBase.HTMLAttributes; + "cat-datepicker": LocalJSX.IntrinsicElements["cat-datepicker"] & JSXBase.HTMLAttributes; + "cat-datepicker-inline": LocalJSX.IntrinsicElements["cat-datepicker-inline"] & JSXBase.HTMLAttributes; /** * A dropdown component to display a list of actions in a dropdown menu or to * show additional content on demand. */ - "cat-dropdown": LocalJSX.CatDropdown & JSXBase.HTMLAttributes; + "cat-dropdown": LocalJSX.IntrinsicElements["cat-dropdown"] & JSXBase.HTMLAttributes; /** * A form group component to group form fields and labels. */ - "cat-form-group": LocalJSX.CatFormGroup & JSXBase.HTMLAttributes; + "cat-form-group": LocalJSX.IntrinsicElements["cat-form-group"] & JSXBase.HTMLAttributes; /** * Icons are used to provide additional meaning or in places where text label * doesn't fit. */ - "cat-icon": LocalJSX.CatIcon & JSXBase.HTMLAttributes; + "cat-icon": LocalJSX.IntrinsicElements["cat-icon"] & JSXBase.HTMLAttributes; /** * Inputs are used to allow users to provide text input when the expected input * is short. As well as plain text, Input supports various types of text, * including passwords and numbers. */ - "cat-input": LocalJSX.CatInput & JSXBase.HTMLAttributes; + "cat-input": LocalJSX.IntrinsicElements["cat-input"] & JSXBase.HTMLAttributes; /** * A menu component that provides a dropdown with a built-in configurable trigger button * and proper ARIA semantics and keyboard navigation for menu items. * The trigger is always a cat-button with sensible defaults but fully configurable * through trigger-specific props. */ - "cat-menu": LocalJSX.CatMenu & JSXBase.HTMLAttributes; + "cat-menu": LocalJSX.IntrinsicElements["cat-menu"] & JSXBase.HTMLAttributes; /** * A menu item component that renders as a button with proper ARIA semantics. */ - "cat-menu-item": LocalJSX.CatMenuItem & JSXBase.HTMLAttributes; + "cat-menu-item": LocalJSX.IntrinsicElements["cat-menu-item"] & JSXBase.HTMLAttributes; /** * A navigation component to switch between different pages of paged chunks of * data such as a table. Pagination is built with list HTML elements and a @@ -5172,68 +5621,68 @@ declare module "@stencil/core" { * readers and other assistive technologies. Furthermore, the current page is * correctly highlighted using `aria-current`. */ - "cat-pagination": LocalJSX.CatPagination & JSXBase.HTMLAttributes; + "cat-pagination": LocalJSX.IntrinsicElements["cat-pagination"] & JSXBase.HTMLAttributes; /** * Radio Buttons are graphical interface elements that allow user to choose * only one of a predefined set of mutually exclusive options. */ - "cat-radio": LocalJSX.CatRadio & JSXBase.HTMLAttributes; + "cat-radio": LocalJSX.IntrinsicElements["cat-radio"] & JSXBase.HTMLAttributes; /** * A group of radio buttons. */ - "cat-radio-group": LocalJSX.CatRadioGroup & JSXBase.HTMLAttributes; + "cat-radio-group": LocalJSX.IntrinsicElements["cat-radio-group"] & JSXBase.HTMLAttributes; /** * An element to display scrollable content. */ - "cat-scrollable": LocalJSX.CatScrollable & JSXBase.HTMLAttributes; + "cat-scrollable": LocalJSX.IntrinsicElements["cat-scrollable"] & JSXBase.HTMLAttributes; /** * Select lets user choose one option from an options' menu. * Consider using select when you have 6 or more options. Select component supports any content type. */ - "cat-select": LocalJSX.CatSelect & JSXBase.HTMLAttributes; - "cat-select-demo": LocalJSX.CatSelectDemo & JSXBase.HTMLAttributes; + "cat-select": LocalJSX.IntrinsicElements["cat-select"] & JSXBase.HTMLAttributes; + "cat-select-demo": LocalJSX.IntrinsicElements["cat-select-demo"] & JSXBase.HTMLAttributes; /** * Skeletons are used to show where content will eventually be drawn. */ - "cat-skeleton": LocalJSX.CatSkeleton & JSXBase.HTMLAttributes; + "cat-skeleton": LocalJSX.IntrinsicElements["cat-skeleton"] & JSXBase.HTMLAttributes; /** * Spinners are used to indicate users that their action is being processed. */ - "cat-spinner": LocalJSX.CatSpinner & JSXBase.HTMLAttributes; + "cat-spinner": LocalJSX.IntrinsicElements["cat-spinner"] & JSXBase.HTMLAttributes; /** * A single tab inside a tabs component. */ - "cat-tab": LocalJSX.CatTab & JSXBase.HTMLAttributes; + "cat-tab": LocalJSX.IntrinsicElements["cat-tab"] & JSXBase.HTMLAttributes; /** * Tabs are used to display multiple panels to be contained within a single * window, using tabs as a navigational element. */ - "cat-tabs": LocalJSX.CatTabs & JSXBase.HTMLAttributes; + "cat-tabs": LocalJSX.IntrinsicElements["cat-tabs"] & JSXBase.HTMLAttributes; /** * An input that allows multiple values to be entered as tags. */ - "cat-tag": LocalJSX.CatTag & JSXBase.HTMLAttributes; + "cat-tag": LocalJSX.IntrinsicElements["cat-tag"] & JSXBase.HTMLAttributes; /** * Textarea specifies a control that allows user to write text over multiple * rows. Used when the expected user input is long. For shorter input, use the * input component. */ - "cat-textarea": LocalJSX.CatTextarea & JSXBase.HTMLAttributes; + "cat-textarea": LocalJSX.IntrinsicElements["cat-textarea"] & JSXBase.HTMLAttributes; /** * A time input component to select a time in a dropdown. */ - "cat-time": LocalJSX.CatTime & JSXBase.HTMLAttributes; + "cat-time": LocalJSX.IntrinsicElements["cat-time"] & JSXBase.HTMLAttributes; /** * Toggles are graphical interface switches that give user control over a * feature or option that can be turned on or off. */ - "cat-toggle": LocalJSX.CatToggle & JSXBase.HTMLAttributes; + "cat-toggle": LocalJSX.IntrinsicElements["cat-toggle"] & JSXBase.HTMLAttributes; /** * Tooltips display additional information when the user hovers over or * interacts with a trigger element. The tooltip can be customized with * different placements, sizes, and styles. */ - "cat-tooltip": LocalJSX.CatTooltip & JSXBase.HTMLAttributes; + "cat-tooltip": LocalJSX.IntrinsicElements["cat-tooltip"] & JSXBase.HTMLAttributes; } } } diff --git a/core/src/components/cat-alert/cat-alert.spec.tsx b/core/src/components/cat-alert/cat-alert.spec.tsx index 8f3c72fec..0da3d077c 100644 --- a/core/src/components/cat-alert/cat-alert.spec.tsx +++ b/core/src/components/cat-alert/cat-alert.spec.tsx @@ -1,14 +1,13 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatAlert } from './cat-alert'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-alert'; describe('cat-alert', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatAlert], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-avatar/cat-avatar.spec.tsx b/core/src/components/cat-avatar/cat-avatar.spec.tsx index be17a7000..d4b3a73ee 100644 --- a/core/src/components/cat-avatar/cat-avatar.spec.tsx +++ b/core/src/components/cat-avatar/cat-avatar.spec.tsx @@ -1,14 +1,13 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatAvatar } from './cat-avatar'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-avatar'; describe('cat-avatar', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatAvatar], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-badge/cat-badge.spec.tsx b/core/src/components/cat-badge/cat-badge.spec.tsx index a38b983d1..c0c49bc3c 100644 --- a/core/src/components/cat-badge/cat-badge.spec.tsx +++ b/core/src/components/cat-badge/cat-badge.spec.tsx @@ -1,14 +1,13 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatBadge } from './cat-badge'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-badge'; describe('cat-badge', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatBadge], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-button-group/cat-button-group.spec.tsx b/core/src/components/cat-button-group/cat-button-group.spec.tsx index 0d3cd8006..bebe60515 100644 --- a/core/src/components/cat-button-group/cat-button-group.spec.tsx +++ b/core/src/components/cat-button-group/cat-button-group.spec.tsx @@ -1,14 +1,13 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatButtonGroup } from './cat-button-group'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-button-group'; describe('cat-button-group', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatButtonGroup], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-button/cat-button.spec.tsx b/core/src/components/cat-button/cat-button.spec.tsx index 4d7378c96..11cdde06f 100644 --- a/core/src/components/cat-button/cat-button.spec.tsx +++ b/core/src/components/cat-button/cat-button.spec.tsx @@ -1,20 +1,19 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatButton } from './cat-button'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-button'; describe('cat-button', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatButton], - html: `` - }); - expect(page.root?.shadowRoot).toEqualLightHtml(` - + const { root } = await render(); + await expect(root.shadowRoot).toEqualHtml(` + `); }); }); diff --git a/core/src/components/cat-card/cat-card.spec.tsx b/core/src/components/cat-card/cat-card.spec.tsx index 9c2faaf58..8af0512a3 100644 --- a/core/src/components/cat-card/cat-card.spec.tsx +++ b/core/src/components/cat-card/cat-card.spec.tsx @@ -1,14 +1,13 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatCard } from './cat-card'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-card'; describe('cat-card', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatCard], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-checkbox/cat-checkbox.spec.tsx b/core/src/components/cat-checkbox/cat-checkbox.spec.tsx index 6e6c3104f..51fe306c7 100644 --- a/core/src/components/cat-checkbox/cat-checkbox.spec.tsx +++ b/core/src/components/cat-checkbox/cat-checkbox.spec.tsx @@ -1,14 +1,13 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatCheckbox } from './cat-checkbox'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-checkbox'; describe('cat-checkbox', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatCheckbox], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-date-inline/cat-date-inline.spec.tsx b/core/src/components/cat-date-inline/cat-date-inline.spec.tsx index ffeb02cbd..59a19d30b 100644 --- a/core/src/components/cat-date-inline/cat-date-inline.spec.tsx +++ b/core/src/components/cat-date-inline/cat-date-inline.spec.tsx @@ -1,17 +1,22 @@ -jest.mock('../cat-i18n/cat-i18n-registry'); +import { vi, describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; -import { CatInput } from '../cat-input/cat-input'; -import { CatDateInline } from './cat-date-inline'; +vi.mock('../cat-i18n/cat-i18n-registry', () => ({ + catI18nRegistry: { + t: vi.fn(() => {}), + getLocale: vi.fn(() => 'en') + } +})); + +import '../cat-input/cat-input'; +import './cat-date-inline'; describe('cat-date-inline', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatDateInline, CatInput], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-date/cat-date.spec.tsx b/core/src/components/cat-date/cat-date.spec.tsx index 8d2e9163e..ca0b4e4ea 100644 --- a/core/src/components/cat-date/cat-date.spec.tsx +++ b/core/src/components/cat-date/cat-date.spec.tsx @@ -1,18 +1,18 @@ -jest.mock('../cat-i18n/cat-i18n-registry'); +import { vi, describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; -import { CatDateInline } from '../cat-date-inline/cat-date-inline'; -import { CatInput } from '../cat-input/cat-input'; -import { CatDate } from './cat-date'; +vi.mock('../cat-i18n/cat-i18n-registry'); + +import '../cat-date-inline/cat-date-inline'; +import '../cat-input/cat-input'; +import './cat-date'; describe('cat-date', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatDate, CatInput, CatDateInline], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-datepicker-inline/cat-datepicker-inline.spec.tsx b/core/src/components/cat-datepicker-inline/cat-datepicker-inline.spec.tsx index d80e0da97..ab74e65cf 100644 --- a/core/src/components/cat-datepicker-inline/cat-datepicker-inline.spec.tsx +++ b/core/src/components/cat-datepicker-inline/cat-datepicker-inline.spec.tsx @@ -1,16 +1,16 @@ -jest.mock('../cat-i18n/cat-i18n-registry'); +import { vi, describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; -import { CatDatepickerInline } from './cat-datepicker-inline'; +vi.mock('../cat-i18n/cat-i18n-registry'); + +import './cat-datepicker-inline'; describe('cat-datepicker-inline', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatDatepickerInline], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-datepicker/cat-datepicker.spec.tsx b/core/src/components/cat-datepicker/cat-datepicker.spec.tsx index f0367bfe0..5c711d973 100644 --- a/core/src/components/cat-datepicker/cat-datepicker.spec.tsx +++ b/core/src/components/cat-datepicker/cat-datepicker.spec.tsx @@ -1,16 +1,16 @@ -jest.mock('../cat-i18n/cat-i18n-registry'); +import { vi, describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; -import { CatDatepickerFlat } from './cat-datepicker'; +vi.mock('../cat-i18n/cat-i18n-registry'); + +import './cat-datepicker'; describe('cat-datepicker', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatDatepickerFlat], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-datepicker/readme.md b/core/src/components/cat-datepicker/readme.md index f0e9b6853..cf4c0759d 100644 --- a/core/src/components/cat-datepicker/readme.md +++ b/core/src/components/cat-datepicker/readme.md @@ -7,36 +7,36 @@ ## Properties -| Property | Attribute | Description | Type | Default | -| ------------------------ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | -| `attachToElement` | `attach-to-element` | Instead of body, appends the calendar to the cat-datepicker element instead | `boolean` | `false` | -| `autoComplete` | `auto-complete` | Hint for form autofill feature. | `string` | `'off'` | -| `clearable` | `clearable` | Whether the input should show a clear button. | `boolean` | `false` | -| `disabled` | `disabled` | Whether the input is disabled. | `boolean` | `false` | -| `errorUpdate` | `error-update` | Fine-grained control over when the errors are shown. Can be `false` to never show errors, `true` to show errors on blur, or a number to show errors change with the given delay in milliseconds or immediately on blur. | `boolean \| number` | `0` | -| `errors` | `errors` | The validation errors for this input. Will render a hint under the input with the translated error message(s) `error.${key}`. If an object is passed, the keys will be used as error keys and the values translation parameters. If the value is `true`, the input will be marked as invalid without any hints under the input. | `boolean \| string[] \| undefined \| { [key: string]: any; }` | `undefined` | -| `hint` | `hint` | Optional hint text(s) to be displayed with the input. | `string \| string[] \| undefined` | `undefined` | -| `horizontal` | `horizontal` | Whether the label is on top or left. | `boolean \| undefined` | `undefined` | -| `icon` | `icon` | The name of an icon to be displayed in the input. | `string \| undefined` | `undefined` | -| `iconRight` | `icon-right` | Display the icon on the right. | `boolean` | `false` | -| `identifier` | `identifier` | A unique identifier for the input. | `string \| undefined` | `undefined` | -| `label` | `label` | The label for the input. | `string` | `''` | -| `labelHidden` | `label-hidden` | Visually hide the label, but still show it to assistive technologies like screen readers. | `boolean` | `false` | -| `max` | `max` | A maximum value as ISO Date string, e.g. 2017-03-04T01:23:43.000Z. | `string \| undefined` | `undefined` | -| `min` | `min` | A minimum value as ISO Date string, e.g. 2017-03-04T01:23:43.000Z. | `string \| undefined` | `undefined` | -| `mode` | `mode` | The mode of the datepicker, to select a date, time, both, a date range or a week number. | `"date" \| "daterange" \| "datetime" \| "time" \| "week"` | `'date'` | -| `name` | `name` | The name of the form control. Submitted with the form as part of a name/value pair. | `string \| undefined` | `undefined` | -| `nativeAttributes` | -- | Attributes that will be added to the native HTML input element. | `undefined \| { [key: string]: string; }` | `undefined` | -| `nativePickerAttributes` | -- | Attributes that will be added to the rendered HTML datepicker element. | `undefined \| { [key: string]: string; }` | `undefined` | -| `placeholder` | `placeholder` | The placeholder text to display within the input. | `string \| undefined` | `undefined` | -| `position` | `position` | Where the calendar is rendered relative to the input vertically and horizontally. In the format of "[vertical] [horizontal]". Vertical can be auto, above or below (required). Horizontal can be left, center or right. If | `"auto" \| Placement \| "above" \| "below" \| "auto left" \| "auto center" \| "auto right" \| "above left" \| "above center" \| "above right" \| "below left" \| "below center" \| "below right" \| ((self: Instance, customElement: HTMLElement \| undefined) => void) \| undefined` | `undefined` | -| `readonly` | `readonly` | The value is not editable. | `boolean` | `false` | -| `required` | `required` | A value is required or must be check for the form to be submittable. | `boolean` | `false` | -| `requiredMarker` | `required-marker` | Whether the label need a marker to shown if the input is required or optional. | `"none!" \| "none" \| "optional!" \| "optional" \| "required!" \| "required" \| undefined` | `'optional'` | -| `step` | `step` | The step size to use when changing the time. | `number` | `5` | -| `textPrefix` | `text-prefix` | A textual prefix to be displayed in the input. | `string \| undefined` | `undefined` | -| `textSuffix` | `text-suffix` | A textual suffix to be displayed in the input. | `string \| undefined` | `undefined` | -| `value` | `value` | The value as ISO Date string, e.g. 2017-03-04T01:23:43.000Z or as a week number string. | `string \| undefined` | `undefined` | +| Property | Attribute | Description | Type | Default | +| ------------------------ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| `attachToElement` | `attach-to-element` | Instead of body, appends the calendar to the cat-datepicker element instead | `boolean` | `false` | +| `autoComplete` | `auto-complete` | Hint for form autofill feature. | `string` | `'off'` | +| `clearable` | `clearable` | Whether the input should show a clear button. | `boolean` | `false` | +| `disabled` | `disabled` | Whether the input is disabled. | `boolean` | `false` | +| `errorUpdate` | `error-update` | Fine-grained control over when the errors are shown. Can be `false` to never show errors, `true` to show errors on blur, or a number to show errors change with the given delay in milliseconds or immediately on blur. | `boolean \| number` | `0` | +| `errors` | `errors` | The validation errors for this input. Will render a hint under the input with the translated error message(s) `error.${key}`. If an object is passed, the keys will be used as error keys and the values translation parameters. If the value is `true`, the input will be marked as invalid without any hints under the input. | `boolean \| string[] \| undefined \| { [key: string]: any; }` | `undefined` | +| `hint` | `hint` | Optional hint text(s) to be displayed with the input. | `string \| string[] \| undefined` | `undefined` | +| `horizontal` | `horizontal` | Whether the label is on top or left. | `boolean \| undefined` | `undefined` | +| `icon` | `icon` | The name of an icon to be displayed in the input. | `string \| undefined` | `undefined` | +| `iconRight` | `icon-right` | Display the icon on the right. | `boolean` | `false` | +| `identifier` | `identifier` | A unique identifier for the input. | `string \| undefined` | `undefined` | +| `label` | `label` | The label for the input. | `string` | `''` | +| `labelHidden` | `label-hidden` | Visually hide the label, but still show it to assistive technologies like screen readers. | `boolean` | `false` | +| `max` | `max` | A maximum value as ISO Date string, e.g. 2017-03-04T01:23:43.000Z. | `string \| undefined` | `undefined` | +| `min` | `min` | A minimum value as ISO Date string, e.g. 2017-03-04T01:23:43.000Z. | `string \| undefined` | `undefined` | +| `mode` | `mode` | The mode of the datepicker, to select a date, time, both, a date range or a week number. | `"date" \| "daterange" \| "datetime" \| "time" \| "week"` | `'date'` | +| `name` | `name` | The name of the form control. Submitted with the form as part of a name/value pair. | `string \| undefined` | `undefined` | +| `nativeAttributes` | -- | Attributes that will be added to the native HTML input element. | `undefined \| { [key: string]: string; }` | `undefined` | +| `nativePickerAttributes` | -- | Attributes that will be added to the rendered HTML datepicker element. | `undefined \| { [key: string]: string; }` | `undefined` | +| `placeholder` | `placeholder` | The placeholder text to display within the input. | `string \| undefined` | `undefined` | +| `position` | `position` | Where the calendar is rendered relative to the input vertically and horizontally. In the format of "[vertical] [horizontal]". Vertical can be auto, above or below (required). Horizontal can be left, center or right. If | `"above center" \| "above left" \| "above right" \| "above" \| "auto center" \| "auto left" \| "auto right" \| "auto" \| "below center" \| "below left" \| "below right" \| "below" \| "bottom" \| "bottom-end" \| "bottom-start" \| "left" \| "left-end" \| "left-start" \| "right" \| "right-end" \| "right-start" \| "top" \| "top-end" \| "top-start" \| ((self: Instance, customElement: HTMLElement \| undefined) => void) \| undefined` | `undefined` | +| `readonly` | `readonly` | The value is not editable. | `boolean` | `false` | +| `required` | `required` | A value is required or must be check for the form to be submittable. | `boolean` | `false` | +| `requiredMarker` | `required-marker` | Whether the label need a marker to shown if the input is required or optional. | `"none!" \| "none" \| "optional!" \| "optional" \| "required!" \| "required" \| undefined` | `'optional'` | +| `step` | `step` | The step size to use when changing the time. | `number` | `5` | +| `textPrefix` | `text-prefix` | A textual prefix to be displayed in the input. | `string \| undefined` | `undefined` | +| `textSuffix` | `text-suffix` | A textual suffix to be displayed in the input. | `string \| undefined` | `undefined` | +| `value` | `value` | The value as ISO Date string, e.g. 2017-03-04T01:23:43.000Z or as a week number string. | `string \| undefined` | `undefined` | ## Events diff --git a/core/src/components/cat-dropdown/cat-dropdown.spec.tsx b/core/src/components/cat-dropdown/cat-dropdown.spec.tsx index f05863496..36fc976c1 100644 --- a/core/src/components/cat-dropdown/cat-dropdown.spec.tsx +++ b/core/src/components/cat-dropdown/cat-dropdown.spec.tsx @@ -1,58 +1,64 @@ -jest.mock('../../utils/first-tabbable', () => (element: HTMLSlotElement) => element); +import { vi, describe, it, expect, beforeEach } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; -const mockAutoUpdateCleanup = jest.fn(); -const mockAutoUpdate = jest.fn((_reference, _floating, update) => { - update(); - return mockAutoUpdateCleanup; -}); -const mockFlip = jest.fn(() => ({})); -const mockOffset = jest.fn(() => ({})); -const mockShift = jest.fn(() => ({})); -const mockSize = jest.fn(() => ({})); +vi.mock('../../utils/first-tabbable', () => ({ + default: (element: HTMLSlotElement) => element +})); + +const mockAutoUpdateCleanup = vi.fn(); +const mockAutoUpdate = vi.hoisted(() => + vi.fn((_reference, _floating, update) => { + update(); + return mockAutoUpdateCleanup; + }) +); +const mockFlip = vi.hoisted(() => vi.fn(() => ({}))); +const mockOffset = vi.hoisted(() => vi.fn(() => ({}))); +const mockShift = vi.hoisted(() => vi.fn(() => ({}))); +const mockSize = vi.hoisted(() => vi.fn(() => ({}))); -jest.mock('@floating-ui/dom', () => ({ +vi.mock('@floating-ui/dom', () => ({ autoUpdate: mockAutoUpdate, - computePosition: jest.fn(() => Promise.resolve({ x: 0, y: 0, placement: 'bottom-start' })), + computePosition: vi.fn(() => Promise.resolve({ x: 0, y: 0, placement: 'bottom-start' })), flip: mockFlip, offset: mockOffset, shift: mockShift, size: mockSize })); -const mockTrapDeactivate = jest.fn(); -const mockTrapActivate = jest.fn(); +const mockTrapDeactivate = vi.fn(); +const mockTrapActivate = vi.fn(); const mockTrap = { activate: mockTrapActivate, deactivate: mockTrapDeactivate, - updateContainerElements: jest.fn(function () { + updateContainerElements: vi.fn(() => { return this; }) }; -const mockCreateFocusTrap = jest.fn(() => mockTrap); +const mockCreateFocusTrap = vi.hoisted(() => vi.fn(() => mockTrap)); -jest.mock('focus-trap', () => ({ +vi.mock('focus-trap', () => ({ createFocusTrap: mockCreateFocusTrap })); -import { newSpecPage } from '@stencil/core/testing'; -import { CatDropdown } from './cat-dropdown'; +import './cat-dropdown'; describe('cat-dropdown', () => { beforeEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('renders', async () => { - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root } = await render( + - ` - }); - expect(page.root).toEqualLightHtml(` - + + ); + await expect(root).toEqualLightHtml(` + @@ -61,31 +67,27 @@ describe('cat-dropdown', () => { describe('autoUpdate ', () => { it('should not set up autoUpdate on component load', async () => { - await newSpecPage({ - components: [CatDropdown], - html: ` + await render( + - ` - }); - + + ); expect(mockAutoUpdate).not.toHaveBeenCalled(); }); it('should set up autoUpdate when dropdown is opened', async () => { - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root, instance } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; - const triggerElement = page.root?.querySelector('[slot="trigger"]'); - const contentElement = page.root?.shadowRoot?.querySelector('.content'); + const triggerElement = root?.querySelector('[slot="trigger"]'); + const contentElement = root?.shadowRoot?.querySelector('.content'); - await dropdown.open(); + await instance.open(); // autoUpdate is called immediately when dropdown opens expect(mockAutoUpdate).toHaveBeenCalledTimes(1); @@ -97,20 +99,18 @@ describe('cat-dropdown', () => { }); it('should set up autoUpdate with anchor element when anchor is provided', async () => { - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root, instance } = await render( +
-
` - }); +
+ ); - const dropdown = page.rootInstance as CatDropdown; - const anchorElement = page.root?.querySelector('[slot="anchor"]'); - const contentElement = page.root?.shadowRoot?.querySelector('.content'); + const anchorElement = root?.querySelector('[slot="anchor"]'); + const contentElement = root?.shadowRoot?.querySelector('.content'); - await dropdown.open(); + await instance.open(); expect(mockAutoUpdate).toHaveBeenCalledTimes(1); @@ -121,47 +121,43 @@ describe('cat-dropdown', () => { }); it('should clean up on component disconnect', async () => { - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { instance, waitForChanges } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; - await dropdown.open(); - await page.waitForChanges(); + await instance.open(); + await waitForChanges(); // Wait for focus trap setup in setTimeout await new Promise(resolve => setTimeout(resolve, 10)); expect(mockAutoUpdate).toHaveBeenCalledTimes(1); // Trigger disconnectedCallback manually - dropdown.disconnectedCallback(); - await page.waitForChanges(); + instance.disconnectedCallback(); + await waitForChanges(); // The focus trap should be deactivated expect(mockTrapDeactivate).toHaveBeenCalled(); - expect(mockAutoUpdateCleanup).toHaveBeenCalledTimes(1); + expect(mockAutoUpdateCleanup).toHaveBeenCalled(); }); it('should call cleanupFloatingUi when dropdown is closed', async () => { - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root, waitForChanges } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; + const dropdown = root as HTMLCatDropdownElement; await dropdown.open(); - await page.waitForChanges(); + await waitForChanges(); // Wait for open() setTimeout to complete (timeTransitionS = 125ms) await new Promise(resolve => setTimeout(resolve, 150)); - expect(mockAutoUpdate).toHaveBeenCalledTimes(1); expect(dropdown.isOpen).toBe(true); // Close the dropdown @@ -177,17 +173,15 @@ describe('cat-dropdown', () => { describe('flip middleware', () => { it('should call flip middleware with correct arguments', async () => { - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { waitForChanges, instance } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; - await dropdown.open(); - await page.waitForChanges(); + await instance.open(); + await waitForChanges(); // The flip middleware should be called with specific configuration expect(mockFlip).toHaveBeenCalledWith({ @@ -200,26 +194,25 @@ describe('cat-dropdown', () => { describe('keydownHandler', () => { it('should close dropdown when Escape is pressed and dropdown is open', async () => { // given - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root, waitForChanges } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; + const dropdown = root as HTMLCatDropdownElement; await dropdown.open(); - await page.waitForChanges(); + await waitForChanges(); await new Promise(resolve => requestAnimationFrame(() => resolve())); - await page.waitForChanges(); + await waitForChanges(); expect(dropdown.isOpen).toBe(true); // when const escapeEvent = new KeyboardEvent('keydown', { key: 'Escape' }); - page.root?.dispatchEvent(escapeEvent); - await page.waitForChanges(); + root.dispatchEvent(escapeEvent); + await waitForChanges(); await new Promise(resolve => setTimeout(resolve, 150)); // then @@ -228,26 +221,25 @@ describe('cat-dropdown', () => { it('should not close dropdown when non-Escape key is pressed', async () => { // given - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root, waitForChanges } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; + const dropdown = root as HTMLCatDropdownElement; await dropdown.open(); - await page.waitForChanges(); + await waitForChanges(); await new Promise(resolve => requestAnimationFrame(() => resolve())); - await page.waitForChanges(); + await waitForChanges(); expect(dropdown.isOpen).toBe(true); // when const enterEvent = new KeyboardEvent('keydown', { key: 'Enter' }); - page.root?.dispatchEvent(enterEvent); - await page.waitForChanges(); + root.dispatchEvent(enterEvent); + await waitForChanges(); // then expect(dropdown.isOpen).toBe(true); @@ -257,26 +249,25 @@ describe('cat-dropdown', () => { describe('globalClickHandler', () => { it('should close dropdown when clicking outside and dropdown is open', async () => { // given - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root, waitForChanges } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; + const dropdown = root as HTMLCatDropdownElement; dropdown.focusTrap = false; await dropdown.open(); - await page.waitForChanges(); + await waitForChanges(); await new Promise(resolve => requestAnimationFrame(() => resolve())); - await page.waitForChanges(); + await waitForChanges(); expect(dropdown.isOpen).toBe(true); // when - click outside the content window.dispatchEvent(new MouseEvent('click', { bubbles: true, composed: true })); - await page.waitForChanges(); + await waitForChanges(); await new Promise(resolve => setTimeout(resolve, 150)); // then @@ -285,28 +276,27 @@ describe('cat-dropdown', () => { it('should not close dropdown when clicking inside content', async () => { // given - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root, waitForChanges } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; - const content = page.root?.shadowRoot?.querySelector('.content') as HTMLElement; + const dropdown = root as HTMLCatDropdownElement; + const content = root.shadowRoot?.querySelector('.content') as HTMLElement; await dropdown.open(); - await page.waitForChanges(); + await waitForChanges(); await new Promise(resolve => requestAnimationFrame(() => resolve())); - await page.waitForChanges(); + await waitForChanges(); expect(dropdown.isOpen).toBe(true); // when - click inside the content content.dispatchEvent(new MouseEvent('click', { bubbles: true, composed: true })); content.dispatchEvent(new MouseEvent('click', { bubbles: true, composed: true })); - await page.waitForChanges(); + await waitForChanges(); // then expect(dropdown.isOpen).toBe(true); @@ -314,25 +304,24 @@ describe('cat-dropdown', () => { it('should not close dropdown when noAutoClose is true', async () => { // given - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root, waitForChanges } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; + const dropdown = root as HTMLCatDropdownElement; await dropdown.open(); - await page.waitForChanges(); + await waitForChanges(); await new Promise(resolve => requestAnimationFrame(() => resolve())); - await page.waitForChanges(); + await waitForChanges(); expect(dropdown.isOpen).toBe(true); // when - click outside window.dispatchEvent(new MouseEvent('click', { bubbles: true, composed: true })); - await page.waitForChanges(); + await waitForChanges(); // then expect(dropdown.isOpen).toBe(true); @@ -342,23 +331,22 @@ describe('cat-dropdown', () => { describe('open method', () => { it('should emit catOpen event when focusTrap is false', async () => { // given - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root, waitForChanges } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; - const catOpenSpy = jest.fn(); - page.root?.addEventListener('catOpen', catOpenSpy); + const dropdown = root as HTMLCatDropdownElement; + const catOpenSpy = vi.fn(); + root.addEventListener('catOpen', catOpenSpy); // when await dropdown.open(); - await page.waitForChanges(); + await waitForChanges(); await new Promise(resolve => requestAnimationFrame(() => resolve())); - await page.waitForChanges(); + await waitForChanges(); // then expect(catOpenSpy).toHaveBeenCalled(); @@ -366,24 +354,23 @@ describe('cat-dropdown', () => { it('should not create focus trap when focusTrap is false', async () => { // given - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root, waitForChanges } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; + const dropdown = root as HTMLCatDropdownElement; // Clear any previous mock calls - jest.clearAllMocks(); + vi.clearAllMocks(); // when await dropdown.open(); - await page.waitForChanges(); + await waitForChanges(); await new Promise(resolve => requestAnimationFrame(() => resolve())); - await page.waitForChanges(); + await waitForChanges(); // then expect(mockCreateFocusTrap).not.toHaveBeenCalled(); @@ -392,25 +379,23 @@ describe('cat-dropdown', () => { it('should create focus trap and emit catOpen in onPostActivate when focusTrap is true', async () => { // given - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root, instance, waitForChanges } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; - const catOpenSpy = jest.fn(); - page.root?.addEventListener('catOpen', catOpenSpy); + const catOpenSpy = vi.fn(); + root?.addEventListener('catOpen', catOpenSpy); - jest.clearAllMocks(); + vi.clearAllMocks(); // when - await dropdown.open(); - await page.waitForChanges(); + await instance.open(); + await waitForChanges(); await new Promise(resolve => requestAnimationFrame(() => resolve())); - await page.waitForChanges(); + await waitForChanges(); // then expect(mockCreateFocusTrap).toHaveBeenCalled(); @@ -421,28 +406,27 @@ describe('cat-dropdown', () => { describe('close method', () => { it('should not return focus to trigger when called with false', async () => { // given - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root, waitForChanges } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; - const trigger = page.root?.querySelector('[slot="trigger"]') as HTMLButtonElement; - const focusSpy = jest.spyOn(trigger, 'focus'); + const dropdown = root as HTMLCatDropdownElement; + const trigger = root.querySelector('[slot="trigger"]') as HTMLButtonElement; + const focusSpy = vi.spyOn(trigger, 'focus'); await dropdown.open(); - await page.waitForChanges(); + await waitForChanges(); await new Promise(resolve => requestAnimationFrame(() => resolve())); - await page.waitForChanges(); + await waitForChanges(); expect(dropdown.isOpen).toBe(true); // when await dropdown.close(false); - await page.waitForChanges(); + await waitForChanges(); // then expect(focusSpy).not.toHaveBeenCalled(); @@ -450,28 +434,27 @@ describe('cat-dropdown', () => { it('should return focus to trigger when called with true', async () => { // given - const page = await newSpecPage({ - components: [CatDropdown], - html: ` + const { root, waitForChanges } = await render( + - ` - }); + + ); - const dropdown = page.rootInstance as CatDropdown; - const trigger = page.root?.querySelector('[slot="trigger"]') as HTMLButtonElement; - const focusSpy = jest.spyOn(trigger, 'focus'); + const dropdown = root as HTMLCatDropdownElement; + const trigger = root.querySelector('[slot="trigger"]') as HTMLButtonElement; + const focusSpy = vi.spyOn(trigger, 'focus'); await dropdown.open(true); // Open with isFocusVisible = true - await page.waitForChanges(); + await waitForChanges(); await new Promise(resolve => requestAnimationFrame(() => resolve())); - await page.waitForChanges(); + await waitForChanges(); expect(dropdown.isOpen).toBe(true); // when - close without argument (should default to isFocusVisible which is true) await dropdown.close(); - await page.waitForChanges(); + await waitForChanges(); // then expect(focusSpy).toHaveBeenCalled(); diff --git a/core/src/components/cat-form-group/cat-form-group.spec.tsx b/core/src/components/cat-form-group/cat-form-group.spec.tsx index 952da9def..123ad640c 100644 --- a/core/src/components/cat-form-group/cat-form-group.spec.tsx +++ b/core/src/components/cat-form-group/cat-form-group.spec.tsx @@ -1,14 +1,13 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatFormGroup } from './cat-form-group'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-form-group'; describe('cat-form-group', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatFormGroup], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-form-hint/cat-form-hint.spec.tsx b/core/src/components/cat-form-hint/cat-form-hint.spec.tsx index cf6349442..3a9a623a9 100644 --- a/core/src/components/cat-form-hint/cat-form-hint.spec.tsx +++ b/core/src/components/cat-form-hint/cat-form-hint.spec.tsx @@ -1,15 +1,13 @@ -import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; import { CatFormHint } from './cat-form-hint'; +import { h } from '@stencil/core'; describe('CatFormHint', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [], - template: () => - }); - expect(page.root).toEqualLightHtml(` -
+ const { root } = await render(); + await expect(root).toEqualLightHtml(` +
`); }); }); diff --git a/core/src/components/cat-i18n/cat-i18n-registry.spec.tsx b/core/src/components/cat-i18n/cat-i18n-registry.spec.tsx index 826c60d9a..37ff8b4aa 100644 --- a/core/src/components/cat-i18n/cat-i18n-registry.spec.tsx +++ b/core/src/components/cat-i18n/cat-i18n-registry.spec.tsx @@ -1,3 +1,4 @@ +import { describe, it, expect } from 'vitest'; import { catI18nRegistry } from './cat-i18n-registry'; describe('CatI18nRegistry', () => { diff --git a/core/src/components/cat-icon/cat-icon-registry.spec.tsx b/core/src/components/cat-icon/cat-icon-registry.spec.tsx index 3a1806418..9db2960e8 100644 --- a/core/src/components/cat-icon/cat-icon-registry.spec.tsx +++ b/core/src/components/cat-icon/cat-icon-registry.spec.tsx @@ -1,3 +1,4 @@ +import { describe, it, expect } from 'vitest'; import { catIconRegistry } from './cat-icon-registry'; describe('CatIconRegistry', () => { diff --git a/core/src/components/cat-icon/cat-icon.spec.tsx b/core/src/components/cat-icon/cat-icon.spec.tsx index f2d508011..8f15cc5f2 100644 --- a/core/src/components/cat-icon/cat-icon.spec.tsx +++ b/core/src/components/cat-icon/cat-icon.spec.tsx @@ -1,15 +1,20 @@ -jest.mock('./cat-icon-registry'); -import { newSpecPage } from '@stencil/core/testing'; -import { CatIcon } from './cat-icon'; +import { vi, describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; + +vi.mock('./cat-icon-registry', () => ({ + catIconRegistry: { + getIcon: vi.fn(() => {}) + } +})); + +import './cat-icon'; describe('cat-icon', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatIcon], - html: `` - }); - expect(page.root?.shadowRoot).toEqualLightHtml(` - + const { root } = await render(); + await expect(root.shadowRoot).toEqualHtml(` + `); }); }); diff --git a/core/src/components/cat-input/cat-input.spec.tsx b/core/src/components/cat-input/cat-input.spec.tsx index a59b9a1aa..4fb56ded6 100644 --- a/core/src/components/cat-input/cat-input.spec.tsx +++ b/core/src/components/cat-input/cat-input.spec.tsx @@ -1,16 +1,20 @@ -jest.mock('../cat-i18n/cat-i18n-registry'); +import { describe, it, expect, vi } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; -import { CatInput } from './cat-input'; +vi.mock('../cat-i18n/cat-i18n-registry', () => ({ + catI18nRegistry: { + t: vi.fn(() => {}) + } +})); + +import './cat-input'; describe('cat-input', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatInput], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-menu-item/cat-menu-item.spec.tsx b/core/src/components/cat-menu-item/cat-menu-item.spec.tsx index 3444f7b03..ca2170a5d 100644 --- a/core/src/components/cat-menu-item/cat-menu-item.spec.tsx +++ b/core/src/components/cat-menu-item/cat-menu-item.spec.tsx @@ -1,18 +1,18 @@ -jest.mock('../cat-i18n/cat-i18n-registry'); +import { vi, describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; -import { CatMenuItem } from './cat-menu-item'; -import { CatButton } from '../cat-button/cat-button'; -import { CatIcon } from '../cat-icon/cat-icon'; +vi.mock('../cat-i18n/cat-i18n-registry'); + +import './cat-menu-item'; +import '../cat-button/cat-button'; +import '../cat-icon/cat-icon'; describe('cat-menu-item', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatMenuItem], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); @@ -20,15 +20,12 @@ describe('cat-menu-item', () => { describe('doFocus', () => { it('should pass focus options to the underlying button', async () => { // given - const page = await newSpecPage({ - components: [CatMenuItem, CatButton, CatIcon], - html: `Test Item` - }); - const menuItem = page.rootInstance as CatMenuItem; - const button = page.root?.shadowRoot?.querySelector('cat-button') as HTMLCatButtonElement; + const { root } = await render(Test Item); + const menuItem = root as HTMLCatMenuItemElement; + const button = root.shadowRoot?.querySelector('cat-button') as HTMLCatButtonElement; const nativeButton = button?.shadowRoot?.querySelector('button') as HTMLButtonElement; - const focusSpy = jest.spyOn(nativeButton, 'focus'); + const focusSpy = vi.spyOn(nativeButton, 'focus'); const focusOptions: FocusOptions = { preventScroll: true }; // when @@ -42,20 +39,17 @@ describe('cat-menu-item', () => { describe('doBlur', () => { it('should programmatically blur the menu item', async () => { // given - const page = await newSpecPage({ - components: [CatMenuItem, CatButton, CatIcon], - html: `Test Item` - }); - const menuItem = page.rootInstance as CatMenuItem; - const button = page.root?.shadowRoot?.querySelector('cat-button') as HTMLCatButtonElement; + const { root, waitForChanges } = await render(Test Item); + const menuItem = root as HTMLCatMenuItemElement; + const button = root.shadowRoot?.querySelector('cat-button') as HTMLCatButtonElement; const nativeButton = button?.shadowRoot?.querySelector('button') as HTMLButtonElement; // Focus first so we can blur await menuItem.doFocus(); - await page.waitForChanges(); + await waitForChanges(); // Mock the native button's blur method - const blurSpy = jest.spyOn(nativeButton, 'blur'); + const blurSpy = vi.spyOn(nativeButton, 'blur'); // when await menuItem.doBlur(); diff --git a/core/src/components/cat-menu/cat-menu.spec.tsx b/core/src/components/cat-menu/cat-menu.spec.tsx index e2a2d3336..3875b9e7c 100644 --- a/core/src/components/cat-menu/cat-menu.spec.tsx +++ b/core/src/components/cat-menu/cat-menu.spec.tsx @@ -1,59 +1,57 @@ +import { vi, describe, it, expect, beforeEach } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; + // Mock the icon registry to prevent console errors -jest.mock('../cat-icon/cat-icon-registry'); +vi.mock('../cat-icon/cat-icon-registry'); -import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; -import { CatMenu } from './cat-menu'; -import { CatDropdown } from '../cat-dropdown/cat-dropdown'; -import { CatButton } from '../cat-button/cat-button'; -import { CatMenuItem } from '../cat-menu-item/cat-menu-item'; -import { CatIcon } from '../cat-icon/cat-icon'; +import './cat-menu'; +import '../cat-dropdown/cat-dropdown'; +import '../cat-button/cat-button'; +import '../cat-menu-item/cat-menu-item'; +import '../cat-icon/cat-icon'; // Mock the floating-ui dependencies used by cat-dropdown -jest.mock('@floating-ui/dom', () => ({ - autoUpdate: jest.fn(() => jest.fn()), - computePosition: jest.fn(() => ({})), - flip: jest.fn(() => ({})), - offset: jest.fn(() => ({})), - shift: jest.fn(() => ({})), - size: jest.fn(() => ({})) +vi.mock('@floating-ui/dom', () => ({ + autoUpdate: vi.fn(() => vi.fn()), + computePosition: vi.fn(() => ({})), + flip: vi.fn(() => ({})), + offset: vi.fn(() => ({})), + shift: vi.fn(() => ({})), + size: vi.fn(() => ({})) })); -jest.mock('focus-trap', () => ({ - createFocusTrap: jest.fn(() => ({ - activate: jest.fn(), - deactivate: jest.fn(), - updateContainerElements: jest.fn(function () { +vi.mock('focus-trap', () => ({ + createFocusTrap: vi.fn(() => ({ + activate: vi.fn(), + deactivate: vi.fn(), + updateContainerElements: vi.fn(() => { return this; }) })) })); -jest.mock('../../utils/first-tabbable', () => (element: HTMLSlotElement) => element); +vi.mock('../../utils/first-tabbable', () => ({ + default: (element: HTMLSlotElement) => element +})); describe('cat-menu', () => { beforeEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('renders', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton], - html: `` - }); - expect(page.root).toBeTruthy(); - expect(page.root?.shadowRoot?.querySelector('cat-dropdown')).toBeTruthy(); - expect(page.root?.shadowRoot?.querySelector('cat-button[slot="trigger"]')).toBeTruthy(); + const { root } = await render(); + expect(root).toBeTruthy(); + expect(root.shadowRoot?.querySelector('cat-dropdown')).toBeTruthy(); + expect(root.shadowRoot?.querySelector('cat-button[slot="trigger"]')).toBeTruthy(); }); describe('trigger button', () => { it('should render trigger button with correct default attributes', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton], - html: `` - }); + const { root } = await render(); - const trigger = page.root?.shadowRoot?.querySelector('cat-button[slot="trigger"]') as HTMLCatButtonElement; + const trigger = root.shadowRoot?.querySelector('cat-button[slot="trigger"]') as HTMLCatButtonElement; expect(trigger).toBeTruthy(); expect(trigger.variant).toBe('text'); expect(trigger.size).toBe('m'); @@ -64,22 +62,19 @@ describe('cat-menu', () => { }); it('should apply custom trigger props', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton], - html: ` - - ` - }); - - const trigger = page.root?.shadowRoot?.querySelector('cat-button[slot="trigger"]') as HTMLCatButtonElement; + const { root } = await render( + + ); + + const trigger = root.shadowRoot?.querySelector('cat-button[slot="trigger"]') as HTMLCatButtonElement; expect(trigger.variant).toBe('filled'); expect(trigger.size).toBe('l'); expect(trigger.icon).toBe('gear'); @@ -90,28 +85,25 @@ describe('cat-menu', () => { }); it('should use triggerA11yLabel when provided', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton], - template: () => - }); + const { root, waitForChanges } = await render( + + ); + await waitForChanges(); - const trigger = page.root?.shadowRoot?.querySelector('cat-button[slot="trigger"]') as HTMLCatButtonElement; + const trigger = root.shadowRoot?.querySelector('cat-button[slot="trigger"]') as HTMLCatButtonElement; expect(trigger.a11yLabel).toBe('Open options menu'); }); it('should emit catTriggerClick when trigger is clicked', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton], - html: `` - }); + const { root, waitForChanges } = await render(); - const catTriggerClickSpy = jest.fn(); - page.root?.addEventListener('catTriggerClick', catTriggerClickSpy); + const catTriggerClickSpy = vi.fn(); + root.addEventListener('catTriggerClick', catTriggerClickSpy); - const trigger = page.root?.shadowRoot?.querySelector('cat-button[slot="trigger"]') as HTMLCatButtonElement; + const trigger = root.shadowRoot?.querySelector('cat-button[slot="trigger"]') as HTMLCatButtonElement; const mouseEvent = new MouseEvent('click'); trigger.dispatchEvent(new CustomEvent('catClick', { detail: mouseEvent })); - await page.waitForChanges(); + await waitForChanges(); expect(catTriggerClickSpy).toHaveBeenCalled(); }); @@ -119,21 +111,11 @@ describe('cat-menu', () => { describe('dropdown integration', () => { it('should render dropdown with correct props', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton], - html: ` - - ` - }); + const { root } = await render( + + ); - const dropdown = page.root?.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; + const dropdown = root.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; expect(dropdown.placement).toBe('top-end'); expect(dropdown.justify).toBe(true); expect(dropdown.noResize).toBe(true); @@ -143,35 +125,29 @@ describe('cat-menu', () => { }); it('should emit catOpen when dropdown opens', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton], - html: `` - }); + const { root, waitForChanges } = await render(); - const catOpenSpy = jest.fn(); - page.root?.addEventListener('catOpen', catOpenSpy); + const catOpenSpy = vi.fn(); + root.addEventListener('catOpen', catOpenSpy); - const dropdown = page.root?.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; + const dropdown = root.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; const focusEvent = new FocusEvent('focus'); dropdown.dispatchEvent(new CustomEvent('catOpen', { detail: focusEvent })); - await page.waitForChanges(); + await waitForChanges(); expect(catOpenSpy).toHaveBeenCalled(); }); it('should emit catClose when dropdown closes', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton], - html: `` - }); + const { root, waitForChanges } = await render(); - const catCloseSpy = jest.fn(); - page.root?.addEventListener('catClose', catCloseSpy); + const catCloseSpy = vi.fn(); + root.addEventListener('catClose', catCloseSpy); - const dropdown = page.root?.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; + const dropdown = root.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; const focusEvent = new FocusEvent('blur'); dropdown.dispatchEvent(new CustomEvent('catClose', { detail: focusEvent })); - await page.waitForChanges(); + await waitForChanges(); expect(catCloseSpy).toHaveBeenCalled(); }); @@ -179,121 +155,112 @@ describe('cat-menu', () => { describe('focus management', () => { it('should focus first enabled menu item when menu opens', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton, CatMenuItem, CatIcon], - html: ` - - Item 1 - Item 2 - Item 3 - - ` - }); - - const menuItems = page.root?.querySelectorAll('cat-menu-item'); + const { root, waitForChanges } = await render( + + Item 1 + Item 2 + Item 3 + + ); + + const menuItems = root.querySelectorAll('cat-menu-item'); const firstItem = menuItems?.[0] as HTMLCatMenuItemElement; - const mockDoFocus = jest.fn(); + const mockDoFocus = vi.fn(); Object.defineProperty(firstItem, 'doFocus', { value: mockDoFocus, writable: true, configurable: true }); - const dropdown = page.root?.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; + const dropdown = root.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; const focusEvent = new FocusEvent('focus'); dropdown.dispatchEvent(new CustomEvent('catOpen', { detail: focusEvent })); await new Promise(resolve => requestAnimationFrame(resolve)); - await page.waitForChanges(); + await waitForChanges(); expect(mockDoFocus).toHaveBeenCalled(); }); it('should skip disabled items and focus first enabled item', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton, CatMenuItem, CatIcon], - html: ` - - Item 1 - Item 2 - Item 3 - - ` - }); - - const menuItems = page.root?.querySelectorAll('cat-menu-item'); + const { root, waitForChanges } = await render( + + Item 1 + Item 2 + Item 3 + + ); + + const menuItems = root.querySelectorAll('cat-menu-item'); const firstItem = menuItems?.[0] as HTMLCatMenuItemElement; const secondItem = menuItems?.[1] as HTMLCatMenuItemElement; - const mockDoFocusFirst = jest.fn(); + const mockDoFocusFirst = vi.fn(); Object.defineProperty(firstItem, 'doFocus', { value: mockDoFocusFirst, writable: true, configurable: true }); - const mockDoFocusSecond = jest.fn(); + const mockDoFocusSecond = vi.fn(); Object.defineProperty(secondItem, 'doFocus', { value: mockDoFocusSecond, writable: true, configurable: true }); - const dropdown = page.root?.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; + const dropdown = root.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; const focusEvent = new FocusEvent('focus'); dropdown.dispatchEvent(new CustomEvent('catOpen', { detail: focusEvent })); await new Promise(resolve => requestAnimationFrame(resolve)); - await page.waitForChanges(); + await waitForChanges(); expect(mockDoFocusFirst).not.toHaveBeenCalled(); expect(mockDoFocusSecond).toHaveBeenCalled(); }); it('should not focus any item if a menu item is already focused', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton, CatMenuItem, CatIcon], - html: ` - - Item 1 - Item 2 - - ` - }); - - const menuItems = page.root?.querySelectorAll('cat-menu-item'); + const { root, waitForChanges } = await render( + + Item 1 + Item 2 + + ); + + const menuItems = root.querySelectorAll('cat-menu-item'); const firstItem = menuItems?.[0] as HTMLCatMenuItemElement; const secondItem = menuItems?.[1] as HTMLCatMenuItemElement; // Simulate the second menu item being focused by setting document.activeElement - Object.defineProperty(page.doc, 'activeElement', { + Object.defineProperty(document, 'activeElement', { get: () => secondItem, configurable: true }); // Replace doFocus with mocks to track calls - const firstItemFocusMock = jest.fn(); + const firstItemFocusMock = vi.fn(); Object.defineProperty(firstItem, 'doFocus', { value: firstItemFocusMock, writable: true, configurable: true }); - const secondItemFocusMock = jest.fn(); + const secondItemFocusMock = vi.fn(); Object.defineProperty(secondItem, 'doFocus', { value: secondItemFocusMock, writable: true, configurable: true }); - const dropdown = page.root?.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; + const dropdown = root.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; const focusEvent = new FocusEvent('focus'); dropdown.dispatchEvent(new CustomEvent('catOpen', { detail: focusEvent })); await new Promise(resolve => requestAnimationFrame(resolve)); - await page.waitForChanges(); + await waitForChanges(); // Neither item should have doFocus called since an item was already focused expect(firstItemFocusMock).not.toHaveBeenCalled(); @@ -301,29 +268,26 @@ describe('cat-menu', () => { }); it('should handle case when all menu items are disabled', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton, CatMenuItem, CatIcon], - html: ` - - Item 1 - Item 2 - - ` - }); - - const menuItems = page.root?.querySelectorAll('cat-menu-item'); + const { root, waitForChanges } = await render( + + Item 1 + Item 2 + + ); + + const menuItems = root.querySelectorAll('cat-menu-item'); const firstItem = menuItems?.[0] as HTMLCatMenuItemElement; const secondItem = menuItems?.[1] as HTMLCatMenuItemElement; // Use Object.defineProperty to mock readonly doFocus methods (official Jest workaround) - const firstItemFocusMock = jest.fn().mockResolvedValue(undefined); + const firstItemFocusMock = vi.fn().mockResolvedValue(undefined); Object.defineProperty(firstItem, 'doFocus', { value: firstItemFocusMock, writable: true, configurable: true }); - const secondItemFocusMock = jest.fn().mockResolvedValue(undefined); + const secondItemFocusMock = vi.fn().mockResolvedValue(undefined); Object.defineProperty(secondItem, 'doFocus', { value: secondItemFocusMock, writable: true, @@ -331,7 +295,7 @@ describe('cat-menu', () => { }); await new Promise(resolve => requestAnimationFrame(resolve)); - await page.waitForChanges(); + await waitForChanges(); // No menu items should have doFocus called when all are disabled expect(firstItemFocusMock).not.toHaveBeenCalled(); @@ -341,37 +305,28 @@ describe('cat-menu', () => { describe('menu content', () => { it('should render nav with role="menu" and default vertical orientation', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton], - html: `` - }); + const { root } = await render(); - const nav = page.root?.shadowRoot?.querySelector('nav[role="menu"]'); + const nav = root.shadowRoot?.querySelector('nav[role="menu"]'); expect(nav?.getAttribute('aria-orientation')).toBe('vertical'); }); it('should render nav with horizontal orientation when arrowNavigation is horizontal', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton], - html: `` - }); + const { root } = await render(); - const nav = page.root?.shadowRoot?.querySelector('nav[role="menu"]'); + const nav = root.shadowRoot?.querySelector('nav[role="menu"]'); expect(nav?.getAttribute('aria-orientation')).toBe('horizontal'); }); }); describe('public methods', () => { it('should have open() method that calls dropdown.open()', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton], - html: `` - }); + const { root } = await render(); - const menu = page.rootInstance as CatMenu; - const dropdown = page.root?.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; + const menu = root as HTMLCatMenuElement; + const dropdown = root.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; - const openMock = jest.fn().mockResolvedValue(undefined); + const openMock = vi.fn().mockResolvedValue(undefined); Object.defineProperty(dropdown, 'open', { value: openMock, writable: true, @@ -386,15 +341,12 @@ describe('cat-menu', () => { }); it('should have close() method that calls dropdown.close()', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton], - html: `` - }); + const { root } = await render(); - const menu = page.rootInstance as CatMenu; - const dropdown = page.root?.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; + const menu = root as HTMLCatMenuElement; + const dropdown = root.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; - const closeMock = jest.fn().mockResolvedValue(undefined); + const closeMock = vi.fn().mockResolvedValue(undefined); Object.defineProperty(dropdown, 'close', { value: closeMock, writable: true, @@ -409,15 +361,12 @@ describe('cat-menu', () => { }); it('should have toggle() method that calls dropdown.toggle()', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton], - html: `` - }); + const { root } = await render(); - const menu = page.rootInstance as CatMenu; - const dropdown = page.root?.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; + const menu = root as HTMLCatMenuElement; + const dropdown = root.shadowRoot?.querySelector('cat-dropdown') as HTMLCatDropdownElement; - const toggleMock = jest.fn().mockResolvedValue(undefined); + const toggleMock = vi.fn().mockResolvedValue(undefined); Object.defineProperty(dropdown, 'toggle', { value: toggleMock, writable: true, @@ -434,36 +383,33 @@ describe('cat-menu', () => { describe('keyboard navigation', () => { it('should handle ArrowDown and ArrowUp for vertical navigation', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton, CatMenuItem, CatIcon], - template: () => ( - - Item 1 - Item 2 - Item 3 - - ) - }); + const { root, waitForChanges } = await render( + + Item 1 + Item 2 + Item 3 + + ); - const menu = page.rootInstance as CatMenu; + const menu = root as HTMLCatMenuElement; // Wait for MutationObserver to populate catMenuItems await new Promise(resolve => setTimeout(resolve, 100)); - await page.waitForChanges(); + await waitForChanges(); - const menuItems = page.root?.querySelectorAll('cat-menu-item'); + const menuItems = root.querySelectorAll('cat-menu-item'); const firstItem = menuItems?.[0] as HTMLCatMenuItemElement; const secondItem = menuItems?.[1] as HTMLCatMenuItemElement; // Mock doFocus methods - const firstItemFocusMock = jest.fn().mockResolvedValue(undefined); + const firstItemFocusMock = vi.fn().mockResolvedValue(undefined); Object.defineProperty(firstItem, 'doFocus', { value: firstItemFocusMock, writable: true, configurable: true }); - const secondItemFocusMock = jest.fn().mockResolvedValue(undefined); + const secondItemFocusMock = vi.fn().mockResolvedValue(undefined); Object.defineProperty(secondItem, 'doFocus', { value: secondItemFocusMock, writable: true, @@ -472,52 +418,52 @@ describe('cat-menu', () => { // Open the menu await menu.open(); - await page.waitForChanges(); + await waitForChanges(); // Wait for requestAnimationFrame to execute in dropdown.open() await new Promise(resolve => requestAnimationFrame(() => resolve())); - await page.waitForChanges(); + await waitForChanges(); // Simulate first item being focused - Object.defineProperty(page.doc, 'activeElement', { + Object.defineProperty(document, 'activeElement', { get: () => firstItem, configurable: true }); // Press ArrowDown - should focus second item const arrowDownEvent = new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true, cancelable: true }); - page.root?.dispatchEvent(arrowDownEvent); - await page.waitForChanges(); + root.dispatchEvent(arrowDownEvent); + await waitForChanges(); expect(secondItemFocusMock).toHaveBeenCalled(); // Clear mocks and simulate second item being focused firstItemFocusMock.mockClear(); secondItemFocusMock.mockClear(); - Object.defineProperty(page.doc, 'activeElement', { + Object.defineProperty(document, 'activeElement', { get: () => secondItem, configurable: true }); // Press ArrowUp - should focus first item again const arrowUpEvent = new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true, cancelable: true }); - page.root?.dispatchEvent(arrowUpEvent); - await page.waitForChanges(); + root.dispatchEvent(arrowUpEvent); + await waitForChanges(); expect(firstItemFocusMock).toHaveBeenCalled(); // Clear mocks for next test firstItemFocusMock.mockClear(); secondItemFocusMock.mockClear(); - Object.defineProperty(page.doc, 'activeElement', { + Object.defineProperty(document, 'activeElement', { get: () => firstItem, configurable: true }); // ArrowRight should not change focus in vertical mode const arrowRightEvent = new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true, cancelable: true }); - page.root?.dispatchEvent(arrowRightEvent); - await page.waitForChanges(); + root.dispatchEvent(arrowRightEvent); + await waitForChanges(); // Neither item should have doFocus called expect(firstItemFocusMock).not.toHaveBeenCalled(); @@ -525,36 +471,33 @@ describe('cat-menu', () => { }); it('should handle ArrowRight and ArrowLeft for horizontal navigation', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton, CatMenuItem, CatIcon], - template: () => ( - - Item 1 - Item 2 - Item 3 - - ) - }); + const { root, waitForChanges } = await render( + + Item 1 + Item 2 + Item 3 + + ); - const menu = page.rootInstance as CatMenu; + const menu = root as HTMLCatMenuElement; // Wait for MutationObserver to populate catMenuItems await new Promise(resolve => setTimeout(resolve, 100)); - await page.waitForChanges(); + await waitForChanges(); - const menuItems = page.root?.querySelectorAll('cat-menu-item'); + const menuItems = root.querySelectorAll('cat-menu-item'); const firstItem = menuItems?.[0] as HTMLCatMenuItemElement; const secondItem = menuItems?.[1] as HTMLCatMenuItemElement; // Mock doFocus methods - const firstItemFocusMock = jest.fn().mockResolvedValue(undefined); + const firstItemFocusMock = vi.fn().mockResolvedValue(undefined); Object.defineProperty(firstItem, 'doFocus', { value: firstItemFocusMock, writable: true, configurable: true }); - const secondItemFocusMock = jest.fn().mockResolvedValue(undefined); + const secondItemFocusMock = vi.fn().mockResolvedValue(undefined); Object.defineProperty(secondItem, 'doFocus', { value: secondItemFocusMock, writable: true, @@ -563,52 +506,52 @@ describe('cat-menu', () => { // Open the menu await menu.open(); - await page.waitForChanges(); + await waitForChanges(); // Wait for requestAnimationFrame to execute in dropdown.open() await new Promise(resolve => requestAnimationFrame(() => resolve())); - await page.waitForChanges(); + await waitForChanges(); // Simulate first item being focused - Object.defineProperty(page.doc, 'activeElement', { + Object.defineProperty(document, 'activeElement', { get: () => firstItem, configurable: true }); // Press ArrowRight - should focus second item const arrowRightEvent = new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true, cancelable: true }); - page.root?.dispatchEvent(arrowRightEvent); - await page.waitForChanges(); + root.dispatchEvent(arrowRightEvent); + await waitForChanges(); expect(secondItemFocusMock).toHaveBeenCalled(); // Clear mocks and simulate second item being focused firstItemFocusMock.mockClear(); secondItemFocusMock.mockClear(); - Object.defineProperty(page.doc, 'activeElement', { + Object.defineProperty(document, 'activeElement', { get: () => secondItem, configurable: true }); // Press ArrowLeft - should focus first item again const arrowLeftEvent = new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true, cancelable: true }); - page.root?.dispatchEvent(arrowLeftEvent); - await page.waitForChanges(); + root.dispatchEvent(arrowLeftEvent); + await waitForChanges(); expect(firstItemFocusMock).toHaveBeenCalled(); // Clear mocks for next test firstItemFocusMock.mockClear(); secondItemFocusMock.mockClear(); - Object.defineProperty(page.doc, 'activeElement', { + Object.defineProperty(document, 'activeElement', { get: () => firstItem, configurable: true }); // ArrowDown should not change focus in horizontal mode const arrowDownEvent = new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true, cancelable: true }); - page.root?.dispatchEvent(arrowDownEvent); - await page.waitForChanges(); + root.dispatchEvent(arrowDownEvent); + await waitForChanges(); // Neither item should have doFocus called expect(firstItemFocusMock).not.toHaveBeenCalled(); @@ -616,37 +559,34 @@ describe('cat-menu', () => { }); it('should handle Home and End keys for both navigation modes', async () => { - const page = await newSpecPage({ - components: [CatMenu, CatDropdown, CatButton, CatMenuItem, CatIcon], - html: ` - - Item 1 - Item 2 - Item 3 - - ` - }); + const { root, waitForChanges } = await render( + + Item 1 + Item 2 + Item 3 + + ); - const menu = page.rootInstance as CatMenu; + const menu = root as HTMLCatMenuElement; // Wait for MutationObserver to populate catMenuItems await new Promise(resolve => setTimeout(resolve, 100)); - await page.waitForChanges(); + await waitForChanges(); - const menuItems = page.root?.querySelectorAll('cat-menu-item'); + const menuItems = root.querySelectorAll('cat-menu-item'); const firstItem = menuItems?.[0] as HTMLCatMenuItemElement; const secondItem = menuItems?.[1] as HTMLCatMenuItemElement; const thirdItem = menuItems?.[2] as HTMLCatMenuItemElement; // Mock doFocus methods - const firstItemFocusMock = jest.fn().mockResolvedValue(undefined); + const firstItemFocusMock = vi.fn().mockResolvedValue(undefined); Object.defineProperty(firstItem, 'doFocus', { value: firstItemFocusMock, writable: true, configurable: true }); - const thirdItemFocusMock = jest.fn().mockResolvedValue(undefined); + const thirdItemFocusMock = vi.fn().mockResolvedValue(undefined); Object.defineProperty(thirdItem, 'doFocus', { value: thirdItemFocusMock, writable: true, @@ -655,36 +595,36 @@ describe('cat-menu', () => { // Open the menu await menu.open(); - await page.waitForChanges(); + await waitForChanges(); // Wait for requestAnimationFrame to execute in dropdown.open() await new Promise(resolve => requestAnimationFrame(() => resolve())); - await page.waitForChanges(); + await waitForChanges(); // Simulate second item being focused - Object.defineProperty(page.doc, 'activeElement', { + Object.defineProperty(document, 'activeElement', { get: () => secondItem, configurable: true }); // Press Home - should focus first item const homeEvent = new KeyboardEvent('keydown', { key: 'Home', bubbles: true, cancelable: true }); - page.root?.dispatchEvent(homeEvent); - await page.waitForChanges(); + root.dispatchEvent(homeEvent); + await waitForChanges(); expect(firstItemFocusMock).toHaveBeenCalled(); // Clear mock and simulate first item being focused firstItemFocusMock.mockClear(); - Object.defineProperty(page.doc, 'activeElement', { + Object.defineProperty(document, 'activeElement', { get: () => firstItem, configurable: true }); // Press End - should focus last item const endEvent = new KeyboardEvent('keydown', { key: 'End', bubbles: true, cancelable: true }); - page.root?.dispatchEvent(endEvent); - await page.waitForChanges(); + root.dispatchEvent(endEvent); + await waitForChanges(); expect(thirdItemFocusMock).toHaveBeenCalled(); }); diff --git a/core/src/components/cat-notification/cat-notification.spec.tsx b/core/src/components/cat-notification/cat-notification.spec.tsx index be7ad3d55..47e2491c2 100644 --- a/core/src/components/cat-notification/cat-notification.spec.tsx +++ b/core/src/components/cat-notification/cat-notification.spec.tsx @@ -1,3 +1,4 @@ +import { describe, it, expect } from 'vitest'; import { catNotificationService } from './cat-notification'; describe('CatNotificationService', () => { diff --git a/core/src/components/cat-pagination/cat-pagination.spec.tsx b/core/src/components/cat-pagination/cat-pagination.spec.tsx index ad9f3bf4e..385a5dbad 100644 --- a/core/src/components/cat-pagination/cat-pagination.spec.tsx +++ b/core/src/components/cat-pagination/cat-pagination.spec.tsx @@ -1,15 +1,20 @@ -jest.mock('../cat-i18n/cat-i18n-registry'); -import { newSpecPage } from '@stencil/core/testing'; -import { CatPagination } from './cat-pagination'; +import { describe, it, expect, vi } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; + +vi.mock('../cat-i18n/cat-i18n-registry', () => ({ + catI18nRegistry: { + t: vi.fn(() => {}) + } +})); + +import './cat-pagination'; describe('cat-pagination', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatPagination], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-radio-group/cat-radio-group.spec.tsx b/core/src/components/cat-radio-group/cat-radio-group.spec.tsx index 2b170e7fd..8eff3b6c9 100644 --- a/core/src/components/cat-radio-group/cat-radio-group.spec.tsx +++ b/core/src/components/cat-radio-group/cat-radio-group.spec.tsx @@ -1,14 +1,13 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatRadioGroup } from './cat-radio-group'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-radio-group'; describe('cat-radio-group', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatRadioGroup], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-radio/cat-radio.spec.tsx b/core/src/components/cat-radio/cat-radio.spec.tsx index 2907b1bb3..74b3a3f99 100644 --- a/core/src/components/cat-radio/cat-radio.spec.tsx +++ b/core/src/components/cat-radio/cat-radio.spec.tsx @@ -1,14 +1,14 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatRadio } from './cat-radio'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; + +import './cat-radio'; describe('cat-radio', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatRadio], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-scrollable/cat-scrollable.spec.tsx b/core/src/components/cat-scrollable/cat-scrollable.spec.tsx index 03e4ed1b2..6adb26246 100644 --- a/core/src/components/cat-scrollable/cat-scrollable.spec.tsx +++ b/core/src/components/cat-scrollable/cat-scrollable.spec.tsx @@ -1,14 +1,13 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatScrollable } from './cat-scrollable'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-scrollable'; describe('cat-scrollable', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatScrollable], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-select/cat-select.spec.tsx b/core/src/components/cat-select/cat-select.spec.tsx index f4a1b34dd..30b96da39 100644 --- a/core/src/components/cat-select/cat-select.spec.tsx +++ b/core/src/components/cat-select/cat-select.spec.tsx @@ -1,105 +1,102 @@ -jest.mock('../cat-i18n/cat-i18n-registry'); - -jest.mock('autosize-input', () => jest.fn()); - -const mockAutoUpdateCleanup = jest.fn(); -const mockAutoUpdate = jest.fn(() => mockAutoUpdateCleanup); -const mockComputePosition = jest.fn(() => - Promise.resolve({ - x: 0, - y: 0, - placement: 'bottom-start' - }) +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; + +vi.mock('../cat-i18n/cat-i18n-registry', () => ({ + catI18nRegistry: { + t: vi.fn(() => {}) + } +})); +vi.mock('autosize-input', () => ({ + default: vi.fn() +})); + +const mockAutoUpdateCleanup = vi.fn(); +const mockAutoUpdate = vi.hoisted(() => vi.fn(() => mockAutoUpdateCleanup)); +const mockComputePosition = vi.hoisted(() => + vi.fn(() => + Promise.resolve({ + x: 0, + y: 0, + placement: 'bottom-start' + }) + ) ); -jest.mock('@floating-ui/dom', () => ({ +vi.mock('@floating-ui/dom', () => ({ autoUpdate: mockAutoUpdate, computePosition: mockComputePosition, - flip: jest.fn(() => ({})), - offset: jest.fn(() => ({})) + flip: vi.fn(() => ({})), + offset: vi.fn(() => ({})) })); -import { newSpecPage } from '@stencil/core/testing'; -import { CatSelect } from './cat-select'; +import './cat-select'; import { stringArrayConnector } from './connectors'; -import { Subject, of } from 'rxjs'; +import { of, Subject } from 'rxjs'; describe('cat-select', () => { beforeEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('renders', async () => { - const page = await newSpecPage({ - components: [CatSelect], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); describe('catChange', () => { it('should not emit catChange event on initialization with value', async () => { - const page = await newSpecPage({ - components: [CatSelect], - html: `` - }); + const { root, waitForChanges } = await render(); - const select = page.rootInstance as CatSelect; - const catChangeSpy = jest.fn(); + const select = root as HTMLCatSelectElement; + const catChangeSpy = vi.fn(); - page.root?.addEventListener('catChange', catChangeSpy); + root.addEventListener('catChange', catChangeSpy); await select.connect(stringArrayConnector(['option1', 'option2', 'option3'])); - await page.waitForChanges(); + await waitForChanges(); expect(catChangeSpy).not.toHaveBeenCalled(); }); it('should emit catChange event when selection state changes from user interaction', async () => { - const page = await newSpecPage({ - components: [CatSelect], - html: `` - }); + const { root, waitForChanges, instance } = await render(); - const select = page.rootInstance as CatSelect; let eventEmitted = false; - await select.connect(stringArrayConnector(['option1', 'option2', 'option3'])); - await page.waitForChanges(); + await instance.connect(stringArrayConnector(['option1', 'option2', 'option3'])); + await waitForChanges(); - page.root?.addEventListener('catChange', () => { + root?.addEventListener('catChange', () => { eventEmitted = true; }); // Directly update selection state (simulating what happens after user interaction) // This mimics the internal flow when user clicks an option - select['patchState']({ + instance['patchState']({ selection: [{ item: { id: 'option1' }, render: { label: 'option1' } }], tempSelection: [] }); - await page.waitForChanges(); + await waitForChanges(); expect(eventEmitted).toBe(true); }); it('should not emit catChange event when value is changed programmatically', async () => { - const page = await newSpecPage({ - components: [CatSelect], - html: `` - }); + const { root, waitForChanges } = await render(); - const select = page.rootInstance as CatSelect; - const catChangeSpy = jest.fn(); + const select = root as HTMLCatSelectElement; + const catChangeSpy = vi.fn(); await select.connect(stringArrayConnector(['option1', 'option2', 'option3'])); - await page.waitForChanges(); + await waitForChanges(); - page.root?.addEventListener('catChange', catChangeSpy); + root.addEventListener('catChange', catChangeSpy); select.value = 'option2'; - await page.waitForChanges(); + await waitForChanges(); expect(catChangeSpy).not.toHaveBeenCalled(); }); @@ -107,33 +104,26 @@ describe('cat-select', () => { describe('autoUpdate lifecycle', () => { it('should not set up autoUpdate on component load', async () => { - const page = await newSpecPage({ - components: [CatSelect], - html: `` - }); + const { root, waitForChanges } = await render(); - const select = page.rootInstance as CatSelect; + const select = root as HTMLCatSelectElement; await select.connect(stringArrayConnector(['option1', 'option2', 'option3'])); - await page.waitForChanges(); + await waitForChanges(); expect(mockAutoUpdate).not.toHaveBeenCalled(); }); it('should set up autoUpdate when dropdown is opened', async () => { - const page = await newSpecPage({ - components: [CatSelect], - html: `` - }); + const { root, waitForChanges, instance } = await render(); - const select = page.rootInstance as CatSelect; - await select.connect(stringArrayConnector(['option1', 'option2', 'option3'])); - await page.waitForChanges(); + await instance.connect(stringArrayConnector(['option1', 'option2', 'option3'])); + await waitForChanges(); // Open dropdown by clicking on the trigger element - const trigger = page.root?.shadowRoot?.querySelector('.select-wrapper'); - const dropdown = page.root?.shadowRoot?.querySelector('.select-dropdown'); + const trigger = root?.shadowRoot?.querySelector('.select-wrapper'); + const dropdown = root?.shadowRoot?.querySelector('.select-dropdown'); trigger?.dispatchEvent(new MouseEvent('click', { bubbles: true })); - await page.waitForChanges(); + await waitForChanges(); expect(mockAutoUpdate).toHaveBeenCalledTimes(1); const callArgs = mockAutoUpdate.mock.calls[0] as unknown[]; @@ -142,66 +132,55 @@ describe('cat-select', () => { }); it('should call cleanup function when dropdown is closed', async () => { - const page = await newSpecPage({ - components: [CatSelect], - html: `` - }); + const { root, waitForChanges, instance } = await render(); - const select = page.rootInstance as CatSelect; - await select.connect(stringArrayConnector(['option1', 'option2', 'option3'])); - await page.waitForChanges(); + await instance.connect(stringArrayConnector(['option1', 'option2', 'option3'])); + await waitForChanges(); // Open dropdown by clicking - const trigger = page.root?.shadowRoot?.querySelector('.select-wrapper'); + const trigger = root?.shadowRoot?.querySelector('.select-wrapper'); trigger?.dispatchEvent(new MouseEvent('click', { bubbles: true })); - await page.waitForChanges(); + await waitForChanges(); expect(mockAutoUpdate).toHaveBeenCalledTimes(1); // Close dropdown by clicking again trigger?.dispatchEvent(new MouseEvent('click', { bubbles: true })); - await page.waitForChanges(); + await waitForChanges(); // Verify cleanup function was called expect(mockAutoUpdateCleanup).toHaveBeenCalledTimes(1); }); it('should not set up autoUpdate if connector is not connected', async () => { - const page = await newSpecPage({ - components: [CatSelect], - html: `` - }); + const { root, waitForChanges } = await render(); // Don't connect a connector // Try to open dropdown without a connector by clicking - const trigger = page.root?.shadowRoot?.querySelector('.select-wrapper'); + const trigger = root.shadowRoot?.querySelector('.select-wrapper'); trigger?.dispatchEvent(new MouseEvent('click', { bubbles: true })); - await page.waitForChanges(); + await waitForChanges(); expect(mockAutoUpdate).not.toHaveBeenCalled(); }); it('should close and cleanup autoUpdate on blur', async () => { - const page = await newSpecPage({ - components: [CatSelect], - html: `` - }); + const { root, waitForChanges, instance } = await render(); - const select = page.rootInstance as CatSelect; - await select.connect(stringArrayConnector(['option1', 'option2', 'option3'])); - await page.waitForChanges(); + await instance.connect(stringArrayConnector(['option1', 'option2', 'option3'])); + await waitForChanges(); // Open dropdown by clicking - const trigger = page.root?.shadowRoot?.querySelector('.select-wrapper'); + const trigger = root?.shadowRoot?.querySelector('.select-wrapper'); trigger?.dispatchEvent(new MouseEvent('click', { bubbles: true })); - await page.waitForChanges(); + await waitForChanges(); expect(mockAutoUpdate).toHaveBeenCalledTimes(1); // Simulate blur event to close dropdown const blurEvent = new FocusEvent('blur'); - page.root?.dispatchEvent(blurEvent); - await page.waitForChanges(); + root?.dispatchEvent(blurEvent); + await waitForChanges(); // Should clean up autoUpdate expect(mockAutoUpdateCleanup).toHaveBeenCalledTimes(1); @@ -210,12 +189,8 @@ describe('cat-select', () => { describe('renderOptions$', () => { it('should re-render options when renderOptions$ emits with updated external data', async () => { - const page = await newSpecPage({ - components: [CatSelect], - html: `` - }); + const { root, waitForChanges, instance } = await render(); - const select = page.rootInstance as CatSelect; const renderSubject = new Subject(); let renderCallCount = 0; @@ -243,14 +218,14 @@ describe('cat-select', () => { renderOptions$: renderSubject.asObservable() }; - await select.connect(connector); + await instance.connect(connector); // Trigger input event to populate options - const input = page.root?.shadowRoot?.querySelector('input'); + const input = root?.shadowRoot?.querySelector('input'); input?.dispatchEvent(new Event('input', { bubbles: true })); - await page.waitForChanges(); + await waitForChanges(); - const initialOptions = select['state'].options; + const initialOptions = instance['state'].options; expect(initialOptions[0].render.description).toBe('Original description'); const initialRenderCount = renderCallCount; @@ -258,10 +233,10 @@ describe('cat-select', () => { useUpdatedDescription = true; renderSubject.next(); - await page.waitForChanges(); + await waitForChanges(); expect(renderCallCount).toBeGreaterThan(initialRenderCount); - const updatedOptions = select['state'].options; + const updatedOptions = instance['state'].options; expect(updatedOptions[0].render.description).toBe('Updated description'); }); }); diff --git a/core/src/components/cat-skeleton/cat-skeleton.spec.tsx b/core/src/components/cat-skeleton/cat-skeleton.spec.tsx index 9540498bc..a02dab0cc 100644 --- a/core/src/components/cat-skeleton/cat-skeleton.spec.tsx +++ b/core/src/components/cat-skeleton/cat-skeleton.spec.tsx @@ -1,14 +1,13 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatSkeleton } from './cat-skeleton'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-skeleton'; describe('cat-skeleton', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatSkeleton], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-spinner/cat-spinner.spec.tsx b/core/src/components/cat-spinner/cat-spinner.spec.tsx index b77d8c655..ac81e2df5 100644 --- a/core/src/components/cat-spinner/cat-spinner.spec.tsx +++ b/core/src/components/cat-spinner/cat-spinner.spec.tsx @@ -1,18 +1,17 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatSpinner } from './cat-spinner'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-spinner'; describe('cat-spinner', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatSpinner], - html: `` - }); - expect(page.root?.shadowRoot).toEqualLightHtml(` - + const { root } = await render(); + await expect(root.shadowRoot).toEqualHtml(` + `); }); }); diff --git a/core/src/components/cat-tab/cat-tab.spec.tsx b/core/src/components/cat-tab/cat-tab.spec.tsx index 81dc5704c..8bf666312 100644 --- a/core/src/components/cat-tab/cat-tab.spec.tsx +++ b/core/src/components/cat-tab/cat-tab.spec.tsx @@ -1,14 +1,13 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatTab } from './cat-tab'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-tab'; describe('cat-tab', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatTab], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-tabs/cat-tabs.spec.tsx b/core/src/components/cat-tabs/cat-tabs.spec.tsx index b7cbcdeb1..303148035 100644 --- a/core/src/components/cat-tabs/cat-tabs.spec.tsx +++ b/core/src/components/cat-tabs/cat-tabs.spec.tsx @@ -1,14 +1,13 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatTabs } from './cat-tabs'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-tabs'; describe('cat-tabs', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatTabs], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-tag/cat-tag.spec.tsx b/core/src/components/cat-tag/cat-tag.spec.tsx index a3dee7503..9522495da 100644 --- a/core/src/components/cat-tag/cat-tag.spec.tsx +++ b/core/src/components/cat-tag/cat-tag.spec.tsx @@ -1,19 +1,18 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatTag } from './cat-tag'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-tag'; describe('cat-tag', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatTag], - html: `` - }); - expect(page.root?.shadowRoot).toEqualHtml(` -
-
+ const { root } = await render(); + await expect(root.shadowRoot).toEqualHtml(` +
+
- +
-
+
`); }); }); diff --git a/core/src/components/cat-textarea/cat-textarea.spec.tsx b/core/src/components/cat-textarea/cat-textarea.spec.tsx index 44cfcbf12..797746c78 100644 --- a/core/src/components/cat-textarea/cat-textarea.spec.tsx +++ b/core/src/components/cat-textarea/cat-textarea.spec.tsx @@ -1,16 +1,16 @@ -jest.mock('../cat-i18n/cat-i18n-registry'); +import { describe, it, expect, vi } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; -import { CatTextarea } from './cat-textarea'; +vi.mock('../cat-i18n/cat-i18n-registry'); + +import './cat-textarea'; describe('cat-textarea', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatTextarea], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-time/cat-time-locale.spec.ts b/core/src/components/cat-time/cat-time-locale.spec.ts index 7bc2fbded..89fcd493f 100644 --- a/core/src/components/cat-time/cat-time-locale.spec.ts +++ b/core/src/components/cat-time/cat-time-locale.spec.ts @@ -1,6 +1,7 @@ +import { describe, it, expect } from 'vitest'; import { getHour12 } from './cat-time-locale'; -fdescribe('cat-time locale', () => { +describe('cat-time locale', () => { it('returns 12 hours as true for en language', async () => { expect(getHour12('en')).toBe(true); }); diff --git a/core/src/components/cat-time/cat-time.spec.tsx b/core/src/components/cat-time/cat-time.spec.tsx index 4f66f75de..7670966d0 100644 --- a/core/src/components/cat-time/cat-time.spec.tsx +++ b/core/src/components/cat-time/cat-time.spec.tsx @@ -1,17 +1,17 @@ -jest.mock('../cat-i18n/cat-i18n-registry'); +import { describe, it, expect, vi } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; -import { newSpecPage } from '@stencil/core/testing'; -import { CatInput } from '../cat-input/cat-input'; -import { CatTime } from './cat-time'; +vi.mock('../cat-i18n/cat-i18n-registry'); + +import '../cat-input/cat-input'; +import './cat-time'; describe('cat-time', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatTime, CatInput], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-toggle/cat-toggle.spec.tsx b/core/src/components/cat-toggle/cat-toggle.spec.tsx index 6a272379c..5951174af 100644 --- a/core/src/components/cat-toggle/cat-toggle.spec.tsx +++ b/core/src/components/cat-toggle/cat-toggle.spec.tsx @@ -1,14 +1,13 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatToggle } from './cat-toggle'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-toggle'; describe('cat-toggle', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatToggle], - html: `` - }); - expect(page.root).toEqualLightHtml(` - + const { root } = await render(); + await expect(root).toEqualLightHtml(` + `); }); }); diff --git a/core/src/components/cat-tooltip/cat-tooltip.spec.tsx b/core/src/components/cat-tooltip/cat-tooltip.spec.tsx index 89307571c..1bfe18df0 100644 --- a/core/src/components/cat-tooltip/cat-tooltip.spec.tsx +++ b/core/src/components/cat-tooltip/cat-tooltip.spec.tsx @@ -1,19 +1,20 @@ -import { newSpecPage } from '@stencil/core/testing'; -import { CatTooltip } from './cat-tooltip'; +import { describe, it, expect } from 'vitest'; +import { render } from '@stencil/vitest'; +import { h } from '@stencil/core'; +import './cat-tooltip'; describe('cat-tooltip', () => { it('renders', async () => { - const page = await newSpecPage({ - components: [CatTooltip], - html: ` - -

Hover me

-
- ` - }); - expect(page.root).toEqualLightHtml(` + const { root } = await render( -

Hover me

+

Hover me

+
+ ); + await expect(root).toEqualLightHtml(` + +

+ Hover me +

`); }); diff --git a/core/src/utils/media-matcher.spec.ts b/core/src/utils/media-matcher.spec.ts index c6bf466b8..1bdfe51c3 100644 --- a/core/src/utils/media-matcher.spec.ts +++ b/core/src/utils/media-matcher.spec.ts @@ -1,4 +1,8 @@ -jest.mock('./platform', () => ({ Platform: jest.fn() })); +import { vi } from 'vitest'; +import { describe, it, expect, beforeEach, beforeAll } from '@stencil/vitest'; + +vi.mock('./platform', () => ({ Platform: vi.fn() })); + import { MediaMatcher } from './media-matcher'; import { Platform } from './platform'; @@ -9,7 +13,7 @@ describe('MediaMatcher', () => { beforeAll(() => { Object.defineProperty(window, 'matchMedia', { writable: true, - value: jest.fn().mockImplementation(query => ({ + value: vi.fn().mockImplementation(query => ({ matches: true, media: query })) @@ -17,7 +21,9 @@ describe('MediaMatcher', () => { }); beforeEach(() => { - jest.mocked(Platform).mockImplementation(() => platform); + vi.mocked(Platform).mockImplementation(function () { + return platform; + }); platform = { FIREFOX: true } as Platform; mediaMatcher = new MediaMatcher(); }); diff --git a/core/stencil.config.ts b/core/stencil.config.ts index 68b970148..6941af929 100644 --- a/core/stencil.config.ts +++ b/core/stencil.config.ts @@ -110,12 +110,5 @@ export const config: Config = { componentCorePackage: '@haiilo/catalyst', proxiesFile: '../react/src/components/stencil-generated/index.ts' }) - ], - testing: { - setupFiles: ['./setupTests.js'], - transform: { - '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': './stencil.transformer.js' - }, - transformIgnorePatterns: ['node_modules/(?!(?:.pnpm/)?(@haiilo))'] - } + ] }; diff --git a/core/stencil.transformer.js b/core/stencil.transformer.js deleted file mode 100644 index 5d15ef8f5..000000000 --- a/core/stencil.transformer.js +++ /dev/null @@ -1,9 +0,0 @@ -const path = require('path'); - -module.exports = { - process(_sourceText, sourcePath) { - return { - code: `module.exports = ${JSON.stringify(path.basename(sourcePath))};` - }; - } -}; diff --git a/core/vitest-setup-plugin.ts b/core/vitest-setup-plugin.ts new file mode 100644 index 000000000..923d97212 --- /dev/null +++ b/core/vitest-setup-plugin.ts @@ -0,0 +1,95 @@ +// Provides a working ElementInternals mock for stencil unit tests. +// See: https://github.com/haiilo/catalyst/blob/main/ELEMENT_INTERNALS_MOCK.md +import { MockElement } from '@stencil/core/mock-doc'; + +const emptyValidity: ValidityState = { + valueMissing: false, + typeMismatch: false, + patternMismatch: false, + tooLong: false, + tooShort: false, + rangeUnderflow: false, + rangeOverflow: false, + stepMismatch: false, + badInput: false, + customError: false, + valid: true +}; + +// @ts-ignore +MockElement.prototype.attachInternals = function (this: MockElement & { __internals?: ElementInternals }) { + if (!this.__internals) { + const self = this; + let _formValue: FormDataEntryValue | File | null = null; + let _formState: FormDataEntryValue | File | null = null; + let _validity: ValidityState = { ...emptyValidity }; + let _validationMessage = ''; + + this.__internals = { + get form() { + return null; + }, + get labels() { + return [] as unknown as NodeList; + }, + get shadowRoot() { + return self.shadowRoot as ShadowRoot | null; + }, + get states() { + return new Set() as unknown as CustomStateSet; + }, + get validity() { + return _validity; + }, + get validationMessage() { + return _validationMessage; + }, + get willValidate() { + return true; + }, + checkValidity() { + return _validity.valid; + }, + reportValidity() { + return _validity.valid; + }, + setFormValue(value: FormDataEntryValue | FormData | null, state?: FormDataEntryValue | FormData | null) { + _formValue = value as FormDataEntryValue | File | null; + _formState = state !== undefined ? (state as FormDataEntryValue | File | null) : _formValue; + }, + setValidity(flags?: ValidityStateFlags, message?: string, _anchor?: HTMLElement) { + if (!flags || Object.keys(flags).length === 0) { + _validity = { ...emptyValidity }; + _validationMessage = ''; + } else { + _validity = { + ..._validity, + ...flags, + valid: !Object.values(flags).some(flag => flag === true) + }; + _validationMessage = message ?? ''; + } + } + } as unknown as ElementInternals; + } + return this.__internals!; +}; + +if (!globalThis.ResizeObserver) { + (globalThis as any).ResizeObserver = class ResizeObserver { + observe() {} + unobserve() {} + disconnect() {} + }; +} + +if (!globalThis.MutationObserver) { + (globalThis as any).MutationObserver = class MutationObserver { + constructor(_callback: MutationCallback) {} + observe() {} + disconnect() {} + takeRecords(): MutationRecord[] { + return []; + } + }; +} diff --git a/core/vitest.config.mts b/core/vitest.config.mts new file mode 100644 index 000000000..1d1e4450d --- /dev/null +++ b/core/vitest.config.mts @@ -0,0 +1,20 @@ +import { defineVitestConfig } from '@stencil/vitest/config'; +import { stencilVitestPlugin } from '@stencil/vitest/plugin'; + +export default defineVitestConfig({ + stencilConfig: './stencil.config.ts', + test: { + projects: [ + { + plugins: [stencilVitestPlugin()], + // esbuild: { target: 'esnext' }, + test: { + name: 'plugin', + environment: 'stencil', + include: ['src/**/*.spec.{ts,tsx}'], + setupFiles: ['./vitest-setup-plugin.ts'] + } + } + ] + } +}); diff --git a/package.json b/package.json index b735845a6..9e0e509a1 100644 --- a/package.json +++ b/package.json @@ -58,10 +58,5 @@ "@commitlint/cli": "20.4.4", "@commitlint/config-conventional": "20.4.4", "husky": "8.0.3" - }, - "pnpm": { - "patchedDependencies": { - "@stencil/core@4.38.3": "patches/@stencil__core@4.38.3.patch" - } } } diff --git a/patches/@stencil__core@4.38.3.patch b/patches/@stencil__core@4.38.3.patch deleted file mode 100644 index 503b1aa9a..000000000 --- a/patches/@stencil__core@4.38.3.patch +++ /dev/null @@ -1,200 +0,0 @@ -diff --git a/mock-doc/index.cjs b/mock-doc/index.cjs -index a1b623871f55dc5c9c5c54039acfbb492c00ac10..8177187d37fdfbdaeadfa91b4199297364b568a1 100644 ---- a/mock-doc/index.cjs -+++ b/mock-doc/index.cjs -@@ -6811,16 +6811,86 @@ var MockNodeList = class { - }; - var MockElement = class extends MockNode2 { - attachInternals() { -- return new Proxy({}, { -- get: function(_target, prop, _receiver) { -- if ("process" in globalThis && globalThis.process.env.__STENCIL_SPEC_TESTS__) { -- console.error( -- `NOTE: Property ${String(prop)} was accessed on ElementInternals, but this property is not implemented. -- Testing components with ElementInternals is fully supported in e2e tests.` -- ); -+ // Patched by Catalyst to provide working ElementInternals mock -+ // See: https://github.com/haiilo/catalyst/blob/main/ELEMENT_INTERNALS_MOCK.md -+ if (!this.__internals) { -+ const self = this; -+ this.__internals = { -+ _formValue: null, -+ _formState: null, -+ _validity: { -+ valueMissing: false, -+ typeMismatch: false, -+ patternMismatch: false, -+ tooLong: false, -+ tooShort: false, -+ rangeUnderflow: false, -+ rangeOverflow: false, -+ stepMismatch: false, -+ badInput: false, -+ customError: false, -+ valid: true -+ }, -+ _validationMessage: "", -+ get form() { -+ return null; -+ }, -+ get labels() { -+ return []; -+ }, -+ get shadowRoot() { -+ return self.shadowRoot; -+ }, -+ get states() { -+ return /* @__PURE__ */ new Set(); -+ }, -+ get validity() { -+ return this._validity; -+ }, -+ get validationMessage() { -+ return this._validationMessage; -+ }, -+ get willValidate() { -+ return true; -+ }, -+ checkValidity() { -+ return this._validity.valid; -+ }, -+ reportValidity() { -+ return this._validity.valid; -+ }, -+ setFormValue(value, state) { -+ this._formValue = value; -+ this._formState = state !== void 0 ? state : value; -+ }, -+ setValidity(flags, message, anchor) { -+ if (!flags || Object.keys(flags).length === 0) { -+ this._validity = { -+ valueMissing: false, -+ typeMismatch: false, -+ patternMismatch: false, -+ tooLong: false, -+ tooShort: false, -+ rangeUnderflow: false, -+ rangeOverflow: false, -+ stepMismatch: false, -+ badInput: false, -+ customError: false, -+ valid: true -+ }; -+ this._validationMessage = ""; -+ } else { -+ this._validity = { -+ ...this._validity, -+ ...flags, -+ valid: !Object.values(flags).some((flag) => flag === true) -+ }; -+ this._validationMessage = message || ""; -+ } - } -- } -- }); -+ }; -+ } -+ return this.__internals; - } - constructor(ownerDocument, nodeName, namespaceURI = null) { - super(ownerDocument, 1 /* ELEMENT_NODE */, typeof nodeName === "string" ? nodeName : null, null); -diff --git a/mock-doc/index.js b/mock-doc/index.js -index aa59a91dac87647147574fc6fd0700cf865cf8b1..815505ae62b7fa7845dbe15b05b474c6069c8e95 100644 ---- a/mock-doc/index.js -+++ b/mock-doc/index.js -@@ -6758,16 +6758,86 @@ var MockNodeList = class { - }; - var MockElement = class extends MockNode2 { - attachInternals() { -- return new Proxy({}, { -- get: function(_target, prop, _receiver) { -- if ("process" in globalThis && globalThis.process.env.__STENCIL_SPEC_TESTS__) { -- console.error( -- `NOTE: Property ${String(prop)} was accessed on ElementInternals, but this property is not implemented. -- Testing components with ElementInternals is fully supported in e2e tests.` -- ); -+ // Patched by Catalyst to provide working ElementInternals mock -+ // See: https://github.com/haiilo/catalyst/blob/main/ELEMENT_INTERNALS_MOCK.md -+ if (!this.__internals) { -+ const self = this; -+ this.__internals = { -+ _formValue: null, -+ _formState: null, -+ _validity: { -+ valueMissing: false, -+ typeMismatch: false, -+ patternMismatch: false, -+ tooLong: false, -+ tooShort: false, -+ rangeUnderflow: false, -+ rangeOverflow: false, -+ stepMismatch: false, -+ badInput: false, -+ customError: false, -+ valid: true -+ }, -+ _validationMessage: "", -+ get form() { -+ return null; -+ }, -+ get labels() { -+ return []; -+ }, -+ get shadowRoot() { -+ return self.shadowRoot; -+ }, -+ get states() { -+ return /* @__PURE__ */ new Set(); -+ }, -+ get validity() { -+ return this._validity; -+ }, -+ get validationMessage() { -+ return this._validationMessage; -+ }, -+ get willValidate() { -+ return true; -+ }, -+ checkValidity() { -+ return this._validity.valid; -+ }, -+ reportValidity() { -+ return this._validity.valid; -+ }, -+ setFormValue(value, state) { -+ this._formValue = value; -+ this._formState = state !== void 0 ? state : value; -+ }, -+ setValidity(flags, message, anchor) { -+ if (!flags || Object.keys(flags).length === 0) { -+ this._validity = { -+ valueMissing: false, -+ typeMismatch: false, -+ patternMismatch: false, -+ tooLong: false, -+ tooShort: false, -+ rangeUnderflow: false, -+ rangeOverflow: false, -+ stepMismatch: false, -+ badInput: false, -+ customError: false, -+ valid: true -+ }; -+ this._validationMessage = ""; -+ } else { -+ this._validity = { -+ ...this._validity, -+ ...flags, -+ valid: !Object.values(flags).some((flag) => flag === true) -+ }; -+ this._validationMessage = message || ""; -+ } - } -- } -- }); -+ }; -+ } -+ return this.__internals; - } - constructor(ownerDocument, nodeName, namespaceURI = null) { - super(ownerDocument, 1 /* ELEMENT_NODE */, typeof nodeName === "string" ? nodeName : null, null); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 061b56703..8e56d4d33 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,11 +4,6 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -patchedDependencies: - '@stencil/core@4.38.3': - hash: zumbt3pmxtbh6dnwn7wjwfcqtm - path: patches/@stencil__core@4.38.3.patch - importers: .: @@ -67,10 +62,10 @@ importers: devDependencies: '@angular/build': specifier: 21.2.7 - version: 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@12.20.55)(chokidar@5.0.0)(jiti@2.6.1)(less@4.6.4)(ng-packagr@21.0.0(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(sass-embedded@1.99.0)(tslib@2.8.1)(typescript@5.9.3)(vitest@4.1.5(@types/node@12.20.55)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.0.16)(jsdom@27.4.0)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))) + version: 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@20.19.40)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(ng-packagr@21.0.0(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(sass-embedded@1.99.0)(tslib@2.8.1)(typescript@5.9.3)(vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))) '@angular/cli': specifier: 21.2.7 - version: 21.2.7(@types/node@12.20.55)(chokidar@5.0.0) + version: 21.2.7(@types/node@20.19.40)(chokidar@5.0.0) '@angular/compiler-cli': specifier: 21.2.8 version: 21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3) @@ -78,17 +73,17 @@ importers: specifier: ^30.0.0 version: 30.0.0 '@types/node': - specifier: ^12.11.1 - version: 12.20.55 + specifier: ^20.0.0 + version: 20.19.40 '@vitest/browser-playwright': - specifier: ^4.0.16 - version: 4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))(vitest@4.1.5) + specifier: 4.1.5 + version: 4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))(vitest@4.1.5) '@vitest/coverage-v8': - specifier: ^4.0.16 + specifier: 4.1.5 version: 4.1.5(@vitest/browser@4.1.5)(vitest@4.1.5) '@vitest/ui': - specifier: 4.0.16 - version: 4.0.16(vitest@4.1.5) + specifier: 4.1.5 + version: 4.1.5(vitest@4.1.5) esbuild-plugin-ignore: specifier: ^1.1.1 version: 1.1.1 @@ -108,8 +103,8 @@ importers: specifier: 5.9.3 version: 5.9.3 vitest: - specifier: ^4.0.16 - version: 4.1.5(@types/node@12.20.55)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.0.16)(jsdom@27.4.0)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) + specifier: 4.1.5 + version: 4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) angular/dist/catalyst: dependencies: @@ -198,8 +193,8 @@ importers: specifier: workspace:* version: link:../tokens '@stencil/core': - specifier: 4.38.3 - version: 4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm) + specifier: 4.43.3 + version: 4.43.3 autosize: specifier: 6.0.1 version: 6.0.1 @@ -236,22 +231,22 @@ importers: version: 1.55.1 '@stencil/angular-output-target': specifier: 1.1.1 - version: 1.1.1(@stencil/core@4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm)) + version: 1.1.1(@stencil/core@4.43.3) '@stencil/playwright': specifier: 0.2.3 - version: 0.2.3(@playwright/test@1.55.1)(@stencil/core@4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm)) + version: 0.2.3(@playwright/test@1.55.1)(@stencil/core@4.43.3) '@stencil/react-output-target': specifier: 0.5.3 - version: 0.5.3(@stencil/core@4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm)) + version: 0.5.3(@stencil/core@4.43.3) '@stencil/sass': specifier: 3.2.3 - version: 3.2.3(@stencil/core@4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm)) + version: 3.2.3(@stencil/core@4.43.3) + '@stencil/vitest': + specifier: 1.11.6 + version: 1.11.6(@playwright/test@1.55.1)(@stencil/core@4.43.3)(@vitest/browser-playwright@4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))(vitest@4.1.5))(jsdom@27.4.0)(playwright@1.59.1)(vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))) '@types/autosize': specifier: ^4.0.3 version: 4.0.3 - '@types/jest': - specifier: ^29.5.10 - version: 29.5.14 '@types/node': specifier: ^20.14.2 version: 20.19.40 @@ -260,22 +255,16 @@ importers: version: 1.12.4 '@typescript-eslint/eslint-plugin': specifier: 8.52.0 - version: 8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.52.0 - version: 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.52.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.3) eslint: specifier: 9.39.2 - version: 9.39.2(jiti@2.6.1) + version: 9.39.2(jiti@2.7.0) eslint-config-prettier: specifier: 9.1.2 - version: 9.1.2(eslint@9.39.2(jiti@2.6.1)) - jest: - specifier: 29.7.0 - version: 29.7.0(@types/node@20.19.40) - jest-cli: - specifier: 29.7.0 - version: 29.7.0(@types/node@20.19.40) + version: 9.1.2(eslint@9.39.2(jiti@2.7.0)) prettier: specifier: 3.7.4 version: 3.7.4 @@ -303,6 +292,9 @@ importers: typescript: specifier: 5.9.3 version: 5.9.3 + vitest: + specifier: 4.1.5 + version: 4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)) react: dependencies: @@ -310,12 +302,6 @@ importers: specifier: workspace:* version: link:../core devDependencies: - '@testing-library/jest-dom': - specifier: 6.9.1 - version: 6.9.1 - '@types/jest': - specifier: 23.3.9 - version: 23.3.9 '@types/node': specifier: ^15.12.2 version: 15.14.9 @@ -325,9 +311,6 @@ importers: '@types/react-dom': specifier: ^16.9.0 version: 16.9.25(@types/react@16.14.69) - jest: - specifier: 29.7.0 - version: 29.7.0(@types/node@15.14.9) react: specifier: 16.14.0 version: 16.14.0 @@ -362,9 +345,6 @@ packages: '@acemir/cssom@0.9.31': resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} - '@adobe/css-tools@4.4.4': - resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - '@algolia/abtesting@1.14.1': resolution: {integrity: sha512-Dkj0BgPiLAaim9sbQ97UKDFHJE/880wgStAM18U++NaJ/2Cws34J5731ovJifr6E3Pv4T2CqvMXf8qLCC417Ew==} engines: {node: '>= 14.0.0'} @@ -619,10 +599,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} - engines: {node: '>=6.9.0'} - '@babel/helper-split-export-declaration@7.24.7': resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} @@ -648,97 +624,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.28.6': - resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.28.6': - resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.28.6': - resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/template@7.28.6': resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} @@ -751,9 +636,6 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} @@ -1476,100 +1358,30 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - '@istanbuljs/schema@0.1.6': resolution: {integrity: sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==} engines: {node: '>=8'} - '@jest/console@29.7.0': - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/core@29.7.0': - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - 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 - '@jest/diff-sequences@30.4.0': resolution: {integrity: sha512-zOpzlfUs45l6u7jm39qr87JCHUDsaeCtvL+kQe/Vn9jSnRB4/5IPXISm0h9I1vZW/o00Kn4UTJ2MOlhnUGwv3g==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/expect-utils@30.4.1': resolution: {integrity: sha512-ZBn5CglH8fBsQsvs4VWNzD4aWfUYks+IdOOQU3MEK71ol/BcVm+P+rtb1KpiFBpSWSCE27uOahyyf1vfqOVbcQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/expect@29.7.0': - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/get-type@30.1.0': resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/globals@29.7.0': - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/pattern@30.4.0': resolution: {integrity: sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/reporters@29.7.0': - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - 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 - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/schemas@30.4.1': resolution: {integrity: sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/source-map@29.6.3': - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-result@29.7.0': - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/types@30.4.1': resolution: {integrity: sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2174,8 +1986,8 @@ packages: cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.34.9': - resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} + '@rollup/rollup-darwin-arm64@4.44.0': + resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==} cpu: [arm64] os: [darwin] @@ -2184,8 +1996,8 @@ packages: cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.34.9': - resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} + '@rollup/rollup-darwin-x64@4.44.0': + resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==} cpu: [x64] os: [darwin] @@ -2214,8 +2026,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.34.9': - resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} + '@rollup/rollup-linux-arm64-gnu@4.44.0': + resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==} cpu: [arm64] os: [linux] @@ -2224,8 +2036,8 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.34.9': - resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} + '@rollup/rollup-linux-arm64-musl@4.44.0': + resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==} cpu: [arm64] os: [linux] @@ -2269,8 +2081,8 @@ packages: cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.34.9': - resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} + '@rollup/rollup-linux-x64-gnu@4.44.0': + resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==} cpu: [x64] os: [linux] @@ -2279,8 +2091,8 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.34.9': - resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} + '@rollup/rollup-linux-x64-musl@4.44.0': + resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==} cpu: [x64] os: [linux] @@ -2299,8 +2111,8 @@ packages: cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.34.9': - resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} + '@rollup/rollup-win32-arm64-msvc@4.44.0': + resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==} cpu: [arm64] os: [win32] @@ -2319,8 +2131,8 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.34.9': - resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} + '@rollup/rollup-win32-x64-msvc@4.44.0': + resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==} cpu: [x64] os: [win32] @@ -2370,9 +2182,6 @@ packages: resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} engines: {node: '>=18'} - '@sinclair/typebox@0.27.10': - resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} - '@sinclair/typebox@0.34.49': resolution: {integrity: sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==} @@ -2380,12 +2189,6 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -2394,8 +2197,8 @@ packages: peerDependencies: '@stencil/core': '>=2.0.0 || >=3 || >= 4.0.0-beta.0 || >= 4.0.0' - '@stencil/core@4.38.3': - resolution: {integrity: sha512-rSDzGUfi58X8K79ySjlM6KlY+mq7D+ittzgNAdYHcsXHc70sBpdatFhnbOg25uVDiMf7xRAH9slP38pPdXnZOQ==} + '@stencil/core@4.43.3': + resolution: {integrity: sha512-w41W6txhGULvvEfa5AEgwfNGAbK3YGowQYMTWuRvXSIbnkiyRDGLogsYSYtHDlz1JJe645JJIK9Lvh5uquFiSw==} engines: {node: '>=16.0.0', npm: '>=7.10.0'} hasBin: true @@ -2417,9 +2220,41 @@ packages: peerDependencies: '@stencil/core': '>=2.0.0 || >=3.0.0-beta.0 || >= 4.0.0-beta.0 || >= 4.0.0' - '@testing-library/jest-dom@6.9.1': - resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} - engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + '@stencil/vitest@1.11.6': + resolution: {integrity: sha512-8aqZzN2O0bppsGJSqLetgzyATufRRSybKLctKuW93KtHED/WwJyS0U+8D9OqKEjxnopvSNO4QrvLWqntaqhvSw==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@playwright/test': '*' + '@stencil/core': ^4.0.0 || ^5.0.0-0 + '@stencil/mock-doc': '*' + '@vitest/browser-playwright': '*' + '@vitest/browser-preview': '*' + '@vitest/browser-webdriverio': '*' + '@wdio/globals': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + vitest: ^4.0.0 || ^3.0.0 || ^2.0.0 + peerDependenciesMeta: + '@playwright/test': + optional: true + '@stencil/mock-doc': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@wdio/globals': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} @@ -2438,18 +2273,6 @@ packages: '@types/autosize@4.0.3': resolution: {integrity: sha512-o0ZyU3ePp3+KRbhHsY4ogjc+ZQWgVN5h6j8BHW5RII4cFKi6PEKK9QPAcphJVkD0dGpyFnD3VRR0WMvHVjCv9w==} - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.27.0': - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.28.0': - resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -2462,9 +2285,6 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -2474,21 +2294,12 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/jest@23.3.9': - resolution: {integrity: sha512-wNMwXSUcwyYajtbayfPp55tSayuDVU6PfY5gzvRSj80UvxdXEJOVPnUVajaOp7NgXLm+1e2ZDLULmpsU9vDvQw==} - - '@types/jest@29.5.14': - resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} - '@types/jest@30.0.0': resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@12.20.55': - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@15.14.9': resolution: {integrity: sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==} @@ -2623,9 +2434,6 @@ packages: vite: optional: true - '@vitest/pretty-format@4.0.16': - resolution: {integrity: sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==} - '@vitest/pretty-format@4.1.5': resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==} @@ -2638,13 +2446,10 @@ packages: '@vitest/spy@4.1.5': resolution: {integrity: sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==} - '@vitest/ui@4.0.16': - resolution: {integrity: sha512-rkoPH+RqWopVxDnCBE/ysIdfQ2A7j1eDmW8tCxxrR9nnFBa9jKf86VgsSAzxBd1x+ny0GC4JgiD3SNfRHv3pOg==} + '@vitest/ui@4.1.5': + resolution: {integrity: sha512-3Z9HNFiV0IF1fk0JPiK+7kE1GcaIPefQQIBYur6PM5yFIq6agys3uqP/0t966e1wXfmjbRCHDe7qW236Xjwnag==} peerDependencies: - vitest: 4.0.16 - - '@vitest/utils@4.0.16': - resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==} + vitest: 4.1.5 '@vitest/utils@4.1.5': resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==} @@ -2703,10 +2508,6 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - ansi-escapes@7.3.0: resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} engines: {node: '>=18'} @@ -2731,20 +2532,9 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} @@ -2788,31 +2578,6 @@ packages: react-native-b4a: optional: true - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - babel-preset-current-node-syntax@1.2.0: - resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} - peerDependencies: - '@babel/core': ^7.0.0 || ^8.0.0-0 - - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -2909,9 +2674,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -2948,14 +2710,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - caniuse-lite@1.0.30001792: resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} @@ -2974,10 +2728,6 @@ packages: change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} @@ -2998,17 +2748,10 @@ packages: peerDependencies: devtools-protocol: '*' - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - ci-info@4.4.0: resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} - cjs-module-lexer@1.4.3: - resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - cleave-zen@0.0.17: resolution: {integrity: sha512-SLuad6RaACsONu3Fr4F3sE9YXxMlMv6AiaZ8qkwfdV9Ex+TJ+ip3rLFsdrqvnp0YGlslfzAfw8q8MwQJW3yHdg==} @@ -3036,13 +2779,6 @@ packages: resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} engines: {node: '>=20'} - co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - - collect-v8-coverage@1.0.3: - resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -3083,6 +2819,12 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + content-disposition@1.1.0: resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} engines: {node: '>=18'} @@ -3156,11 +2898,6 @@ packages: resolution: {integrity: sha512-FEc7gmNSj4mDQCWNt3mByVn3qZX3EjMvggiqgCQPF1yJAFfyX6Ai/emN89w18TRp+QcFmdTLgX3hfNnIVgYHcw==} engines: {node: '>=20'} - create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -3180,9 +2917,6 @@ packages: resolution: {integrity: sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==} engines: {node: '>= 6'} - css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -3215,14 +2949,6 @@ packages: decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - dedent@1.7.2: - resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -3254,24 +2980,13 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - devtools-protocol@0.0.1534754: resolution: {integrity: sha512-26T91cV5dbOYnXdJi5qQHoTtUoNEqwkHcAyu/IKtjIAxiEqPMrDiRkDOPWVsGfNZGmlQVHQbZRSjD8sxagWVsQ==} - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dom-accessibility-api@0.6.3: - resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} - dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -3299,10 +3014,6 @@ packages: electron-to-chromium@1.5.353: resolution: {integrity: sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w==} - emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -3482,22 +3193,10 @@ packages: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - expect@30.4.1: resolution: {integrity: sha512-PMARsyh/JtqC20HoGqlFcIlQAyqUtW4PlI1rup1uhYJtKuwAjbvWi3GQMAn+STdHum/dk8xrKfUM1+5SAwpolA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -3515,6 +3214,9 @@ packages: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} @@ -3546,9 +3248,6 @@ packages: fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} @@ -3587,10 +3286,6 @@ packages: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -3631,9 +3326,6 @@ packages: resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3667,10 +3359,6 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -3679,10 +3367,6 @@ packages: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - get-uri@6.0.5: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} engines: {node: '>= 14'} @@ -3713,10 +3397,6 @@ packages: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - global-directory@5.0.0: resolution: {integrity: sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==} engines: {node: '>=20'} @@ -3817,10 +3497,6 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} @@ -3865,11 +3541,6 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-local@3.2.0: - resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} - engines: {node: '>=8'} - hasBin: true - import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} @@ -3877,14 +3548,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - inflight@1.0.6: - resolution: {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. - inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} @@ -3920,10 +3583,6 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.16.2: - resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} - engines: {node: '>= 0.4'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -3936,10 +3595,6 @@ packages: resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - is-generator-function@1.1.2: resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} @@ -3986,10 +3641,6 @@ packages: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -4013,10 +3664,6 @@ packages: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - istanbul-lib-instrument@6.0.3: resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} @@ -4025,171 +3672,42 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - istanbul-reports@3.2.0: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} - jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-config@29.7.0: - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - 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 - - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-diff@30.4.1: resolution: {integrity: sha512-CRpFK0RtLriVDGcPPAnR6HMVI8bSR2jnUIgralhauzYQZIb4RH9AtEInTuQr65LmmGggGcRT6HIASxwqsVsmlA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-matcher-utils@30.4.1: resolution: {integrity: sha512-zvYfX5CaeEkFrrLS9suWe9rvJrm9J1Iv3ua8kIBv9GEPzcnsfBf0bob37la7s67fs0nlBC3EuvkOLnXQKxtx4A==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-message-util@30.4.1: resolution: {integrity: sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-mock@30.4.1: resolution: {integrity: sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-regex-util@30.4.0: resolution: {integrity: sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-util@30.4.1: resolution: {integrity: sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + jose@6.2.3: resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} @@ -4199,10 +3717,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.2: - resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} - hasBin: true - js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -4269,10 +3783,6 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - known-css-properties@0.37.0: resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} @@ -4281,10 +3791,6 @@ packages: engines: {node: '>=18'} hasBin: true - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -4300,9 +3806,9 @@ packages: resolution: {integrity: sha512-NYHA0MRPjvNX+vSw8Xxg6FLKxzAG+e7Pt8RqAQA/EehzHVXq9SxDqJIN3JL1hK0dweb884y8kIh6rkWvPyg9Wg==} hasBin: true - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} @@ -4367,9 +3873,6 @@ packages: resolution: {integrity: sha512-uCbIa8jWWmQZt4dSnEStkVC6gdakiinAm4PiGsywIkguF0eWMdcjDz0ECYhUolFU3pFLOev9VNPCEygydXnddg==} engines: {node: ^20.17.0 || >=22.9.0} - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -4404,9 +3907,6 @@ packages: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -4428,18 +3928,10 @@ packages: engines: {node: '>=4'} hasBin: true - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - mimic-function@5.0.1: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -4489,6 +3981,9 @@ packages: mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -4556,9 +4051,6 @@ packages: engines: {node: ^20.17.0 || >=22.9.0} hasBin: true - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.38: resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==} @@ -4599,10 +4091,6 @@ packages: resolution: {integrity: sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==} engines: {node: ^20.17.0 || >=22.9.0} - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -4636,10 +4124,6 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - onetime@7.0.0: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} @@ -4667,10 +4151,6 @@ packages: resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} engines: {node: '>=18'} - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -4679,10 +4159,6 @@ packages: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -4699,10 +4175,6 @@ packages: resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} engines: {node: '>=14.16'} - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - pac-proxy-agent@7.2.0: resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} engines: {node: '>= 14'} @@ -4745,17 +4217,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@2.0.2: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} @@ -4794,10 +4259,6 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - piscina@5.1.4: resolution: {integrity: sha512-7uU4ZnKeQq22t9AsmHGD2w4OYQGonwFnTypDypaWi7Qr2EvQIFVtG8J5D/3bE7W123Wdc9+v4CZDu5hJXVCtBg==} engines: {node: '>=20.x'} @@ -4806,14 +4267,16 @@ packages: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - pkg-dir@8.0.0: resolution: {integrity: sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==} engines: {node: '>=18'} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.1: + resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} + playwright-core@1.55.1: resolution: {integrity: sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==} engines: {node: '>=18'} @@ -4880,10 +4343,6 @@ packages: engines: {node: '>=14'} hasBin: true - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - pretty-format@30.4.1: resolution: {integrity: sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -4904,10 +4363,6 @@ packages: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -4944,9 +4399,6 @@ packages: engines: {node: '>=18'} hasBin: true - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - qified@0.10.1: resolution: {integrity: sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==} engines: {node: '>=20'} @@ -4955,6 +4407,9 @@ packages: resolution: {integrity: sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==} engines: {node: '>=0.6'} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -4992,10 +4447,6 @@ packages: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} - redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} @@ -5012,10 +4463,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -5024,15 +4471,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve.exports@2.0.3: - resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} - engines: {node: '>=10'} - - resolve@1.22.12: - resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} - engines: {node: '>= 0.4'} - hasBin: true - restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -5278,9 +4716,6 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -5293,9 +4728,6 @@ packages: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -5332,9 +4764,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -5358,9 +4787,6 @@ packages: spdx-license-ids@3.0.23: resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - ssri@13.0.1: resolution: {integrity: sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==} engines: {node: ^20.17.0 || >=22.9.0} @@ -5392,10 +4818,6 @@ packages: streamx@2.25.0: resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -5419,18 +4841,6 @@ packages: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -5507,10 +4917,6 @@ packages: resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} engines: {node: '>=14.18'} - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - svg-tags@1.0.0: resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} @@ -5545,10 +4951,6 @@ packages: teex@1.0.1: resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - text-decoder@1.2.7: resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} @@ -5587,9 +4989,6 @@ packages: resolution: {integrity: sha512-ELrFxuqsDdHUwoh0XxDbxuLD3Wnz49Z57IFvTtvWy1hJdcMZjXLIuonjilCiWHlT2GbE4Wlv1wKVTzDFnXH1aw==} hasBin: true - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5636,14 +5035,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - type-is@2.0.1: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} @@ -5656,6 +5047,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -5701,10 +5095,6 @@ packages: util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - v8-to-istanbul@9.3.0: - resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} - engines: {node: '>=10.12.0'} - validate-npm-package-name@7.0.2: resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==} engines: {node: ^20.17.0 || >=22.9.0} @@ -5756,6 +5146,11 @@ packages: yaml: optional: true + vitest-environment-stencil@1.11.6: + resolution: {integrity: sha512-HQzfsZ9WWqvlK3k/5PMUXYmiN2H29dLlM7oKg75/nMoZv0u5DeU5Xs6vTMxqePzXbCRvG/HW0SLUMQNRWnC4EQ==} + peerDependencies: + '@stencil/core': ^4.0.0 || ^5.0.0-0 + vitest@4.1.5: resolution: {integrity: sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -5801,9 +5196,6 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - watchpack@2.5.1: resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} engines: {node: '>=10.13.0'} @@ -5872,10 +5264,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - write-file-atomic@5.0.1: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5966,8 +5354,6 @@ snapshots: '@acemir/cssom@0.9.31': {} - '@adobe/css-tools@4.4.4': {} - '@algolia/abtesting@1.14.1': dependencies: '@algolia/client-common': 5.48.1 @@ -6090,7 +5476,7 @@ snapshots: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1) tslib: 2.8.1 - ? '@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@12.20.55)(chokidar@5.0.0)(jiti@2.6.1)(less@4.6.4)(ng-packagr@21.0.0(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(sass-embedded@1.99.0)(tslib@2.8.1)(typescript@5.9.3)(vitest@4.1.5(@types/node@12.20.55)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.0.16)(jsdom@27.4.0)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)))' + ? '@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@20.19.40)(chokidar@5.0.0)(jiti@2.7.0)(less@4.6.4)(ng-packagr@21.0.0(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.14)(sass-embedded@1.99.0)(tslib@2.8.1)(typescript@5.9.3)(vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)))' : dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) @@ -6099,8 +5485,8 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.21(@types/node@12.20.55) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) + '@inquirer/confirm': 5.1.21(@types/node@20.19.40) + '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) beasties: 0.4.1 browserslist: 4.28.2 esbuild: 0.27.3 @@ -6121,7 +5507,7 @@ snapshots: tslib: 2.8.1 typescript: 5.9.3 undici: 7.24.4 - vite: 7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3) + vite: 7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3) watchpack: 2.5.1 optionalDependencies: '@angular/core': 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.15.1) @@ -6130,7 +5516,7 @@ snapshots: lmdb: 3.5.1 ng-packagr: 21.0.0(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) postcss: 8.5.14 - vitest: 4.1.5(@types/node@12.20.55)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.0.16)(jsdom@27.4.0)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) + vitest: 4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -6155,13 +5541,13 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/cli@21.2.7(@types/node@12.20.55)(chokidar@5.0.0)': + '@angular/cli@21.2.7(@types/node@20.19.40)(chokidar@5.0.0)': dependencies: '@angular-devkit/architect': 0.2102.7(chokidar@5.0.0) '@angular-devkit/core': 21.2.7(chokidar@5.0.0) '@angular-devkit/schematics': 21.2.7(chokidar@5.0.0) - '@inquirer/prompts': 7.10.1(@types/node@12.20.55) - '@listr2/prompt-adapter-inquirer': 3.0.5(@inquirer/prompts@7.10.1(@types/node@12.20.55))(@types/node@12.20.55)(listr2@9.0.5) + '@inquirer/prompts': 7.10.1(@types/node@20.19.40) + '@listr2/prompt-adapter-inquirer': 3.0.5(@inquirer/prompts@7.10.1(@types/node@20.19.40))(@types/node@20.19.40)(listr2@9.0.5) '@modelcontextprotocol/sdk': 1.26.0(zod@4.3.6) '@schematics/angular': 21.2.7(chokidar@5.0.0) '@yarnpkg/lockfile': 1.1.0 @@ -6324,8 +5710,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.28.6': {} - '@babel/helper-split-export-declaration@7.24.7': dependencies: '@babel/types': 7.29.0 @@ -6345,91 +5729,6 @@ snapshots: dependencies: '@babel/types': 7.29.0 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 @@ -6453,8 +5752,6 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@bcoe/v8-coverage@0.2.3': {} - '@bcoe/v8-coverage@1.0.2': {} '@blazediff/core@1.9.1': {} @@ -6830,9 +6127,9 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.7.0))': dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -6920,329 +6217,159 @@ snapshots: '@inquirer/ansi@1.0.2': {} - '@inquirer/checkbox@4.3.2(@types/node@12.20.55)': + '@inquirer/checkbox@4.3.2(@types/node@20.19.40)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@12.20.55) + '@inquirer/core': 10.3.2(@types/node@20.19.40) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@12.20.55) + '@inquirer/type': 3.0.10(@types/node@20.19.40) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 - '@inquirer/confirm@5.1.21(@types/node@12.20.55)': + '@inquirer/confirm@5.1.21(@types/node@20.19.40)': dependencies: - '@inquirer/core': 10.3.2(@types/node@12.20.55) - '@inquirer/type': 3.0.10(@types/node@12.20.55) + '@inquirer/core': 10.3.2(@types/node@20.19.40) + '@inquirer/type': 3.0.10(@types/node@20.19.40) optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 - '@inquirer/core@10.3.2(@types/node@12.20.55)': + '@inquirer/core@10.3.2(@types/node@20.19.40)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@12.20.55) + '@inquirer/type': 3.0.10(@types/node@20.19.40) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 - '@inquirer/editor@4.2.23(@types/node@12.20.55)': + '@inquirer/editor@4.2.23(@types/node@20.19.40)': dependencies: - '@inquirer/core': 10.3.2(@types/node@12.20.55) - '@inquirer/external-editor': 1.0.3(@types/node@12.20.55) - '@inquirer/type': 3.0.10(@types/node@12.20.55) + '@inquirer/core': 10.3.2(@types/node@20.19.40) + '@inquirer/external-editor': 1.0.3(@types/node@20.19.40) + '@inquirer/type': 3.0.10(@types/node@20.19.40) optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 - '@inquirer/expand@4.0.23(@types/node@12.20.55)': + '@inquirer/expand@4.0.23(@types/node@20.19.40)': dependencies: - '@inquirer/core': 10.3.2(@types/node@12.20.55) - '@inquirer/type': 3.0.10(@types/node@12.20.55) + '@inquirer/core': 10.3.2(@types/node@20.19.40) + '@inquirer/type': 3.0.10(@types/node@20.19.40) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 - '@inquirer/external-editor@1.0.3(@types/node@12.20.55)': + '@inquirer/external-editor@1.0.3(@types/node@20.19.40)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 '@inquirer/figures@1.0.15': {} - '@inquirer/input@4.3.1(@types/node@12.20.55)': + '@inquirer/input@4.3.1(@types/node@20.19.40)': dependencies: - '@inquirer/core': 10.3.2(@types/node@12.20.55) - '@inquirer/type': 3.0.10(@types/node@12.20.55) + '@inquirer/core': 10.3.2(@types/node@20.19.40) + '@inquirer/type': 3.0.10(@types/node@20.19.40) optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 - '@inquirer/number@3.0.23(@types/node@12.20.55)': + '@inquirer/number@3.0.23(@types/node@20.19.40)': dependencies: - '@inquirer/core': 10.3.2(@types/node@12.20.55) - '@inquirer/type': 3.0.10(@types/node@12.20.55) + '@inquirer/core': 10.3.2(@types/node@20.19.40) + '@inquirer/type': 3.0.10(@types/node@20.19.40) optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 - '@inquirer/password@4.0.23(@types/node@12.20.55)': + '@inquirer/password@4.0.23(@types/node@20.19.40)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@12.20.55) - '@inquirer/type': 3.0.10(@types/node@12.20.55) + '@inquirer/core': 10.3.2(@types/node@20.19.40) + '@inquirer/type': 3.0.10(@types/node@20.19.40) optionalDependencies: - '@types/node': 12.20.55 - - '@inquirer/prompts@7.10.1(@types/node@12.20.55)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@12.20.55) - '@inquirer/confirm': 5.1.21(@types/node@12.20.55) - '@inquirer/editor': 4.2.23(@types/node@12.20.55) - '@inquirer/expand': 4.0.23(@types/node@12.20.55) - '@inquirer/input': 4.3.1(@types/node@12.20.55) - '@inquirer/number': 3.0.23(@types/node@12.20.55) - '@inquirer/password': 4.0.23(@types/node@12.20.55) - '@inquirer/rawlist': 4.1.11(@types/node@12.20.55) - '@inquirer/search': 3.2.2(@types/node@12.20.55) - '@inquirer/select': 4.4.2(@types/node@12.20.55) + '@types/node': 20.19.40 + + '@inquirer/prompts@7.10.1(@types/node@20.19.40)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@20.19.40) + '@inquirer/confirm': 5.1.21(@types/node@20.19.40) + '@inquirer/editor': 4.2.23(@types/node@20.19.40) + '@inquirer/expand': 4.0.23(@types/node@20.19.40) + '@inquirer/input': 4.3.1(@types/node@20.19.40) + '@inquirer/number': 3.0.23(@types/node@20.19.40) + '@inquirer/password': 4.0.23(@types/node@20.19.40) + '@inquirer/rawlist': 4.1.11(@types/node@20.19.40) + '@inquirer/search': 3.2.2(@types/node@20.19.40) + '@inquirer/select': 4.4.2(@types/node@20.19.40) optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 - '@inquirer/rawlist@4.1.11(@types/node@12.20.55)': + '@inquirer/rawlist@4.1.11(@types/node@20.19.40)': dependencies: - '@inquirer/core': 10.3.2(@types/node@12.20.55) - '@inquirer/type': 3.0.10(@types/node@12.20.55) + '@inquirer/core': 10.3.2(@types/node@20.19.40) + '@inquirer/type': 3.0.10(@types/node@20.19.40) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 - '@inquirer/search@3.2.2(@types/node@12.20.55)': + '@inquirer/search@3.2.2(@types/node@20.19.40)': dependencies: - '@inquirer/core': 10.3.2(@types/node@12.20.55) + '@inquirer/core': 10.3.2(@types/node@20.19.40) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@12.20.55) + '@inquirer/type': 3.0.10(@types/node@20.19.40) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 - '@inquirer/select@4.4.2(@types/node@12.20.55)': + '@inquirer/select@4.4.2(@types/node@20.19.40)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@12.20.55) + '@inquirer/core': 10.3.2(@types/node@20.19.40) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@12.20.55) + '@inquirer/type': 3.0.10(@types/node@20.19.40) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 - '@inquirer/type@3.0.10(@types/node@12.20.55)': + '@inquirer/type@3.0.10(@types/node@20.19.40)': optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 '@isaacs/fs-minipass@4.0.1': dependencies: minipass: 7.1.3 - '@istanbuljs/load-nyc-config@1.1.0': - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.2 - resolve-from: 5.0.0 - '@istanbuljs/schema@0.1.6': {} - '@jest/console@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.19.40 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - - '@jest/core@29.7.0': - 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': 20.19.40 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.40) - 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.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - '@jest/diff-sequences@30.4.0': {} - '@jest/environment@29.7.0': - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.40 - jest-mock: 29.7.0 - - '@jest/expect-utils@29.7.0': - dependencies: - jest-get-type: 29.6.3 - '@jest/expect-utils@30.4.1': dependencies: '@jest/get-type': 30.1.0 - '@jest/expect@29.7.0': - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.19.40 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - '@jest/get-type@30.1.0': {} - '@jest/globals@29.7.0': - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - '@jest/pattern@30.4.0': dependencies: - '@types/node': 12.20.55 - jest-regex-util: 30.4.0 - - '@jest/reporters@29.7.0': - 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.31 '@types/node': 20.19.40 - chalk: 4.1.2 - collect-v8-coverage: 1.0.3 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.3 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.2.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.3.0 - transitivePeerDependencies: - - supports-color - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.10 + jest-regex-util: 30.4.0 '@jest/schemas@30.4.1': dependencies: '@sinclair/typebox': 0.34.49 - '@jest/source-map@29.6.3': - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - callsites: 3.1.0 - graceful-fs: 4.2.11 - - '@jest/test-result@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.3 - - '@jest/test-sequencer@29.7.0': - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - - '@jest/transform@29.7.0': - dependencies: - '@babel/core': 7.29.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.31 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.8 - pirates: 4.0.7 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 15.14.9 - '@types/yargs': 17.0.35 - chalk: 4.1.2 - '@jest/types@30.4.1': dependencies: '@jest/pattern': 30.4.0 '@jest/schemas': 30.4.1 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 12.20.55 + '@types/node': 20.19.40 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -7400,10 +6527,10 @@ snapshots: '@keyv/serialize@1.1.1': {} - '@listr2/prompt-adapter-inquirer@3.0.5(@inquirer/prompts@7.10.1(@types/node@12.20.55))(@types/node@12.20.55)(listr2@9.0.5)': + '@listr2/prompt-adapter-inquirer@3.0.5(@inquirer/prompts@7.10.1(@types/node@20.19.40))(@types/node@20.19.40)(listr2@9.0.5)': dependencies: - '@inquirer/prompts': 7.10.1(@types/node@12.20.55) - '@inquirer/type': 3.0.10(@types/node@12.20.55) + '@inquirer/prompts': 7.10.1(@types/node@20.19.40) + '@inquirer/type': 3.0.10(@types/node@20.19.40) listr2: 9.0.5 transitivePeerDependencies: - '@types/node' @@ -7772,13 +6899,13 @@ snapshots: '@rollup/rollup-android-arm64@4.60.3': optional: true - '@rollup/rollup-darwin-arm64@4.34.9': + '@rollup/rollup-darwin-arm64@4.44.0': optional: true '@rollup/rollup-darwin-arm64@4.60.3': optional: true - '@rollup/rollup-darwin-x64@4.34.9': + '@rollup/rollup-darwin-x64@4.44.0': optional: true '@rollup/rollup-darwin-x64@4.60.3': @@ -7796,13 +6923,13 @@ snapshots: '@rollup/rollup-linux-arm-musleabihf@4.60.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.34.9': + '@rollup/rollup-linux-arm64-gnu@4.44.0': optional: true '@rollup/rollup-linux-arm64-gnu@4.60.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.34.9': + '@rollup/rollup-linux-arm64-musl@4.44.0': optional: true '@rollup/rollup-linux-arm64-musl@4.60.3': @@ -7829,13 +6956,13 @@ snapshots: '@rollup/rollup-linux-s390x-gnu@4.60.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.34.9': + '@rollup/rollup-linux-x64-gnu@4.44.0': optional: true '@rollup/rollup-linux-x64-gnu@4.60.3': optional: true - '@rollup/rollup-linux-x64-musl@4.34.9': + '@rollup/rollup-linux-x64-musl@4.44.0': optional: true '@rollup/rollup-linux-x64-musl@4.60.3': @@ -7847,7 +6974,7 @@ snapshots: '@rollup/rollup-openharmony-arm64@4.60.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.34.9': + '@rollup/rollup-win32-arm64-msvc@4.44.0': optional: true '@rollup/rollup-win32-arm64-msvc@4.60.3': @@ -7859,7 +6986,7 @@ snapshots: '@rollup/rollup-win32-x64-gnu@4.60.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.34.9': + '@rollup/rollup-win32-x64-msvc@4.44.0': optional: true '@rollup/rollup-win32-x64-msvc@4.60.3': @@ -7917,61 +7044,55 @@ snapshots: '@simple-libs/stream-utils@1.2.0': {} - '@sinclair/typebox@0.27.10': {} - '@sinclair/typebox@0.34.49': {} '@sindresorhus/merge-streams@4.0.0': {} - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - '@standard-schema/spec@1.1.0': {} - '@stencil/angular-output-target@1.1.1(@stencil/core@4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm))': + '@stencil/angular-output-target@1.1.1(@stencil/core@4.43.3)': dependencies: - '@stencil/core': 4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm) + '@stencil/core': 4.43.3 - '@stencil/core@4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm)': + '@stencil/core@4.43.3': optionalDependencies: - '@rollup/rollup-darwin-arm64': 4.34.9 - '@rollup/rollup-darwin-x64': 4.34.9 - '@rollup/rollup-linux-arm64-gnu': 4.34.9 - '@rollup/rollup-linux-arm64-musl': 4.34.9 - '@rollup/rollup-linux-x64-gnu': 4.34.9 - '@rollup/rollup-linux-x64-musl': 4.34.9 - '@rollup/rollup-win32-arm64-msvc': 4.34.9 - '@rollup/rollup-win32-x64-msvc': 4.34.9 + '@rollup/rollup-darwin-arm64': 4.44.0 + '@rollup/rollup-darwin-x64': 4.44.0 + '@rollup/rollup-linux-arm64-gnu': 4.44.0 + '@rollup/rollup-linux-arm64-musl': 4.44.0 + '@rollup/rollup-linux-x64-gnu': 4.44.0 + '@rollup/rollup-linux-x64-musl': 4.44.0 + '@rollup/rollup-win32-arm64-msvc': 4.44.0 + '@rollup/rollup-win32-x64-msvc': 4.44.0 - '@stencil/playwright@0.2.3(@playwright/test@1.55.1)(@stencil/core@4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm))': + '@stencil/playwright@0.2.3(@playwright/test@1.55.1)(@stencil/core@4.43.3)': dependencies: '@playwright/test': 1.55.1 - '@stencil/core': 4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm) + '@stencil/core': 4.43.3 deepmerge: 4.3.1 find-up: 8.0.0 - '@stencil/react-output-target@0.5.3(@stencil/core@4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm))': + '@stencil/react-output-target@0.5.3(@stencil/core@4.43.3)': dependencies: - '@stencil/core': 4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm) + '@stencil/core': 4.43.3 - '@stencil/sass@3.2.3(@stencil/core@4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm))': + '@stencil/sass@3.2.3(@stencil/core@4.43.3)': dependencies: - '@stencil/core': 4.38.3(patch_hash=zumbt3pmxtbh6dnwn7wjwfcqtm) + '@stencil/core': 4.43.3 sass-embedded: 1.99.0 - '@testing-library/jest-dom@6.9.1': + '@stencil/vitest@1.11.6(@playwright/test@1.55.1)(@stencil/core@4.43.3)(@vitest/browser-playwright@4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))(vitest@4.1.5))(jsdom@27.4.0)(playwright@1.59.1)(vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)))': dependencies: - '@adobe/css-tools': 4.4.4 - aria-query: 5.3.2 - css.escape: 1.5.1 - dom-accessibility-api: 0.6.3 - picocolors: 1.1.1 - redent: 3.0.0 + '@stencil/core': 4.43.3 + jiti: 2.7.0 + local-pkg: 1.1.2 + vitest: 4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)) + vitest-environment-stencil: 1.11.6(@playwright/test@1.55.1)(@stencil/core@4.43.3)(@vitest/browser-playwright@4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))(vitest@4.1.5))(jsdom@27.4.0)(playwright@1.59.1)(vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))) + optionalDependencies: + '@playwright/test': 1.55.1 + '@vitest/browser-playwright': 4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))(vitest@4.1.5) + jsdom: 27.4.0 + playwright: 1.59.1 '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -7989,27 +7110,6 @@ snapshots: '@types/autosize@4.0.3': {} - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.29.3 - '@babel/types': 7.29.0 - '@types/babel__generator': 7.27.0 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.28.0 - - '@types/babel__generator@7.27.0': - dependencies: - '@babel/types': 7.29.0 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.29.3 - '@babel/types': 7.29.0 - - '@types/babel__traverse@7.28.0': - dependencies: - '@babel/types': 7.29.0 - '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -8021,10 +7121,6 @@ snapshots: '@types/estree@1.0.9': {} - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 20.19.40 - '@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-report@3.0.3': @@ -8035,13 +7131,6 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 - '@types/jest@23.3.9': {} - - '@types/jest@29.5.14': - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - '@types/jest@30.0.0': dependencies: expect: 30.4.1 @@ -8049,8 +7138,6 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@12.20.55': {} - '@types/node@15.14.9': {} '@types/node@20.19.40': @@ -8086,15 +7173,15 @@ snapshots: '@types/node': 20.19.40 optional: true - '@typescript-eslint/eslint-plugin@8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.52.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.52.0 - '@typescript-eslint/type-utils': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.52.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.52.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.52.0 - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -8102,14 +7189,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.52.0 '@typescript-eslint/types': 8.52.0 '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.52.0 debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -8132,13 +7219,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.52.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.52.0 '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.52.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.3) debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -8161,13 +7248,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.52.0(eslint@9.39.2(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.52.0 '@typescript-eslint/types': 8.52.0 '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -8177,39 +7264,71 @@ snapshots: '@typescript-eslint/types': 8.52.0 eslint-visitor-keys: 4.2.1 - '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))': + '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))': + dependencies: + vite: 7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3) + + '@vitest/browser-playwright@4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))(vitest@4.1.5)': dependencies: - vite: 7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3) + '@vitest/browser': 4.1.5(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))(vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))) + '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) + playwright: 1.59.1 + tinyrainbow: 3.1.0 + vitest: 4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite - '@vitest/browser-playwright@4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))(vitest@4.1.5)': + '@vitest/browser-playwright@4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))(vitest@4.1.5)': dependencies: - '@vitest/browser': 4.1.5(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))(vitest@4.1.5(@types/node@12.20.55)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.0.16)(jsdom@27.4.0)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))) - '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) + '@vitest/browser': 4.1.5(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))(vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))) + '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)) playwright: 1.59.1 tinyrainbow: 3.1.0 - vitest: 4.1.5(@types/node@12.20.55)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.0.16)(jsdom@27.4.0)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) + vitest: 4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + optional: true + + '@vitest/browser@4.1.5(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))(vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)))': + dependencies: + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) + '@vitest/utils': 4.1.5 + magic-string: 0.30.21 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.1.0 + vitest: 4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) + ws: 8.20.0 transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.5(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))(vitest@4.1.5(@types/node@12.20.55)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.0.16)(jsdom@27.4.0)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)))': + '@vitest/browser@4.1.5(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))(vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)))': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) + '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)) '@vitest/utils': 4.1.5 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.5(@types/node@12.20.55)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.0.16)(jsdom@27.4.0)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) + vitest: 4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)) ws: 8.20.0 transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite + optional: true '@vitest/coverage-v8@4.1.5(@vitest/browser@4.1.5)(vitest@4.1.5)': dependencies: @@ -8223,9 +7342,9 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.5(@types/node@12.20.55)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.0.16)(jsdom@27.4.0)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) + vitest: 4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) optionalDependencies: - '@vitest/browser': 4.1.5(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))(vitest@4.1.5(@types/node@12.20.55)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.0.16)(jsdom@27.4.0)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))) + '@vitest/browser': 4.1.5(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))(vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))) '@vitest/expect@4.1.5': dependencies: @@ -8236,17 +7355,21 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))': + '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))': dependencies: '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3) + vite: 7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3) - '@vitest/pretty-format@4.0.16': + '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))': dependencies: - tinyrainbow: 3.1.0 + '@vitest/spy': 4.1.5 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0) '@vitest/pretty-format@4.1.5': dependencies: @@ -8266,21 +7389,16 @@ snapshots: '@vitest/spy@4.1.5': {} - '@vitest/ui@4.0.16(vitest@4.1.5)': + '@vitest/ui@4.1.5(vitest@4.1.5)': dependencies: - '@vitest/utils': 4.0.16 + '@vitest/utils': 4.1.5 fflate: 0.8.2 flatted: 3.4.2 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vitest: 4.1.5(@types/node@12.20.55)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.0.16)(jsdom@27.4.0)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) - - '@vitest/utils@4.0.16': - dependencies: - '@vitest/pretty-format': 4.0.16 - tinyrainbow: 3.1.0 + vitest: 4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) '@vitest/utils@4.1.5': dependencies: @@ -8355,10 +7473,6 @@ snapshots: ansi-colors@4.1.3: {} - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - ansi-escapes@7.3.0: dependencies: environment: 1.1.0 @@ -8375,19 +7489,8 @@ snapshots: ansi-styles@6.2.3: {} - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.2 - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - argparse@2.0.1: {} - aria-query@5.3.2: {} - array-ify@1.0.0: {} array-union@2.1.0: {} @@ -8424,61 +7527,6 @@ snapshots: b4a@1.8.1: {} - babel-jest@29.7.0(@babel/core@7.29.0): - dependencies: - '@babel/core': 7.29.0 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.29.0) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@6.1.1: - dependencies: - '@babel/helper-plugin-utils': 7.28.6 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.6 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.28.0 - - babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.0): - dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.0) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.0) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.0) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.0) - - babel-preset-jest@29.6.3(@babel/core@7.29.0): - dependencies: - '@babel/core': 7.29.0 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) - balanced-match@1.0.2: {} balanced-match@2.0.0: {} @@ -8580,10 +7628,6 @@ snapshots: node-releases: 2.0.38 update-browserslist-db: 1.2.3(browserslist@4.28.2) - bser@2.1.1: - dependencies: - node-int64: 0.4.0 - buffer-crc32@0.2.13: {} buffer-from@1.1.2: {} @@ -8635,10 +7679,6 @@ snapshots: callsites@3.1.0: {} - camelcase@5.3.1: {} - - camelcase@6.3.0: {} - caniuse-lite@1.0.30001792: {} chai@6.2.2: {} @@ -8652,8 +7692,6 @@ snapshots: change-case@5.4.4: {} - char-regex@1.0.2: {} - chardet@2.1.1: {} chokidar@4.0.3: @@ -8672,12 +7710,8 @@ snapshots: mitt: 3.0.1 zod: 3.25.76 - ci-info@3.9.0: {} - ci-info@4.4.0: {} - cjs-module-lexer@1.4.3: {} - cleave-zen@0.0.17: {} cli-cursor@5.0.0: @@ -8705,10 +7739,6 @@ snapshots: strip-ansi: 7.2.0 wrap-ansi: 9.0.2 - co@4.6.0: {} - - collect-v8-coverage@1.0.3: {} - color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -8738,6 +7768,10 @@ snapshots: concat-map@0.0.1: {} + confbox@0.1.8: {} + + confbox@0.2.4: {} + content-disposition@1.1.0: {} content-type@1.0.5: {} @@ -8808,36 +7842,6 @@ snapshots: p-filter: 4.1.0 p-map: 7.0.4 - create-jest@29.7.0(@types/node@15.14.9): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@15.14.9) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - create-jest@29.7.0(@types/node@20.19.40): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.19.40) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -8861,8 +7865,6 @@ snapshots: css-what@7.0.0: {} - css.escape@1.5.1: {} - cssesc@3.0.0: {} cssstyle@5.3.7: @@ -8887,8 +7889,6 @@ snapshots: decimal.js@10.6.0: {} - dedent@1.7.2: {} - deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -8918,18 +7918,12 @@ snapshots: detect-libc@2.1.2: optional: true - detect-newline@3.1.0: {} - devtools-protocol@0.0.1534754: {} - diff-sequences@29.6.3: {} - dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dom-accessibility-api@0.6.3: {} - dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -8962,8 +7956,6 @@ snapshots: electron-to-chromium@1.5.353: {} - emittery@0.13.1: {} - emoji-regex@10.6.0: {} emoji-regex@8.0.0: {} @@ -9085,9 +8077,9 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@9.1.2(eslint@9.39.2(jiti@2.6.1)): + eslint-config-prettier@9.1.2(eslint@9.39.2(jiti@2.7.0)): dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.7.0) eslint-scope@8.4.0: dependencies: @@ -9098,9 +8090,9 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.39.2(jiti@2.6.1): + eslint@9.39.2(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.2 '@eslint/config-helpers': 0.4.2 @@ -9135,7 +8127,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.6.1 + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -9183,30 +8175,8 @@ snapshots: dependencies: eventsource-parser: 3.0.8 - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - exit@0.1.2: {} - expect-type@1.3.0: {} - expect@29.7.0: - 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 - expect@30.4.1: dependencies: '@jest/expect-utils': 30.4.1 @@ -9256,6 +8226,8 @@ snapshots: transitivePeerDependencies: - supports-color + exsolve@1.0.8: {} + extract-zip@2.0.1: dependencies: debug: 4.4.3 @@ -9290,10 +8262,6 @@ snapshots: dependencies: reusify: 1.1.0 - fb-watchman@2.0.2: - dependencies: - bser: 2.1.1 - fd-slicer@1.1.0: dependencies: pend: 1.2.0 @@ -9334,11 +8302,6 @@ snapshots: find-up-simple@1.0.1: {} - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -9380,8 +8343,6 @@ snapshots: dependencies: minipass: 7.1.3 - fs.realpath@1.0.0: {} - fsevents@2.3.2: optional: true @@ -9411,8 +8372,6 @@ snapshots: hasown: 2.0.3 math-intrinsics: 1.1.0 - get-package-type@0.1.0: {} - get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -9422,8 +8381,6 @@ snapshots: dependencies: pump: 3.0.4 - get-stream@6.0.1: {} - get-uri@6.0.5: dependencies: basic-ftp: 5.3.1 @@ -9460,15 +8417,6 @@ snapshots: minipass: 7.1.3 path-scurry: 2.0.2 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.5 - once: 1.4.0 - path-is-absolute: 1.0.1 - global-directory@5.0.0: dependencies: ini: 6.0.0 @@ -9580,8 +8528,6 @@ snapshots: transitivePeerDependencies: - supports-color - human-signals@2.1.0: {} - husky@8.0.3: {} hyperdyperid@1.2.0: {} @@ -9615,22 +8561,10 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-local@3.2.0: - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - import-meta-resolve@4.2.0: {} imurmurhash@0.1.4: {} - indent-string@4.0.0: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - inherits@2.0.3: {} inherits@2.0.4: {} @@ -9656,10 +8590,6 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.16.2: - dependencies: - hasown: 2.0.3 - is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -9668,8 +8598,6 @@ snapshots: dependencies: get-east-asian-width: 1.6.0 - is-generator-fn@2.1.0: {} - is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 @@ -9710,8 +8638,6 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.3 - is-stream@2.0.1: {} - is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.20 @@ -9726,16 +8652,6 @@ snapshots: istanbul-lib-coverage@3.2.2: {} - istanbul-lib-instrument@5.2.1: - dependencies: - '@babel/core': 7.29.0 - '@babel/parser': 7.29.3 - '@istanbuljs/schema': 0.1.6 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.29.0 @@ -9752,156 +8668,11 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@4.0.1: - dependencies: - debug: 4.4.3 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - jest-changed-files@29.7.0: - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - - jest-circus@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.40 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.7.2 - is-generator-fn: 2.1.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.1.0 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-cli@29.7.0(@types/node@15.14.9): - dependencies: - '@jest/core': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@15.14.9) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@15.14.9) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-cli@29.7.0(@types/node@20.19.40): - dependencies: - '@jest/core': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.19.40) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.19.40) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-config@29.7.0(@types/node@15.14.9): - dependencies: - '@babel/core': 7.29.0 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.29.0) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - 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.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 15.14.9 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-config@29.7.0(@types/node@20.19.40): - dependencies: - '@babel/core': 7.29.0 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.29.0) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - 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.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.19.40 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-diff@29.7.0: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - jest-diff@30.4.1: dependencies: '@jest/diff-sequences': 30.4.0 @@ -9909,57 +8680,6 @@ snapshots: chalk: 4.1.2 pretty-format: 30.4.1 - jest-docblock@29.7.0: - dependencies: - detect-newline: 3.1.0 - - jest-each@29.7.0: - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - - jest-environment-node@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 15.14.9 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - jest-get-type@29.6.3: {} - - jest-haste-map@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 20.19.40 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - - jest-leak-detector@29.7.0: - dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-matcher-utils@29.7.0: - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - jest-matcher-utils@30.4.1: dependencies: '@jest/get-type': 30.1.0 @@ -9967,18 +8687,6 @@ snapshots: jest-diff: 30.4.1 pretty-format: 30.4.1 - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.29.0 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - jest-message-util@30.4.1: dependencies: '@babel/code-frame': 7.29.0 @@ -9992,205 +8700,33 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.19.40 - jest-util: 29.7.0 - jest-mock@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 12.20.55 + '@types/node': 20.19.40 jest-util: 30.4.1 - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - optionalDependencies: - jest-resolve: 29.7.0 - - jest-regex-util@29.6.3: {} - jest-regex-util@30.4.0: {} - jest-resolve-dependencies@29.7.0: - dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - jest-resolve@29.7.0: - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.12 - resolve.exports: 2.0.3 - slash: 3.0.0 - - jest-runner@29.7.0: - 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': 20.19.40 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - 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 - transitivePeerDependencies: - - supports-color - - jest-runtime@29.7.0: - 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': 20.19.40 - chalk: 4.1.2 - cjs-module-lexer: 1.4.3 - collect-v8-coverage: 1.0.3 - glob: 7.2.3 - graceful-fs: 4.2.11 - 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 - transitivePeerDependencies: - - supports-color - - jest-snapshot@29.7.0: - dependencies: - '@babel/core': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) - '@babel/types': 7.29.0 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) - chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - 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.8.0 - transitivePeerDependencies: - - supports-color - - jest-util@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 15.14.9 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.2 - jest-util@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 12.20.55 + '@types/node': 20.19.40 chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 picomatch: 4.0.4 - jest-validate@29.7.0: - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - - jest-watcher@29.7.0: - dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.40 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 - - jest-worker@29.7.0: - dependencies: - '@types/node': 20.19.40 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest@29.7.0(@types/node@15.14.9): - dependencies: - '@jest/core': 29.7.0 - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@15.14.9) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest@29.7.0(@types/node@20.19.40): - dependencies: - '@jest/core': 29.7.0 - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.19.40) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jiti@2.6.1: {} + jiti@2.7.0: {} + jose@6.2.3: {} js-tokens@10.0.0: {} js-tokens@4.0.0: {} - js-yaml@3.14.2: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -10257,8 +8793,6 @@ snapshots: kind-of@6.0.3: {} - kleur@3.0.3: {} - known-css-properties@0.37.0: {} less@4.6.4: @@ -10274,8 +8808,6 @@ snapshots: needle: 3.5.0 source-map: 0.6.1 - leven@3.1.0: {} - levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -10310,9 +8842,11 @@ snapshots: '@lmdb/lmdb-win32-x64': 3.5.1 optional: true - locate-path@5.0.0: + local-pkg@1.1.2: dependencies: - p-locate: 4.1.0 + mlly: 1.8.2 + pkg-types: 2.3.1 + quansync: 0.2.11 locate-path@6.0.0: dependencies: @@ -10392,10 +8926,6 @@ snapshots: transitivePeerDependencies: - supports-color - makeerror@1.0.12: - dependencies: - tmpl: 1.0.5 - math-intrinsics@1.1.0: {} mathml-tag-names@2.1.3: {} @@ -10429,8 +8959,6 @@ snapshots: merge-descriptors@2.0.0: {} - merge-stream@2.0.0: {} - merge2@1.4.1: {} micromatch@4.0.8: @@ -10447,12 +8975,8 @@ snapshots: mime@1.6.0: optional: true - mimic-fn@2.1.0: {} - mimic-function@5.0.1: {} - min-indent@1.0.1: {} - minimatch@10.2.5: dependencies: brace-expansion: 5.0.6 @@ -10503,6 +9027,13 @@ snapshots: mitt@3.0.1: {} + mlly@1.8.2: + dependencies: + acorn: 8.16.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.4 + mrmime@2.0.1: {} ms@2.1.3: {} @@ -10593,8 +9124,6 @@ snapshots: undici: 6.25.0 which: 6.0.1 - node-int64@0.4.0: {} - node-releases@2.0.38: {} nopt@9.0.0: @@ -10645,10 +9174,6 @@ snapshots: transitivePeerDependencies: - supports-color - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - nth-check@2.1.1: dependencies: boolbase: 1.0.0 @@ -10683,10 +9208,6 @@ snapshots: dependencies: wrappy: 1.0.2 - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - onetime@7.0.0: dependencies: mimic-function: 5.0.1 @@ -10733,10 +9254,6 @@ snapshots: dependencies: p-map: 7.0.4 - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -10745,10 +9262,6 @@ snapshots: dependencies: yocto-queue: 1.2.2 - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 @@ -10761,8 +9274,6 @@ snapshots: p-timeout@6.1.4: {} - p-try@2.2.0: {} - pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 @@ -10834,12 +9345,8 @@ snapshots: path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} - path-parse@1.0.7: {} - path-scurry@2.0.2: dependencies: lru-cache: 11.3.6 @@ -10869,22 +9376,28 @@ snapshots: pify@4.0.1: optional: true - pirates@4.0.7: {} - piscina@5.1.4: optionalDependencies: '@napi-rs/nice': 1.1.1 pkce-challenge@5.0.1: {} - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - pkg-dir@8.0.0: dependencies: find-up-simple: 1.0.1 + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.2 + pathe: 2.0.3 + + pkg-types@2.3.1: + dependencies: + confbox: 0.2.4 + exsolve: 1.0.8 + pathe: 2.0.3 + playwright-core@1.55.1: {} playwright-core@1.59.1: {} @@ -10934,12 +9447,6 @@ snapshots: prettier@3.7.4: {} - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - pretty-format@30.4.1: dependencies: '@jest/schemas': 30.4.1 @@ -10958,11 +9465,6 @@ snapshots: err-code: 2.0.3 retry: 0.12.0 - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -11035,8 +9537,6 @@ snapshots: - typescript - utf-8-validate - pure-rand@6.1.0: {} - qified@0.10.1: dependencies: hookified: 2.2.0 @@ -11045,6 +9545,8 @@ snapshots: dependencies: side-channel: 1.1.0 + quansync@0.2.11: {} + queue-microtask@1.2.3: {} range-parser@1.2.1: {} @@ -11080,11 +9582,6 @@ snapshots: readdirp@5.0.0: {} - redent@3.0.0: - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - reflect-metadata@0.2.2: {} replace-in-file@8.4.0: @@ -11097,23 +9594,10 @@ snapshots: require-from-string@2.0.2: {} - resolve-cwd@3.0.0: - dependencies: - resolve-from: 5.0.0 - resolve-from@4.0.0: {} resolve-from@5.0.0: {} - resolve.exports@2.0.3: {} - - resolve@1.22.12: - dependencies: - es-errors: 1.3.0 - is-core-module: 2.16.2 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -11415,8 +9899,6 @@ snapshots: siginfo@2.0.0: {} - signal-exit@3.0.7: {} - signal-exit@4.1.0: {} sigstore@4.1.0: @@ -11436,8 +9918,6 @@ snapshots: mrmime: 2.0.1 totalist: 3.0.1 - sisteransi@1.0.5: {} - slash@3.0.0: {} slash@5.1.0: {} @@ -11475,11 +9955,6 @@ snapshots: source-map-js@1.2.1: {} - source-map-support@0.5.13: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -11500,8 +9975,6 @@ snapshots: spdx-license-ids@3.0.23: {} - sprintf-js@1.0.3: {} - ssri@13.0.1: dependencies: minipass: 7.1.3 @@ -11533,11 +10006,6 @@ snapshots: - bare-abort-controller - react-native-b4a - string-length@4.0.2: - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -11567,14 +10035,6 @@ snapshots: dependencies: ansi-regex: 6.2.2 - strip-bom@4.0.0: {} - - strip-final-newline@2.0.0: {} - - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - strip-json-comments@3.1.1: {} style-dictionary-utils@6.0.1(style-dictionary@5.3.3(tslib@2.8.1)): @@ -11701,8 +10161,6 @@ snapshots: has-flag: 4.0.0 supports-color: 7.2.0 - supports-preserve-symlinks-flag@1.0.0: {} - svg-tags@1.0.0: {} symbol-tree@3.2.4: {} @@ -11761,12 +10219,6 @@ snapshots: - bare-abort-controller - react-native-b4a - test-exclude@6.0.0: - dependencies: - '@istanbuljs/schema': 0.1.6 - glob: 7.2.3 - minimatch: 3.1.5 - text-decoder@1.2.7: dependencies: b4a: 1.8.1 @@ -11801,8 +10253,6 @@ snapshots: dependencies: tldts-core: 7.0.30 - tmpl@1.0.5: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -11843,10 +10293,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-detect@4.0.8: {} - - type-fest@0.21.3: {} - type-is@2.0.1: dependencies: content-type: 1.0.5 @@ -11857,6 +10303,8 @@ snapshots: typescript@5.9.3: {} + ufo@1.6.4: {} + undici-types@6.21.0: {} undici@6.25.0: {} @@ -11898,19 +10346,13 @@ snapshots: is-typed-array: 1.1.15 which-typed-array: 1.1.20 - v8-to-istanbul@9.3.0: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - validate-npm-package-name@7.0.2: {} varint@6.0.0: {} vary@1.1.2: {} - vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3): + vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.4) @@ -11919,17 +10361,49 @@ snapshots: rollup: 4.60.3 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 12.20.55 + '@types/node': 20.19.40 fsevents: 2.3.3 - jiti: 2.6.1 + jiti: 2.7.0 less: 4.6.4 sass: 1.97.3 sass-embedded: 1.99.0 - vitest@4.1.5(@types/node@12.20.55)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.0.16)(jsdom@27.4.0)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)): + vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0): + dependencies: + esbuild: 0.27.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.14 + rollup: 4.60.3 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 20.19.40 + fsevents: 2.3.3 + jiti: 2.7.0 + less: 4.6.4 + sass: 1.99.0 + sass-embedded: 1.99.0 + + vitest-environment-stencil@1.11.6(@playwright/test@1.55.1)(@stencil/core@4.43.3)(@vitest/browser-playwright@4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))(vitest@4.1.5))(jsdom@27.4.0)(playwright@1.59.1)(vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))): + dependencies: + '@stencil/core': 4.43.3 + '@stencil/vitest': 1.11.6(@playwright/test@1.55.1)(@stencil/core@4.43.3)(@vitest/browser-playwright@4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))(vitest@4.1.5))(jsdom@27.4.0)(playwright@1.59.1)(vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))) + transitivePeerDependencies: + - '@playwright/test' + - '@stencil/mock-doc' + - '@vitest/browser-playwright' + - '@vitest/browser-preview' + - '@vitest/browser-webdriverio' + - '@wdio/globals' + - happy-dom + - jsdom + - playwright + - vitest + + vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)): dependencies: '@vitest/expect': 4.1.5 - '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) + '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3)) '@vitest/pretty-format': 4.1.5 '@vitest/runner': 4.1.5 '@vitest/snapshot': 4.1.5 @@ -11946,24 +10420,51 @@ snapshots: tinyexec: 1.1.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3) + vite: 7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 12.20.55 - '@vitest/browser-playwright': 4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@12.20.55)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))(vitest@4.1.5) + '@types/node': 20.19.40 + '@vitest/browser-playwright': 4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.97.3))(vitest@4.1.5) '@vitest/coverage-v8': 4.1.5(@vitest/browser@4.1.5)(vitest@4.1.5) - '@vitest/ui': 4.0.16(vitest@4.1.5) + '@vitest/ui': 4.1.5(vitest@4.1.5) jsdom: 27.4.0 transitivePeerDependencies: - msw - w3c-xmlserializer@5.0.0: + vitest@4.1.5(@types/node@20.19.40)(@vitest/browser-playwright@4.1.5)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@27.4.0)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)): dependencies: - xml-name-validator: 5.0.0 + '@vitest/expect': 4.1.5 + '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0)) + '@vitest/pretty-format': 4.1.5 + '@vitest/runner': 4.1.5 + '@vitest/snapshot': 4.1.5 + '@vitest/spy': 4.1.5 + '@vitest/utils': 4.1.5 + es-module-lexer: 2.1.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.1.2 + tinyglobby: 0.2.16 + tinyrainbow: 3.1.0 + vite: 7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 20.19.40 + '@vitest/browser-playwright': 4.1.5(playwright@1.59.1)(vite@7.3.2(@types/node@20.19.40)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.99.0)(sass@1.99.0))(vitest@4.1.5) + '@vitest/coverage-v8': 4.1.5(@vitest/browser@4.1.5)(vitest@4.1.5) + '@vitest/ui': 4.1.5(vitest@4.1.5) + jsdom: 27.4.0 + transitivePeerDependencies: + - msw - walker@1.0.8: + w3c-xmlserializer@5.0.0: dependencies: - makeerror: 1.0.12 + xml-name-validator: 5.0.0 watchpack@2.5.1: dependencies: @@ -12035,11 +10536,6 @@ snapshots: wrappy@1.0.2: {} - write-file-atomic@4.0.2: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - write-file-atomic@5.0.1: dependencies: imurmurhash: 0.1.4 diff --git a/react/package.json b/react/package.json index cf85f3cde..32db49aca 100644 --- a/react/package.json +++ b/react/package.json @@ -28,22 +28,11 @@ "react-dom": ">=16.9.0" }, "devDependencies": { - "@types/jest": "23.3.9", "@types/node": "^15.12.2", "@types/react": "^16.9.2", "@types/react-dom": "^16.9.0", - "jest": "29.7.0", - "@testing-library/jest-dom": "6.9.1", "react": "16.14.0", "react-dom": "16.14.0", "typescript": "5.9.3" - }, - "jest": { - "preset": "ts-jest", - "setupTestFrameworkScriptFile": "/jest.setup.js", - "testPathIgnorePatterns": [ - "node_modules", - "dist" - ] } }