diff --git a/.eslintrc.cjs b/.eslintrc.cjs index bdd1b7a..a6719a6 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -5,8 +5,8 @@ module.exports = { }, extends: [ 'standard-with-typescript', - 'plugin:react/recommended', 'prettier', + 'plugin:svelte/recommended', 'plugin:perfectionist/recommended-alphabetical', 'plugin:tailwindcss/recommended', 'plugin:jsx-a11y/recommended', @@ -24,15 +24,16 @@ module.exports = { }, ], parserOptions: { + parser: '@typescript-eslint/parser', ecmaVersion: 'latest', sourceType: 'module', project: './tsconfig.json', + extraFileExtensions: ['.svelte'], }, - plugins: ['react', 'prettier', 'jsx-a11y', 'boundaries'], + plugins: ['prettier', 'jsx-a11y', 'boundaries'], rules: { 'import/no-default-export': 'error', 'func-style': ['error', 'expression'], - 'react/react-in-jsx-scope': 'off', 'boundaries/element-types': [ 2, { @@ -67,9 +68,6 @@ module.exports = { ['~test-utils', './src/test-utils'], ], }, - react: { - version: 'detect', - }, 'boundaries/elements': [ { type: 'api', diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..50a03e3 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,18 @@ +{ + "singleQuote": true, + "trailingComma": "es5", + "printWidth": 80, + "arrowParens": "always", + "bracketSpacing": true, + "tabWidth": 2, + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ], + "tailwindStylesheet": "./src/ui/style.css" +} diff --git a/.prettierrc.yml b/.prettierrc.yml deleted file mode 100644 index c831eba..0000000 --- a/.prettierrc.yml +++ /dev/null @@ -1,6 +0,0 @@ -trailingComma: es5 -singleQuote: true -printWidth: 80 -tabWidth: 2 -bracketSpacing: true -arrowParens: always diff --git a/package.json b/package.json index 94623db..d3d27d4 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "build:api": "tsc && vite build -c vite.config.api.ts", "build": "pnpm run /^build:/", "prettier:format": "prettier --write ./", - "test:lint": "eslint --ext .ts,.tsx ./src --fix", + "test:lint": "eslint --ext .ts,.svelte ./src --fix", "test:types": "tsc --skipLibCheck --noEmit", "test:unit:ui": "vitest --watch=false --coverage -c vite.config.ui.ts", "test:unit:api": "vitest --watch=false --coverage -c vite.config.api.ts", @@ -19,45 +19,41 @@ }, "dependencies": { "@figma/plugin-typings": "^1.79.0", - "@floating-ui/react": "^0.25.2", - "@nanostores/react": "^0.7.1", - "@testing-library/react": "^14.0.0", + "@floating-ui/dom": "^1.7.3", + "@svelte-bin/clipboard": "^0.1.4", "@types/apca-w3": "^0.1.0", "@types/culori": "^2.0.0", - "@types/react": "^18.2.14", - "@types/react-dom": "^18.2.6", - "@vitejs/plugin-react": "^4.0.1", - "@vitest/coverage-v8": "^0.34.1", + "@vitest/coverage-v8": "^3.2.4", "apca-w3": "^0.1.9", "apcach": "^0.6.0", "autoprefixer": "^10.4.14", "bigint-conversion": "^2.4.2", - "clsx": "^2.0.0", "culori": "^3.2.0", "eslint-plugin-boundaries": "^3.4.0", - "nanoid": "^4.0.2", + "nanoid": "^5.1.5", "nanostores": "^0.9.3", "postcss": "^8.4.24", "postcss-loader": "^7.3.3", "postcss-preset-env": "^9.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-use-clipboard": "^1.0.9", + "svelte": "^5.35.5", + "svelte-floating-ui": "^1.6.2", "tailwindcss": "^3.3.2", "typescript": "^5.0.2", "uint8-to-hex": "^2.0.0", - "vite": "^4.4.0", - "vite-plugin-singlefile": "^0.13.5", - "vite-plugin-svgr": "^3.2.0", - "vitest": "^0.34.1" + "vite": "^7.0.4", + "vite-plugin-singlefile": "^2.3.0", + "vitest": "^3.2.4" }, "devDependencies": { "@size-limit/preset-small-lib": "^11.2.0", + "@sveltejs/vite-plugin-svelte": "^6.0.0", + "@tsconfig/svelte": "^5.0.4", "@types/node": "^20.4.1", "@typescript-eslint/eslint-plugin": "^5.61.0", "@typescript-eslint/parser": "^5.61.0", - "eslint": "^8.44.0", - "eslint-config-prettier": "^8.8.0", + "csstype": "^3.1.3", + "eslint": "^8.57.0", + "eslint-config-prettier": "^10.0.1", "eslint-config-standard-with-typescript": "^36.0.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-import": "^2.25.2", @@ -66,19 +62,22 @@ "eslint-plugin-perfectionist": "^1.4.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.0.0", - "eslint-plugin-react": "^7.32.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.1", + "eslint-plugin-svelte": "^2.46.1", "eslint-plugin-tailwindcss": "^3.13.0", + "globals": "^16.0.0", "jsdom": "^22.1.0", - "prettier": "^3.0.2", + "prettier": "^3.4.2", + "prettier-plugin-svelte": "^3.3.3", + "prettier-plugin-tailwindcss": "^0.6.11", "size-limit": "^11.2.0", - "terser": "^5.19.0" + "terser": "^5.19.0", + "typescript-eslint": "^8.20.0" }, "size-limit": [ { "path": "dist/api.js" } ], + "type": "module", "license": "MIT" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 13c49ea..39b74ee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,33 +11,21 @@ importers: '@figma/plugin-typings': specifier: ^1.79.0 version: 1.116.0 - '@floating-ui/react': - specifier: ^0.25.2 - version: 0.25.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@nanostores/react': - specifier: ^0.7.1 - version: 0.7.3(nanostores@0.9.5)(react@18.3.1) - '@testing-library/react': - specifier: ^14.0.0 - version: 14.3.1(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/dom': + specifier: ^1.7.3 + version: 1.7.3 + '@svelte-bin/clipboard': + specifier: ^0.1.4 + version: 0.1.4(svelte@5.37.3) '@types/apca-w3': specifier: ^0.1.0 version: 0.1.3 '@types/culori': specifier: ^2.0.0 version: 2.1.1 - '@types/react': - specifier: ^18.2.14 - version: 18.3.23 - '@types/react-dom': - specifier: ^18.2.6 - version: 18.3.7(@types/react@18.3.23) - '@vitejs/plugin-react': - specifier: ^4.0.1 - version: 4.7.0(vite@4.5.14(@types/node@20.19.9)(terser@5.43.1)) '@vitest/coverage-v8': - specifier: ^0.34.1 - version: 0.34.6(vitest@0.34.6(jsdom@22.1.0)(terser@5.43.1)) + specifier: ^3.2.4 + version: 3.2.4(vitest@3.2.4(@types/node@20.19.9)(jiti@2.5.1)(jsdom@22.1.0)(terser@5.43.1)(yaml@2.8.1)) apca-w3: specifier: ^0.1.9 version: 0.1.9 @@ -50,18 +38,15 @@ importers: bigint-conversion: specifier: ^2.4.2 version: 2.4.3 - clsx: - specifier: ^2.0.0 - version: 2.1.1 culori: specifier: ^3.2.0 version: 3.3.0 eslint-plugin-boundaries: specifier: ^3.4.0 - version: 3.4.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1) + version: 3.4.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1) nanoid: - specifier: ^4.0.2 - version: 4.0.2 + specifier: ^5.1.5 + version: 5.1.5 nanostores: specifier: ^0.9.3 version: 0.9.5 @@ -70,68 +55,71 @@ importers: version: 8.5.6 postcss-loader: specifier: ^7.3.3 - version: 7.3.4(postcss@8.5.6)(typescript@5.8.3)(webpack@5.100.2) + version: 7.3.4(postcss@8.5.6)(typescript@5.9.2)(webpack@5.101.0) postcss-preset-env: specifier: ^9.0.0 version: 9.6.0(postcss@8.5.6) - react: - specifier: ^18.2.0 - version: 18.3.1 - react-dom: - specifier: ^18.2.0 - version: 18.3.1(react@18.3.1) - react-use-clipboard: - specifier: ^1.0.9 - version: 1.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + svelte: + specifier: ^5.35.5 + version: 5.37.3 + svelte-floating-ui: + specifier: ^1.6.2 + version: 1.6.2 tailwindcss: specifier: ^3.3.2 version: 3.4.17 typescript: specifier: ^5.0.2 - version: 5.8.3 + version: 5.9.2 uint8-to-hex: specifier: ^2.0.0 version: 2.0.1 vite: - specifier: ^4.4.0 - version: 4.5.14(@types/node@20.19.9)(terser@5.43.1) + specifier: ^7.0.4 + version: 7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) vite-plugin-singlefile: - specifier: ^0.13.5 - version: 0.13.5(rollup@3.29.5)(vite@4.5.14(@types/node@20.19.9)(terser@5.43.1)) - vite-plugin-svgr: - specifier: ^3.2.0 - version: 3.3.0(rollup@3.29.5)(typescript@5.8.3)(vite@4.5.14(@types/node@20.19.9)(terser@5.43.1)) + specifier: ^2.3.0 + version: 2.3.0(rollup@4.46.2)(vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) vitest: - specifier: ^0.34.1 - version: 0.34.6(jsdom@22.1.0)(terser@5.43.1) + specifier: ^3.2.4 + version: 3.2.4(@types/node@20.19.9)(jiti@2.5.1)(jsdom@22.1.0)(terser@5.43.1)(yaml@2.8.1) devDependencies: '@size-limit/preset-small-lib': specifier: ^11.2.0 version: 11.2.0(size-limit@11.2.0) + '@sveltejs/vite-plugin-svelte': + specifier: ^6.0.0 + version: 6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + '@tsconfig/svelte': + specifier: ^5.0.4 + version: 5.0.4 '@types/node': specifier: ^20.4.1 version: 20.19.9 '@typescript-eslint/eslint-plugin': specifier: ^5.61.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2) '@typescript-eslint/parser': specifier: ^5.61.0 - version: 5.62.0(eslint@8.57.1)(typescript@5.8.3) + version: 5.62.0(eslint@8.57.1)(typescript@5.9.2) + csstype: + specifier: ^3.1.3 + version: 3.1.3 eslint: - specifier: ^8.44.0 + specifier: ^8.57.0 version: 8.57.1 eslint-config-prettier: - specifier: ^8.8.0 - version: 8.10.2(eslint@8.57.1) + specifier: ^10.0.1 + version: 10.1.8(eslint@8.57.1) eslint-config-standard-with-typescript: specifier: ^36.0.0 - version: 36.1.1(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.8.3) + version: 36.1.1(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.2) eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)) + version: 1.1.2(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)) eslint-plugin-import: specifier: ^2.25.2 - version: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1) + version: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1) eslint-plugin-jsx-a11y: specifier: ^6.7.1 version: 6.10.2(eslint@8.57.1) @@ -140,37 +128,43 @@ importers: version: 15.7.0(eslint@8.57.1) eslint-plugin-perfectionist: specifier: ^1.4.0 - version: 1.5.1(eslint@8.57.1)(typescript@5.8.3) + version: 1.5.1(eslint@8.57.1)(typescript@5.9.2) eslint-plugin-prettier: specifier: ^4.2.1 - version: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2) + version: 4.2.5(eslint-config-prettier@10.1.8(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2) eslint-plugin-promise: specifier: ^6.0.0 version: 6.6.0(eslint@8.57.1) - eslint-plugin-react: - specifier: ^7.32.2 - version: 7.37.5(eslint@8.57.1) - eslint-plugin-react-hooks: - specifier: ^4.6.0 - version: 4.6.2(eslint@8.57.1) - eslint-plugin-react-refresh: - specifier: ^0.4.1 - version: 0.4.20(eslint@8.57.1) + eslint-plugin-svelte: + specifier: ^2.46.1 + version: 2.46.1(eslint@8.57.1)(svelte@5.37.3) eslint-plugin-tailwindcss: specifier: ^3.13.0 version: 3.18.2(tailwindcss@3.4.17) + globals: + specifier: ^16.0.0 + version: 16.3.0 jsdom: specifier: ^22.1.0 version: 22.1.0 prettier: - specifier: ^3.0.2 + specifier: ^3.4.2 version: 3.6.2 + prettier-plugin-svelte: + specifier: ^3.3.3 + version: 3.4.0(prettier@3.6.2)(svelte@5.37.3) + prettier-plugin-tailwindcss: + specifier: ^0.6.11 + version: 0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.37.3))(prettier@3.6.2) size-limit: specifier: ^11.2.0 version: 11.2.0 terser: specifier: ^5.19.0 version: 5.43.1 + typescript-eslint: + specifier: ^8.20.0 + version: 8.39.0(eslint@8.57.1)(typescript@5.9.2) packages: @@ -186,40 +180,6 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.0': - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.28.0': - resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.28.0': - resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.27.3': - resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -228,49 +188,18 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.27.6': - resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} - engines: {node: '>=6.9.0'} - '@babel/parser@7.28.0': resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-transform-react-jsx-self@7.27.1': - resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-source@7.27.1': - resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.27.6': - resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.28.0': - resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.1': - resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} 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'} '@csstools/cascade-layer-name-parser@1.0.13': resolution: {integrity: sha512-MX0yLTwtZzr82sQ0zOjqimpZbzjMaK/h2pmlrLK7DCzlmiZLYFpoO94WmN1akRVo6ll/TdpHb53vihHLUMyvng==} @@ -518,192 +447,96 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.18.20': - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.8': resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.18.20': - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.8': resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.18.20': - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.8': resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.18.20': - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.8': resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.18.20': - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.8': resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.18.20': - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.8': resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.18.20': - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.8': resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.18.20': - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.8': resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.18.20': - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.8': resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.18.20': - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.8': resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.18.20': - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.8': resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.18.20': - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.8': resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.18.20': - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.8': resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.18.20': - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.8': resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.18.20': - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.8': resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.18.20': - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.8': resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} engines: {node: '>=18'} @@ -716,12 +549,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.18.20': - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.8': resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} engines: {node: '>=18'} @@ -734,12 +561,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.18.20': - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.8': resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} engines: {node: '>=18'} @@ -752,48 +573,24 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.18.20': - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.8': resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.18.20': - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.8': resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.18.20': - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.8': resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.18.20': - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.8': resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} engines: {node: '>=18'} @@ -821,26 +618,11 @@ packages: '@figma/plugin-typings@1.116.0': resolution: {integrity: sha512-jpn7Vq3uxgJF5oQ5PwkWGGIyCwIjB260UjtSzBck9LL1WzXJSaxBH1wo+vrU4XXbV//TURUGBYIQ2tU7cdyRYQ==} - '@floating-ui/core@1.7.2': - resolution: {integrity: sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==} - - '@floating-ui/dom@1.7.2': - resolution: {integrity: sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==} - - '@floating-ui/react-dom@2.1.4': - resolution: {integrity: sha512-JbbpPhp38UmXDDAu60RJmbeme37Jbgsm7NrHGgzYYFKmblzRUh6Pa641dII6LsjwF4XlScDrde2UAzDo/b9KPw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/react@0.25.4': - resolution: {integrity: sha512-lWRQ/UiTvSIBxohn0/2HFHEmnmOVRjl7j6XcRJuLH0ls6f/9AyHMWVzkAJFuwx0n9gaEeCmg9VccCSCJzbEJig==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} - '@floating-ui/utils@0.1.6': - resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + '@floating-ui/dom@1.7.3': + resolution: {integrity: sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==} '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} @@ -866,10 +648,6 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.12': resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} @@ -889,13 +667,6 @@ packages: '@juanelas/base64@1.1.5': resolution: {integrity: sha512-mjAF27LzwfYobdwqnxZgeucbKT5wRRNvILg3h5OvCWK+3F7mw/A1tnjHnNiTYtLmTvT/bM1jA5AX7eQawDGs1w==} - '@nanostores/react@0.7.3': - resolution: {integrity: sha512-/XuLAMENRu/Q71biW4AZ4qmU070vkZgiQ28gaTSNRPm2SZF5zGAR81zPE1MaMB4SeOp6ZTst92NBaG75XSspNg==} - engines: {node: ^18.0.0 || >=20.0.0} - peerDependencies: - nanostores: ^0.9.0 || ^0.10.0 || ^0.11.0 - react: '>=18.0.0' - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -912,24 +683,109 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@rolldown/pluginutils@1.0.0-beta.27': - resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + '@rollup/rollup-android-arm-eabi@4.46.2': + resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.46.2': + resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} + cpu: [arm64] + os: [android] - '@rollup/pluginutils@5.2.0': - resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@rollup/rollup-darwin-arm64@4.46.2': + resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.46.2': + resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.46.2': + resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.46.2': + resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.46.2': + resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.46.2': + resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.46.2': + resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.46.2': + resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.46.2': + resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.46.2': + resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.46.2': + resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.46.2': + resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.46.2': + resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} + cpu: [x64] + os: [win32] '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@size-limit/esbuild@11.2.0': resolution: {integrity: sha512-vSg9H0WxGQPRzDnBzeDyD9XT0Zdq0L+AI3+77/JhxznbSCMJMMr8ndaWVQRhOsixl97N0oD4pRFw2+R1Lcvi6A==} engines: {node: ^18.0.0 || >=20.0.0} @@ -947,118 +803,50 @@ packages: peerDependencies: size-limit: 11.2.0 - '@svgr/babel-plugin-add-jsx-attribute@8.0.0': - resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': - resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': - resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0': - resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-svg-dynamic-title@8.0.0': - resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-svg-em-dimensions@8.0.0': - resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-transform-react-native-svg@8.1.0': - resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-transform-svg-component@8.0.0': - resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} - engines: {node: '>=12'} + '@svelte-bin/clipboard@0.1.4': + resolution: {integrity: sha512-V3OhCynFg9mcJhnI/wDM/tgTqk6UJEITvFdO+lljBy7DFu0GxMCWSWXhxF2xY1aPUmmPY5khktcY5KZ9PtKzWA==} peerDependencies: - '@babel/core': ^7.0.0-0 + svelte: ^4.0.0 - '@svgr/babel-preset@8.1.0': - resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} - engines: {node: '>=14'} + '@sveltejs/acorn-typescript@1.0.5': + resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==} peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/core@8.1.0': - resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} - engines: {node: '>=14'} - - '@svgr/hast-util-to-babel-ast@8.0.0': - resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} - engines: {node: '>=14'} + acorn: ^8.9.0 - '@svgr/plugin-jsx@8.1.0': - resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==} - engines: {node: '>=14'} + '@sveltejs/vite-plugin-svelte-inspector@5.0.0': + resolution: {integrity: sha512-iwQ8Z4ET6ZFSt/gC+tVfcsSBHwsqc6RumSaiLUkAurW3BCpJam65cmHw0oOlDMTO0u+PZi9hilBRYN+LZNHTUQ==} + engines: {node: ^20.19 || ^22.12 || >=24} peerDependencies: - '@svgr/core': '*' - - '@testing-library/dom@9.3.4': - resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} - engines: {node: '>=14'} + '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0 + svelte: ^5.0.0 + vite: ^6.3.0 || ^7.0.0 - '@testing-library/react@14.3.1': - resolution: {integrity: sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==} - engines: {node: '>=14'} + '@sveltejs/vite-plugin-svelte@6.1.0': + resolution: {integrity: sha512-+U6lz1wvGEG/BvQyL4z/flyNdQ9xDNv5vrh+vWBWTHaebqT0c9RNggpZTo/XSPoHsSCWBlYaTlRX8pZ9GATXCw==} + engines: {node: ^20.19 || ^22.12 || >=24} peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 + svelte: ^5.0.0 + vite: ^6.3.0 || ^7.0.0 '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + '@tsconfig/svelte@5.0.4': + resolution: {integrity: sha512-BV9NplVgLmSi4mwKzD8BD/NQ8erOY/nUE/GpgWe2ckx+wIQF5RyRirn/QsSSCPeulVpc3RA/iJt6DpfTIZps0Q==} + '@types/apca-w3@0.1.3': resolution: {integrity: sha512-1C7e66xWCy1UOXHk/VXs4tjrY9hW3q3sykjJJxSC5TIIFt0lt9mh0ysdQxY0rVejTv4SW92G19j98PjqjCSz7Q==} - '@types/aria-query@5.0.4': - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - - '@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.20.7': - resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} - - '@types/chai-subset@1.3.6': - resolution: {integrity: sha512-m8lERkkQj+uek18hXOZuec3W/fCRTrU4hrnXjH3qhHy96ytuPaPiWGgu7sJb7tZxZonO75vYAjCvpe/e4VUwRw==} - peerDependencies: - '@types/chai': <5.2.0 - - '@types/chai@4.3.20': - resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} '@types/culori@2.1.1': resolution: {integrity: sha512-NzLYD0vNHLxTdPp8+RlvGbR2NfOZkwxcYGFwxNtm+WH2NuUNV8785zv1h0sulFQ5aFQ9n/jNDUuJeo3Bh7+oFA==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} @@ -1068,9 +856,6 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -1080,17 +865,6 @@ packages: '@types/node@20.19.9': resolution: {integrity: sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==} - '@types/prop-types@15.7.15': - resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - - '@types/react-dom@18.3.7': - resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} - peerDependencies: - '@types/react': ^18.0.0 - - '@types/react@18.3.23': - resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==} - '@types/semver@7.7.0': resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} @@ -1105,6 +879,14 @@ packages: typescript: optional: true + '@typescript-eslint/eslint-plugin@8.39.0': + resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.39.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@5.62.0': resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1115,10 +897,33 @@ packages: typescript: optional: true + '@typescript-eslint/parser@8.39.0': + resolution: {integrity: sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.39.0': + resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/scope-manager@5.62.0': resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@8.39.0': + resolution: {integrity: sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.39.0': + resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@5.62.0': resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1129,10 +934,21 @@ packages: typescript: optional: true + '@typescript-eslint/type-utils@8.39.0': + resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/types@5.62.0': resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/types@8.39.0': + resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1142,44 +958,73 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.39.0': + resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@5.62.0': resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@8.39.0': + resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@8.39.0': + resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@vitejs/plugin-react@4.7.0': - resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} - engines: {node: ^14.18.0 || >=16.0.0} + '@vitest/coverage-v8@3.2.4': + resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + '@vitest/browser': 3.2.4 + vitest: 3.2.4 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/coverage-v8@0.34.6': - resolution: {integrity: sha512-fivy/OK2d/EsJFoEoxHFEnNGTg+MmdZBAVK9Ka4qhXR2K3J0DS08vcGVwzDtXSuUMabLv4KtPcpSKkcMXFDViw==} + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: - vitest: '>=0.32.0 <1' + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true - '@vitest/expect@0.34.6': - resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/runner@0.34.6': - resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@vitest/snapshot@0.34.6': - resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/spy@0.34.6': - resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/utils@0.34.6': - resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -1247,10 +1092,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -1291,10 +1132,6 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -1318,9 +1155,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} - aria-query@5.3.2: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} @@ -1337,10 +1171,6 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - array.prototype.findlastindex@1.2.6: resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} engines: {node: '>= 0.4'} @@ -1353,20 +1183,20 @@ packages: resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - arraybuffer.prototype.slice@1.0.4: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} - assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + ast-v8-to-istanbul@0.3.4: + resolution: {integrity: sha512-cxrAnZNLBnQwBPByK4CeDaw5sWZtMilJE/Q3iDA0aamgaIVNDF9T6K2/8DfYDZEejZ2jNnDrG9m8MY72HFd0KA==} + async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} @@ -1452,23 +1282,20 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - caniuse-lite@1.0.30001727: - resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} + caniuse-lite@1.0.30001731: + resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} - chai@4.5.0: - resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} - engines: {node: '>=4'} + chai@5.2.1: + resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} + engines: {node: '>=18'} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} @@ -1510,15 +1337,6 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -1608,17 +1426,17 @@ packages: decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - deep-eql@4.1.4: - resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} - deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -1634,10 +1452,6 @@ packages: didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - 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'} @@ -1653,17 +1467,11 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} - dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} deprecated: Use your platform's native DOMException instead - dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -1671,8 +1479,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.187: - resolution: {integrity: sha512-cl5Jc9I0KGUoOoSbxvTywTa40uspGJt/BDBoDLoxJRSBpWh4FFXBsjNRHfQrONsV/OoEjDfHUmZQa2d6Ze4YgA==} + electron-to-chromium@1.5.195: + resolution: {integrity: sha512-URclP0iIaDUzqcAyV1v2PgduJ9N0IdXmWsnPzPfelvBmjmZzEy6xJcjb1cXj+TbYqXgtLrjHEoaSIdTYhw4ezg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1684,10 +1492,6 @@ packages: resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} engines: {node: '>=10.13.0'} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -1707,13 +1511,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} @@ -1733,11 +1530,6 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.25.8: resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} engines: {node: '>=18'} @@ -1751,8 +1543,14 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-prettier@8.10.2: - resolution: {integrity: sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==} + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -1884,22 +1682,15 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-react-hooks@4.6.2: - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - - eslint-plugin-react-refresh@0.4.20: - resolution: {integrity: sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==} + eslint-plugin-svelte@2.46.1: + resolution: {integrity: sha512-7xYr2o4NID/f9OEYMqxsEQsCsj4KaMy4q5sANaKkAb6/QeCjYFxRmDm2S3YC3A3pl1kyPZ/syOx/i7LcWYSbIw==} + engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: - eslint: '>=8.40' - - eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true eslint-plugin-tailwindcss@3.18.2: resolution: {integrity: sha512-QbkMLDC/OkkjFQ1iz/5jkMdHfiMu/uwujUHLAJK5iwNHD8RTxVTlsUezE0toTZ6VhybNBsk+gYGPDq2agfeRNA==} @@ -1937,12 +1728,19 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@8.57.1: resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + esm@3.2.25: resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} engines: {node: '>=6'} @@ -1955,6 +1753,9 @@ packages: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} + esrap@2.1.0: + resolution: {integrity: sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==} + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -1967,8 +1768,8 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -1978,6 +1779,10 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + engines: {node: '>=12.0.0'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2060,13 +1865,6 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -2102,6 +1900,10 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} + globals@16.3.0: + resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -2173,6 +1975,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -2192,10 +1998,6 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - is-arguments@1.2.0: - resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} - engines: {node: '>= 0.4'} - is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} @@ -2281,6 +2083,9 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -2331,18 +2136,14 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} engines: {node: '>=10'} istanbul-reports@3.1.7: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} - jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -2354,13 +2155,16 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + jiti@2.5.1: + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -2374,11 +2178,6 @@ packages: canvas: optional: true - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -2410,6 +2209,13 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + known-css-properties@0.35.0: + resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==} + language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -2421,6 +2227,10 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -2432,9 +2242,8 @@ packages: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} - local-pkg@0.4.3: - resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} - engines: {node: '>=14'} + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} @@ -2443,29 +2252,18 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - - lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + loupe@3.2.0: + resolution: {integrity: sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==} lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true - magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -2511,9 +2309,6 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -2525,11 +2320,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@4.0.2: - resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} - engines: {node: ^14 || ^16 || >=18} - hasBin: true - nanoid@5.1.5: resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} engines: {node: ^18 || >=20} @@ -2551,9 +2341,6 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - node-buffer-encoding@1.0.3: resolution: {integrity: sha512-9hJZNChhQoCN1rCFScJiEwtzvWEJw2wSnu2nhDLD/YOYl1Ce8GbtnorsnjwwjpSk4sWE7zSp2etX6j7+bO7fVA==} @@ -2568,8 +2355,8 @@ packages: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} - nwsapi@2.2.20: - resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} + nwsapi@2.2.21: + resolution: {integrity: sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -2583,10 +2370,6 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} - object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -2595,10 +2378,6 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - object.fromentries@2.0.8: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} @@ -2626,10 +2405,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -2671,14 +2446,12 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2699,9 +2472,6 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} - pkg-types@1.3.1: - resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -2813,6 +2583,18 @@ packages: peerDependencies: postcss: ^8.4 + postcss-load-config@3.1.4: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + postcss-load-config@4.0.2: resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} @@ -2890,6 +2672,18 @@ packages: peerDependencies: postcss: ^8.0.3 + postcss-safe-parser@6.0.0: + resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.3.3 + + postcss-scss@4.0.9: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + postcss-selector-not@7.0.2: resolution: {integrity: sha512-/SSxf/90Obye49VZIfc0ls4H0P6i6V1iHv0pzZH8SdgvZOPFkF37ef1r5cyWcMflJSFJ5bfuoluTnFnBBFiuSA==} engines: {node: ^14 || ^16 || >=18} @@ -2915,22 +2709,78 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} + prettier-plugin-svelte@3.4.0: + resolution: {integrity: sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==} + peerDependencies: + prettier: ^3.0.0 + svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 + + prettier-plugin-tailwindcss@0.6.14: + resolution: {integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-hermes': '*' + '@prettier/plugin-oxc': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-hermes': + optional: true + '@prettier/plugin-oxc': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-multiline-arrays: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + prettier@3.6.2: resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} hasBin: true - pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} @@ -2947,34 +2797,6 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - - react-refresh@0.17.0: - resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} - engines: {node: '>=0.10.0'} - - react-use-clipboard@1.0.9: - resolution: {integrity: sha512-OcMzc14usXhqQnAkvzmhCXAbW5WBT2LSgscVh2vKHXZfg72jFsSOsEearqdeC/nUj8YxEfLnziqe7AE7YkWFwA==} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 - react-dom: ^16.8.0 || ^17 || ^18 - - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} - read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -3017,10 +2839,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -3030,9 +2848,9 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rollup@3.29.5: - resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} + rollup@4.46.2: + resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true rrweb-cssom@0.6.0: @@ -3063,9 +2881,6 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - schema-utils@4.3.2: resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} engines: {node: '>= 10.13.0'} @@ -3134,9 +2949,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -3170,13 +2982,6 @@ packages: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - string.prototype.trim@1.2.10: resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} @@ -3205,8 +3010,8 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@1.3.0: - resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} @@ -3225,15 +3030,25 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + svelte-eslint-parser@0.43.0: + resolution: {integrity: sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + + svelte-floating-ui@1.6.2: + resolution: {integrity: sha512-EC+DZtBey50P6l3NSzNQWon3cip8a1bzwdpmCdc45kymqEWL4BKhPemAq7SQ9QLebDPaMECW6YodxFbs2d+O/w==} + + svelte@5.37.3: + resolution: {integrity: sha512-7t/ejshehHd+95z3Z7ebS7wsqHDQxi/8nBTuTRwpMgNegfRBfuitCSKTUDKIBOExqfT2+DhQ2VLG8Xn+cBXoaQ==} + engines: {node: '>=18'} symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - tailwindcss@3.4.17: resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} engines: {node: '>=14.0.0'} @@ -3264,9 +3079,9 @@ packages: engines: {node: '>=10'} hasBin: true - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -3281,25 +3096,29 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - tinypool@0.7.0: - resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@2.2.1: - resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + tinyspy@4.0.3: + resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} - tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} @@ -3308,6 +3127,12 @@ packages: resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} engines: {node: '>=14'} + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -3317,9 +3142,6 @@ packages: tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsutils@3.21.0: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -3330,10 +3152,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} - type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -3354,14 +3172,18 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript-eslint@8.39.0: + resolution: {integrity: sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - uint8-encoding@2.0.1: resolution: {integrity: sha512-xZAjZ+3OvrDtjFLLgojrLmG6T0YwZEo0OTyqCBxFjlFimIKnLtFqyYk6z/jDOUlJFJE52Srtrv4W4x7t4Cn/dA==} @@ -3394,71 +3216,85 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - v8-to-istanbul@9.3.0: - resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} - engines: {node: '>=10.12.0'} - - vite-node@0.34.6: - resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} - engines: {node: '>=v14.18.0'} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite-plugin-singlefile@0.13.5: - resolution: {integrity: sha512-y/aRGh8qHmw2f1IhaI/C6PJAaov47ESYDvUv1am1YHMhpY+19B5k5Odp8P+tgs+zhfvak6QB1ykrALQErEAo7g==} - engines: {node: ^14.18.0 || >=16.0.0} + vite-plugin-singlefile@2.3.0: + resolution: {integrity: sha512-DAcHzYypM0CasNLSz/WG0VdKOCxGHErfrjOoyIPiNxTPTGmO6rRD/te93n1YL/s+miXq66ipF1brMBikf99c6A==} + engines: {node: '>18.0.0'} peerDependencies: - rollup: '>=2.79.0' - vite: '>=3.2.0' + rollup: ^4.44.1 + vite: ^5.4.11 || ^6.0.0 || ^7.0.0 - vite-plugin-svgr@3.3.0: - resolution: {integrity: sha512-vWZMCcGNdPqgziYFKQ3Y95XP0d0YGp28+MM3Dp9cTa/px5CKcHHrIoPl2Jw81rgVm6/ZUNONzjXbZQZ7Kw66og==} - peerDependencies: - vite: ^2.6.0 || 3 || 4 - - vite@4.5.14: - resolution: {integrity: sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==} - engines: {node: ^14.18.0 || >=16.0.0} + vite@7.0.6: + resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': '>= 14' - less: '*' + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: '@types/node': optional: true + jiti: + optional: true less: optional: true lightningcss: optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true sugarss: optional: true terser: optional: true + tsx: + optional: true + yaml: + optional: true - vitest@0.34.6: - resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} - engines: {node: '>=v14.18.0'} + vitefu@1.1.1: + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 happy-dom: '*' jsdom: '*' - playwright: '*' - safaridriver: '*' - webdriverio: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true + '@types/debug': + optional: true + '@types/node': + optional: true '@vitest/browser': optional: true '@vitest/ui': @@ -3467,12 +3303,6 @@ packages: optional: true jsdom: optional: true - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} @@ -3493,8 +3323,8 @@ packages: resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} engines: {node: '>=10.13.0'} - webpack@5.100.2: - resolution: {integrity: sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==} + webpack@5.101.0: + resolution: {integrity: sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -3575,11 +3405,12 @@ packages: xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} - yaml@2.8.0: - resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} engines: {node: '>= 14.6'} hasBin: true @@ -3587,9 +3418,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.2.1: - resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} - engines: {node: '>=12.20'} + zimmerframe@1.1.2: + resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} snapshots: @@ -3606,115 +3436,20 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.0': {} - - '@babel/core@7.28.0': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) - '@babel/helpers': 7.27.6 - '@babel/parser': 7.28.0 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.1 - convert-source-map: 2.0.0 - debug: 4.4.1 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.28.0': - dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.1 - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 - jsesc: 3.1.0 - - '@babel/helper-compilation-targets@7.27.2': - dependencies: - '@babel/compat-data': 7.28.0 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.1 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-module-imports@7.27.1': - dependencies: - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helpers@7.27.6': - dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.1 - '@babel/parser@7.28.0': dependencies: - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/runtime@7.27.6': {} - - '@babel/template@7.27.2': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.0 - '@babel/types': 7.28.1 - - '@babel/traverse@7.28.0': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.0 - '@babel/template': 7.27.2 - '@babel/types': 7.28.1 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.28.1': + '@babel/types@7.28.2': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@bcoe/v8-coverage@0.2.3': {} + '@bcoe/v8-coverage@1.0.2': {} '@csstools/cascade-layer-name-parser@1.0.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)': dependencies: @@ -3954,147 +3689,81 @@ snapshots: dependencies: postcss: 8.5.6 - '@esbuild/aix-ppc64@0.25.8': - optional: true - - '@esbuild/android-arm64@0.18.20': + '@esbuild/aix-ppc64@0.25.8': optional: true '@esbuild/android-arm64@0.25.8': optional: true - '@esbuild/android-arm@0.18.20': - optional: true - '@esbuild/android-arm@0.25.8': optional: true - '@esbuild/android-x64@0.18.20': - optional: true - '@esbuild/android-x64@0.25.8': optional: true - '@esbuild/darwin-arm64@0.18.20': - optional: true - '@esbuild/darwin-arm64@0.25.8': optional: true - '@esbuild/darwin-x64@0.18.20': - optional: true - '@esbuild/darwin-x64@0.25.8': optional: true - '@esbuild/freebsd-arm64@0.18.20': - optional: true - '@esbuild/freebsd-arm64@0.25.8': optional: true - '@esbuild/freebsd-x64@0.18.20': - optional: true - '@esbuild/freebsd-x64@0.25.8': optional: true - '@esbuild/linux-arm64@0.18.20': - optional: true - '@esbuild/linux-arm64@0.25.8': optional: true - '@esbuild/linux-arm@0.18.20': - optional: true - '@esbuild/linux-arm@0.25.8': optional: true - '@esbuild/linux-ia32@0.18.20': - optional: true - '@esbuild/linux-ia32@0.25.8': optional: true - '@esbuild/linux-loong64@0.18.20': - optional: true - '@esbuild/linux-loong64@0.25.8': optional: true - '@esbuild/linux-mips64el@0.18.20': - optional: true - '@esbuild/linux-mips64el@0.25.8': optional: true - '@esbuild/linux-ppc64@0.18.20': - optional: true - '@esbuild/linux-ppc64@0.25.8': optional: true - '@esbuild/linux-riscv64@0.18.20': - optional: true - '@esbuild/linux-riscv64@0.25.8': optional: true - '@esbuild/linux-s390x@0.18.20': - optional: true - '@esbuild/linux-s390x@0.25.8': optional: true - '@esbuild/linux-x64@0.18.20': - optional: true - '@esbuild/linux-x64@0.25.8': optional: true '@esbuild/netbsd-arm64@0.25.8': optional: true - '@esbuild/netbsd-x64@0.18.20': - optional: true - '@esbuild/netbsd-x64@0.25.8': optional: true '@esbuild/openbsd-arm64@0.25.8': optional: true - '@esbuild/openbsd-x64@0.18.20': - optional: true - '@esbuild/openbsd-x64@0.25.8': optional: true '@esbuild/openharmony-arm64@0.25.8': optional: true - '@esbuild/sunos-x64@0.18.20': - optional: true - '@esbuild/sunos-x64@0.25.8': optional: true - '@esbuild/win32-arm64@0.18.20': - optional: true - '@esbuild/win32-arm64@0.25.8': optional: true - '@esbuild/win32-ia32@0.18.20': - optional: true - '@esbuild/win32-ia32@0.25.8': optional: true - '@esbuild/win32-x64@0.18.20': - optional: true - '@esbuild/win32-x64@0.25.8': optional: true @@ -4123,31 +3792,15 @@ snapshots: '@figma/plugin-typings@1.116.0': {} - '@floating-ui/core@1.7.2': + '@floating-ui/core@1.7.3': dependencies: '@floating-ui/utils': 0.2.10 - '@floating-ui/dom@1.7.2': + '@floating-ui/dom@1.7.3': dependencies: - '@floating-ui/core': 1.7.2 + '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@floating-ui/dom': 1.7.2 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@floating-ui/react@0.25.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@floating-ui/react-dom': 2.1.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@floating-ui/utils': 0.1.6 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - tabbable: 6.2.0 - - '@floating-ui/utils@0.1.6': {} - '@floating-ui/utils@0.2.10': {} '@humanwhocodes/config-array@0.13.0': @@ -4173,10 +3826,6 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - '@jridgewell/gen-mapping@0.3.12': dependencies: '@jridgewell/sourcemap-codec': 1.5.4 @@ -4198,11 +3847,6 @@ snapshots: '@juanelas/base64@1.1.5': {} - '@nanostores/react@0.7.3(nanostores@0.9.5)(react@18.3.1)': - dependencies: - nanostores: 0.9.5 - react: 18.3.1 - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4218,19 +3862,67 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@rolldown/pluginutils@1.0.0-beta.27': {} + '@rollup/rollup-android-arm-eabi@4.46.2': + optional: true - '@rollup/pluginutils@5.2.0(rollup@3.29.5)': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 4.0.3 - optionalDependencies: - rollup: 3.29.5 + '@rollup/rollup-android-arm64@4.46.2': + optional: true - '@rtsao/scc@1.1.0': {} + '@rollup/rollup-darwin-arm64@4.46.2': + optional: true + + '@rollup/rollup-darwin-x64@4.46.2': + optional: true + + '@rollup/rollup-freebsd-arm64@4.46.2': + optional: true - '@sinclair/typebox@0.27.8': {} + '@rollup/rollup-freebsd-x64@4.46.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.46.2': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.46.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.46.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.46.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.46.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.46.2': + optional: true + + '@rtsao/scc@1.1.0': {} '@size-limit/esbuild@11.2.0(size-limit@11.2.0)': dependencies: @@ -4248,132 +3940,50 @@ snapshots: '@size-limit/file': 11.2.0(size-limit@11.2.0) size-limit: 11.2.0 - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.28.0)': + '@svelte-bin/clipboard@0.1.4(svelte@5.37.3)': dependencies: - '@babel/core': 7.28.0 + svelte: 5.37.3 - '@svgr/babel-preset@8.1.0(@babel/core@7.28.0)': + '@sveltejs/acorn-typescript@1.0.5(acorn@8.15.0)': dependencies: - '@babel/core': 7.28.0 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.28.0) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.28.0) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.28.0) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.28.0) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.28.0) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.28.0) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.28.0) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.28.0) + acorn: 8.15.0 - '@svgr/core@8.1.0(typescript@5.8.3)': + '@sveltejs/vite-plugin-svelte-inspector@5.0.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.37.3)(vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))': dependencies: - '@babel/core': 7.28.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.28.0) - camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.8.3) - snake-case: 3.0.4 + '@sveltejs/vite-plugin-svelte': 6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + debug: 4.4.1 + svelte: 5.37.3 + vite: 7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color - - typescript - '@svgr/hast-util-to-babel-ast@8.0.0': + '@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))': dependencies: - '@babel/types': 7.28.1 - entities: 4.5.0 - - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.8.3))': - dependencies: - '@babel/core': 7.28.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.28.0) - '@svgr/core': 8.1.0(typescript@5.8.3) - '@svgr/hast-util-to-babel-ast': 8.0.0 - svg-parser: 2.0.4 + '@sveltejs/vite-plugin-svelte-inspector': 5.0.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.37.3)(vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.37.3)(vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + debug: 4.4.1 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.17 + svelte: 5.37.3 + vite: 7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) + vitefu: 1.1.1(vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) transitivePeerDependencies: - supports-color - '@testing-library/dom@9.3.4': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.27.6 - '@types/aria-query': 5.0.4 - aria-query: 5.1.3 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - - '@testing-library/react@14.3.1(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@babel/runtime': 7.27.6 - '@testing-library/dom': 9.3.4 - '@types/react-dom': 18.3.7(@types/react@18.3.23) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - '@types/react' - '@tootallnate/once@2.0.0': {} - '@types/apca-w3@0.1.3': {} - - '@types/aria-query@5.0.4': {} - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.1 - '@types/babel__generator': 7.27.0 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.7 - - '@types/babel__generator@7.27.0': - dependencies: - '@babel/types': 7.28.1 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.1 + '@tsconfig/svelte@5.0.4': {} - '@types/babel__traverse@7.20.7': - dependencies: - '@babel/types': 7.28.1 + '@types/apca-w3@0.1.3': {} - '@types/chai-subset@1.3.6(@types/chai@4.3.20)': + '@types/chai@5.2.2': dependencies: - '@types/chai': 4.3.20 - - '@types/chai@4.3.20': {} + '@types/deep-eql': 4.0.2 '@types/culori@2.1.1': {} + '@types/deep-eql@4.0.2': {} + '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 @@ -4386,8 +3996,6 @@ snapshots: '@types/estree@1.0.8': {} - '@types/istanbul-lib-coverage@2.0.6': {} - '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} @@ -4396,47 +4004,74 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/prop-types@15.7.15': {} - - '@types/react-dom@18.3.7(@types/react@18.3.23)': - dependencies: - '@types/react': 18.3.23 - - '@types/react@18.3.23': - dependencies: - '@types/prop-types': 15.7.15 - csstype: 3.1.3 - '@types/semver@7.7.0': {} - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.9.2) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.9.2) debug: 4.4.1 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare-lite: 1.4.0 semver: 7.7.2 - tsutils: 3.21.0(typescript@5.8.3) + tsutils: 3.21.0(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@8.39.0(@typescript-eslint/parser@8.39.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.39.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/type-utils': 8.39.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.0 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.2) debug: 4.4.1 eslint: 8.57.1 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.39.0(eslint@8.57.1)(typescript@5.9.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.0 + debug: 4.4.1 + eslint: 8.57.1 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.39.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + debug: 4.4.1 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -4445,21 +4080,44 @@ snapshots: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/scope-manager@8.39.0': + dependencies: + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/visitor-keys': 8.39.0 + + '@typescript-eslint/tsconfig-utils@8.39.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.8.3) + typescript: 5.9.2 + + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.9.2)': + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.9.2) debug: 4.4.1 eslint: 8.57.1 - tsutils: 3.21.0(typescript@5.8.3) + tsutils: 3.21.0(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.39.0(eslint@8.57.1)(typescript@5.9.2)': + dependencies: + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@8.57.1)(typescript@5.9.2) + debug: 4.4.1 + eslint: 8.57.1 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.3)': + '@typescript-eslint/types@8.39.0': {} + + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 @@ -4467,20 +4125,36 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 semver: 7.7.2 - tsutils: 3.21.0(typescript@5.8.3) + tsutils: 3.21.0(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.39.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/project-service': 8.39.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/visitor-keys': 8.39.0 + debug: 4.4.1 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.7.0 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.2) eslint: 8.57.1 eslint-scope: 5.1.1 semver: 7.7.2 @@ -4488,69 +4162,89 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@8.39.0(eslint@8.57.1)(typescript@5.9.2)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + eslint: 8.57.1 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.3.0': {} - - '@vitejs/plugin-react@4.7.0(vite@4.5.14(@types/node@20.19.9)(terser@5.43.1))': + '@typescript-eslint/visitor-keys@8.39.0': dependencies: - '@babel/core': 7.28.0 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.0) - '@rolldown/pluginutils': 1.0.0-beta.27 - '@types/babel__core': 7.20.5 - react-refresh: 0.17.0 - vite: 4.5.14(@types/node@20.19.9)(terser@5.43.1) - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types': 8.39.0 + eslint-visitor-keys: 4.2.1 - '@vitest/coverage-v8@0.34.6(vitest@0.34.6(jsdom@22.1.0)(terser@5.43.1))': + '@ungap/structured-clone@1.3.0': {} + + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/node@20.19.9)(jiti@2.5.1)(jsdom@22.1.0)(terser@5.43.1)(yaml@2.8.1))': dependencies: '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 0.2.3 + '@bcoe/v8-coverage': 1.0.2 + ast-v8-to-istanbul: 0.3.4 + debug: 4.4.1 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 + istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.1.7 magic-string: 0.30.17 - picocolors: 1.1.1 + magicast: 0.3.5 std-env: 3.9.0 - test-exclude: 6.0.0 - v8-to-istanbul: 9.3.0 - vitest: 0.34.6(jsdom@22.1.0)(terser@5.43.1) + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.2.4(@types/node@20.19.9)(jiti@2.5.1)(jsdom@22.1.0)(terser@5.43.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitest/expect@0.34.6': + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.2.1 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.2.4(vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) + + '@vitest/pretty-format@3.2.4': dependencies: - '@vitest/spy': 0.34.6 - '@vitest/utils': 0.34.6 - chai: 4.5.0 + tinyrainbow: 2.0.0 - '@vitest/runner@0.34.6': + '@vitest/runner@3.2.4': dependencies: - '@vitest/utils': 0.34.6 - p-limit: 4.0.0 - pathe: 1.1.2 + '@vitest/utils': 3.2.4 + pathe: 2.0.3 + strip-literal: 3.0.0 - '@vitest/snapshot@0.34.6': + '@vitest/snapshot@3.2.4': dependencies: + '@vitest/pretty-format': 3.2.4 magic-string: 0.30.17 - pathe: 1.1.2 - pretty-format: 29.7.0 + pathe: 2.0.3 - '@vitest/spy@0.34.6': + '@vitest/spy@3.2.4': dependencies: - tinyspy: 2.2.1 + tinyspy: 4.0.3 - '@vitest/utils@0.34.6': + '@vitest/utils@3.2.4': dependencies: - diff-sequences: 29.6.3 - loupe: 2.3.7 - pretty-format: 29.7.0 + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.0 + tinyrainbow: 2.0.0 '@webassemblyjs/ast@1.14.1': dependencies: @@ -4642,10 +4336,6 @@ snapshots: dependencies: acorn: 8.15.0 - acorn-walk@8.3.4: - dependencies: - acorn: 8.15.0 - acorn@8.15.0: {} agent-base@6.0.2: @@ -4685,8 +4375,6 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} any-promise@1.3.0: {} @@ -4710,10 +4398,6 @@ snapshots: argparse@2.0.1: {} - aria-query@5.1.3: - dependencies: - deep-equal: 2.2.3 - aria-query@5.3.2: {} array-buffer-byte-length@1.0.2: @@ -4734,15 +4418,6 @@ snapshots: array-union@2.1.0: {} - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - array.prototype.findlastindex@1.2.6: dependencies: call-bind: 1.0.8 @@ -4767,14 +4442,6 @@ snapshots: es-abstract: 1.24.0 es-shim-unscopables: 1.1.0 - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - arraybuffer.prototype.slice@1.0.4: dependencies: array-buffer-byte-length: 1.0.2 @@ -4785,10 +4452,16 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - assertion-error@1.1.0: {} + assertion-error@2.0.1: {} ast-types-flow@0.0.8: {} + ast-v8-to-istanbul@0.3.4: + dependencies: + '@jridgewell/trace-mapping': 0.3.29 + estree-walker: 3.0.3 + js-tokens: 9.0.1 + async-function@1.0.0: {} asynckit@0.4.0: {} @@ -4796,7 +4469,7 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.6): dependencies: browserslist: 4.25.1 - caniuse-lite: 1.0.30001727 + caniuse-lite: 1.0.30001731 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -4834,8 +4507,8 @@ snapshots: browserslist@4.25.1: dependencies: - caniuse-lite: 1.0.30001727 - electron-to-chromium: 1.5.187 + caniuse-lite: 1.0.30001731 + electron-to-chromium: 1.5.195 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.1) @@ -4870,28 +4543,22 @@ snapshots: camelcase-css@2.0.1: {} - camelcase@6.3.0: {} + caniuse-lite@1.0.30001731: {} - caniuse-lite@1.0.30001727: {} - - chai@4.5.0: + chai@5.2.1: dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.4 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.1.0 + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.2.0 + pathval: 2.0.1 chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - check-error@1.0.3: - dependencies: - get-func-name: 2.0.2 + check-error@2.1.1: {} chokidar@3.6.0: dependencies: @@ -4931,22 +4598,14 @@ snapshots: concat-map@0.0.1: {} - confbox@0.1.8: {} - - convert-source-map@2.0.0: {} - - copy-to-clipboard@3.3.3: - dependencies: - toggle-selection: 1.0.6 - - cosmiconfig@8.3.6(typescript@5.8.3): + cosmiconfig@8.3.6(typescript@5.9.2): dependencies: import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 cross-spawn@7.0.6: dependencies: @@ -5014,37 +4673,16 @@ snapshots: debug@4.4.1: dependencies: - ms: 2.1.3 - - decimal.js@10.6.0: {} - - deep-eql@4.1.4: - dependencies: - type-detect: 4.1.0 - - deep-equal@2.2.3: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - es-get-iterator: 1.1.3 - get-intrinsic: 1.3.0 - is-arguments: 1.2.0 - is-array-buffer: 3.0.5 - is-date-object: 1.1.0 - is-regex: 1.2.1 - is-shared-array-buffer: 1.0.4 - isarray: 2.0.5 - object-is: 1.1.6 - object-keys: 1.1.1 - object.assign: 4.1.7 - regexp.prototype.flags: 1.5.4 - side-channel: 1.1.0 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 + ms: 2.1.3 + + decimal.js@10.6.0: {} + + deep-eql@5.0.2: {} deep-is@0.1.4: {} + deepmerge@4.3.1: {} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -5061,8 +4699,6 @@ snapshots: didyoumean@1.2.2: {} - diff-sequences@29.6.3: {} - dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -5077,17 +4713,10 @@ snapshots: dependencies: esutils: 2.0.3 - dom-accessibility-api@0.5.16: {} - domexception@4.0.0: dependencies: webidl-conversions: 7.0.0 - dot-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.8.1 - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -5096,7 +4725,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.187: {} + electron-to-chromium@1.5.195: {} emoji-regex@8.0.0: {} @@ -5107,8 +4736,6 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.2 - entities@4.5.0: {} - entities@6.0.1: {} error-ex@1.3.2: @@ -5176,37 +4803,6 @@ snapshots: es-errors@1.3.0: {} - es-get-iterator@1.1.3: - dependencies: - call-bind: 1.0.8 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - is-arguments: 1.2.0 - is-map: 2.0.3 - is-set: 2.0.3 - is-string: 1.1.1 - isarray: 2.0.5 - stop-iteration-iterator: 1.1.0 - - es-iterator-helpers@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 - es-module-lexer@1.7.0: {} es-object-atoms@1.1.1: @@ -5230,31 +4826,6 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild@0.18.20: - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - esbuild@0.25.8: optionalDependencies: '@esbuild/aix-ppc64': 0.25.8 @@ -5288,33 +4859,38 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@8.10.2(eslint@8.57.1): + eslint-compat-utils@0.5.1(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + semver: 7.7.2 + + eslint-config-prettier@10.1.8(eslint@8.57.1): dependencies: eslint: 8.57.1 - eslint-config-standard-with-typescript@36.1.1(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.8.3): + eslint-config-standard-with-typescript@36.1.1(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.9.2) eslint: 8.57.1 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1) + eslint-config-standard: 17.1.0(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1) eslint-plugin-n: 15.7.0(eslint@8.57.1) eslint-plugin-promise: 6.6.0(eslint@8.57.1) - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - eslint-config-standard@17.1.0(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1): + eslint-config-standard@17.1.0(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1): dependencies: eslint: 8.57.1 - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1) eslint-plugin-n: 15.7.0(eslint@8.57.1) eslint-plugin-promise: 6.6.0(eslint@8.57.1) - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)): dependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1) eslint-import-resolver-node@0.3.9: dependencies: @@ -5324,32 +4900,32 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + eslint-module-utils@2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.9.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.9.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-boundaries@3.4.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1): + eslint-plugin-boundaries@3.4.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1): dependencies: chalk: 4.1.2 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) is-core-module: 2.13.1 micromatch: 4.0.5 transitivePeerDependencies: @@ -5364,7 +4940,7 @@ snapshots: eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -5375,7 +4951,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -5387,7 +4963,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.9.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -5424,10 +5000,10 @@ snapshots: resolve: 1.22.10 semver: 7.7.2 - eslint-plugin-perfectionist@1.5.1(eslint@8.57.1)(typescript@5.8.3): + eslint-plugin-perfectionist@1.5.1(eslint@8.57.1)(typescript@5.9.2): dependencies: '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.9.2) eslint: 8.57.1 is-core-module: 2.16.1 json5: 2.2.3 @@ -5437,47 +5013,36 @@ snapshots: - supports-color - typescript - eslint-plugin-prettier@4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2): + eslint-plugin-prettier@4.2.5(eslint-config-prettier@10.1.8(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2): dependencies: eslint: 8.57.1 prettier: 3.6.2 prettier-linter-helpers: 1.0.0 optionalDependencies: - eslint-config-prettier: 8.10.2(eslint@8.57.1) + eslint-config-prettier: 10.1.8(eslint@8.57.1) eslint-plugin-promise@6.6.0(eslint@8.57.1): dependencies: eslint: 8.57.1 - eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - - eslint-plugin-react-refresh@0.4.20(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - - eslint-plugin-react@7.37.5(eslint@8.57.1): + eslint-plugin-svelte@2.46.1(eslint@8.57.1)(svelte@5.37.3): dependencies: - array-includes: 3.1.9 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.1 + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@jridgewell/sourcemap-codec': 1.5.4 eslint: 8.57.1 - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 + eslint-compat-utils: 0.5.1(eslint@8.57.1) + esutils: 2.0.3 + known-css-properties: 0.35.0 + postcss: 8.5.6 + postcss-load-config: 3.1.4(postcss@8.5.6) + postcss-safe-parser: 6.0.0(postcss@8.5.6) + postcss-selector-parser: 6.1.2 + semver: 7.7.2 + svelte-eslint-parser: 0.43.0(svelte@5.37.3) + optionalDependencies: + svelte: 5.37.3 + transitivePeerDependencies: + - ts-node eslint-plugin-tailwindcss@3.18.2(tailwindcss@3.4.17): dependencies: @@ -5510,6 +5075,8 @@ snapshots: eslint-visitor-keys@3.4.3: {} + eslint-visitor-keys@4.2.1: {} + eslint@8.57.1: dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) @@ -5553,6 +5120,8 @@ snapshots: transitivePeerDependencies: - supports-color + esm-env@1.2.2: {} + esm@3.2.25: {} espree@9.6.1: @@ -5565,6 +5134,10 @@ snapshots: dependencies: estraverse: 5.3.0 + esrap@2.1.0: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -5573,12 +5146,16 @@ snapshots: estraverse@5.3.0: {} - estree-walker@2.0.2: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 esutils@2.0.3: {} events@3.3.0: {} + expect-type@1.2.2: {} + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -5663,10 +5240,6 @@ snapshots: functions-have-names@1.2.3: {} - gensync@1.0.0-beta.2: {} - - get-func-name@2.0.2: {} - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -5723,6 +5296,8 @@ snapshots: dependencies: type-fest: 0.20.2 + globals@16.3.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -5797,6 +5372,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.5: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -5817,11 +5394,6 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 - is-arguments@1.2.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 @@ -5906,6 +5478,10 @@ snapshots: is-potential-custom-element-name@1.0.1: {} + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.8 + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -5957,11 +5533,11 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@4.0.1: + istanbul-lib-source-maps@5.0.6: dependencies: + '@jridgewell/trace-mapping': 0.3.29 debug: 4.4.1 istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 transitivePeerDependencies: - supports-color @@ -5970,15 +5546,6 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 - jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -5993,10 +5560,12 @@ snapshots: jiti@1.21.7: {} - jiti@2.4.2: {} + jiti@2.5.1: {} js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -6013,7 +5582,7 @@ snapshots: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.20 + nwsapi: 2.2.21 parse5: 7.3.0 rrweb-cssom: 0.6.0 saxes: 6.0.0 @@ -6031,8 +5600,6 @@ snapshots: - supports-color - utf-8-validate - jsesc@3.1.0: {} - json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -6060,6 +5627,10 @@ snapshots: dependencies: json-buffer: 3.0.1 + kleur@4.1.5: {} + + known-css-properties@0.35.0: {} + language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -6071,13 +5642,15 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lilconfig@2.1.0: {} + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} loader-runner@4.3.0: {} - local-pkg@0.4.3: {} + locate-character@3.0.0: {} locate-path@6.0.0: dependencies: @@ -6085,30 +5658,20 @@ snapshots: lodash.merge@4.6.2: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - loupe@2.3.7: - dependencies: - get-func-name: 2.0.2 - - lower-case@2.0.2: - dependencies: - tslib: 2.8.1 + loupe@3.2.0: {} lru-cache@10.4.3: {} - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lz-string@1.5.0: {} - magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.4 + magicast@0.3.5: + dependencies: + '@babel/parser': 7.28.0 + '@babel/types': 7.28.2 + source-map-js: 1.2.1 + make-dir@4.0.0: dependencies: semver: 7.7.2 @@ -6147,13 +5710,6 @@ snapshots: minipass@7.1.2: {} - mlly@1.7.4: - dependencies: - acorn: 8.15.0 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.6.1 - ms@2.1.3: {} mz@2.7.0: @@ -6164,8 +5720,6 @@ snapshots: nanoid@3.3.11: {} - nanoid@4.0.2: {} - nanoid@5.1.5: {} nanospinner@1.2.2: @@ -6180,11 +5734,6 @@ snapshots: neo-async@2.6.2: {} - no-case@3.0.4: - dependencies: - lower-case: 2.0.2 - tslib: 2.8.1 - node-buffer-encoding@1.0.3: {} node-releases@2.0.19: {} @@ -6193,7 +5742,7 @@ snapshots: normalize-range@0.1.2: {} - nwsapi@2.2.20: {} + nwsapi@2.2.21: {} object-assign@4.1.1: {} @@ -6201,11 +5750,6 @@ snapshots: object-inspect@1.13.4: {} - object-is@1.1.6: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - object-keys@1.1.1: {} object.assign@4.1.7: @@ -6217,13 +5761,6 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 - object.entries@1.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - object.fromentries@2.0.8: dependencies: call-bind: 1.0.8 @@ -6267,10 +5804,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@4.0.0: - dependencies: - yocto-queue: 1.2.1 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 @@ -6307,11 +5840,9 @@ snapshots: path-type@4.0.0: {} - pathe@1.1.2: {} - pathe@2.0.3: {} - pathval@1.1.1: {} + pathval@2.0.1: {} picocolors@1.1.1: {} @@ -6323,12 +5854,6 @@ snapshots: pirates@4.0.7: {} - pkg-types@1.3.1: - dependencies: - confbox: 0.1.8 - mlly: 1.7.4 - pathe: 2.0.3 - possible-typed-array-names@1.1.0: {} postcss-attribute-case-insensitive@6.0.3(postcss@8.5.6): @@ -6444,20 +5969,27 @@ snapshots: '@csstools/utilities': 1.0.0(postcss@8.5.6) postcss: 8.5.6 + postcss-load-config@3.1.4(postcss@8.5.6): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.2 + optionalDependencies: + postcss: 8.5.6 + postcss-load-config@4.0.2(postcss@8.5.6): dependencies: lilconfig: 3.1.3 - yaml: 2.8.0 + yaml: 2.8.1 optionalDependencies: postcss: 8.5.6 - postcss-loader@7.3.4(postcss@8.5.6)(typescript@5.8.3)(webpack@5.100.2): + postcss-loader@7.3.4(postcss@8.5.6)(typescript@5.9.2)(webpack@5.101.0): dependencies: - cosmiconfig: 8.3.6(typescript@5.8.3) + cosmiconfig: 8.3.6(typescript@5.9.2) jiti: 1.21.7 postcss: 8.5.6 semver: 7.7.2 - webpack: 5.100.2 + webpack: 5.101.0 transitivePeerDependencies: - typescript @@ -6570,6 +6102,14 @@ snapshots: dependencies: postcss: 8.5.6 + postcss-safe-parser@6.0.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-scss@4.0.9(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-not@7.0.2(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -6594,25 +6134,18 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.6.2: {} - - pretty-format@27.5.1: + prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.37.3): dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 + prettier: 3.6.2 + svelte: 5.37.3 - pretty-format@29.7.0: + prettier-plugin-tailwindcss@0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.37.3))(prettier@3.6.2): dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 + prettier: 3.6.2 + optionalDependencies: + prettier-plugin-svelte: 3.4.0(prettier@3.6.2)(svelte@5.37.3) - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 + prettier@3.6.2: {} psl@1.15.0: dependencies: @@ -6628,30 +6161,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - react-dom@18.3.1(react@18.3.1): - dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 - - react-is@16.13.1: {} - - react-is@17.0.2: {} - - react-is@18.3.1: {} - - react-refresh@0.17.0: {} - - react-use-clipboard@1.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - copy-to-clipboard: 3.3.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - react@18.3.1: - dependencies: - loose-envify: 1.4.0 - read-cache@1.0.0: dependencies: pify: 2.3.0 @@ -6700,20 +6209,36 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - reusify@1.1.0: {} rimraf@3.0.2: dependencies: glob: 7.2.3 - rollup@3.29.5: + rollup@4.46.2: + dependencies: + '@types/estree': 1.0.8 optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.46.2 + '@rollup/rollup-android-arm64': 4.46.2 + '@rollup/rollup-darwin-arm64': 4.46.2 + '@rollup/rollup-darwin-x64': 4.46.2 + '@rollup/rollup-freebsd-arm64': 4.46.2 + '@rollup/rollup-freebsd-x64': 4.46.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 + '@rollup/rollup-linux-arm-musleabihf': 4.46.2 + '@rollup/rollup-linux-arm64-gnu': 4.46.2 + '@rollup/rollup-linux-arm64-musl': 4.46.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 + '@rollup/rollup-linux-ppc64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-musl': 4.46.2 + '@rollup/rollup-linux-s390x-gnu': 4.46.2 + '@rollup/rollup-linux-x64-gnu': 4.46.2 + '@rollup/rollup-linux-x64-musl': 4.46.2 + '@rollup/rollup-win32-arm64-msvc': 4.46.2 + '@rollup/rollup-win32-ia32-msvc': 4.46.2 + '@rollup/rollup-win32-x64-msvc': 4.46.2 fsevents: 2.3.3 rrweb-cssom@0.6.0: {} @@ -6749,10 +6274,6 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 - schema-utils@4.3.2: dependencies: '@types/json-schema': 7.0.15 @@ -6832,7 +6353,7 @@ snapshots: dependencies: bytes-iec: 3.1.1 chokidar: 4.0.3 - jiti: 2.4.2 + jiti: 2.5.1 lilconfig: 3.1.3 nanospinner: 1.2.2 picocolors: 1.1.1 @@ -6840,11 +6361,6 @@ snapshots: slash@3.0.0: {} - snake-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.8.1 - source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -6881,27 +6397,6 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.24.0 - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.24.0 - string.prototype.trim@1.2.10: dependencies: call-bind: 1.0.8 @@ -6937,9 +6432,9 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@1.3.0: + strip-literal@3.0.0: dependencies: - acorn: 8.15.0 + js-tokens: 9.0.1 sucrase@3.35.0: dependencies: @@ -6961,11 +6456,38 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svg-parser@2.0.4: {} + svelte-eslint-parser@0.43.0(svelte@5.37.3): + dependencies: + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + postcss: 8.5.6 + postcss-scss: 4.0.9(postcss@8.5.6) + optionalDependencies: + svelte: 5.37.3 + + svelte-floating-ui@1.6.2: + dependencies: + '@floating-ui/dom': 1.7.3 - symbol-tree@3.2.4: {} + svelte@5.37.3: + dependencies: + '@ampproject/remapping': 2.3.0 + '@jridgewell/sourcemap-codec': 1.5.4 + '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) + '@types/estree': 1.0.8 + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + clsx: 2.1.1 + esm-env: 1.2.2 + esrap: 2.1.0 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.17 + zimmerframe: 1.1.2 - tabbable@6.2.0: {} + symbol-tree@3.2.4: {} tailwindcss@3.4.17: dependencies: @@ -6996,14 +6518,14 @@ snapshots: tapable@2.2.2: {} - terser-webpack-plugin@5.3.14(webpack@5.100.2): + terser-webpack-plugin@5.3.14(webpack@5.101.0): dependencies: '@jridgewell/trace-mapping': 0.3.29 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.43.1 - webpack: 5.100.2 + webpack: 5.101.0 terser@5.43.1: dependencies: @@ -7012,11 +6534,11 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - test-exclude@6.0.0: + test-exclude@7.0.1: dependencies: '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 + glob: 10.4.5 + minimatch: 9.0.5 text-table@0.2.0: {} @@ -7030,21 +6552,23 @@ snapshots: tinybench@2.9.0: {} + tinyexec@0.3.2: {} + tinyglobby@0.2.14: dependencies: fdir: 6.4.6(picomatch@4.0.3) picomatch: 4.0.3 - tinypool@0.7.0: {} + tinypool@1.1.1: {} + + tinyrainbow@2.0.0: {} - tinyspy@2.2.1: {} + tinyspy@4.0.3: {} to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - toggle-selection@1.0.6: {} - tough-cookie@4.1.4: dependencies: psl: 1.15.0 @@ -7056,6 +6580,10 @@ snapshots: dependencies: punycode: 2.3.1 + ts-api-utils@2.1.0(typescript@5.9.2): + dependencies: + typescript: 5.9.2 + ts-interface-checker@0.1.13: {} tsconfig-paths@3.15.0: @@ -7067,19 +6595,15 @@ snapshots: tslib@1.14.1: {} - tslib@2.8.1: {} - - tsutils@3.21.0(typescript@5.8.3): + tsutils@3.21.0(typescript@5.9.2): dependencies: tslib: 1.14.1 - typescript: 5.8.3 + typescript: 5.9.2 type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - type-detect@4.1.0: {} - type-fest@0.20.2: {} typed-array-buffer@1.0.3: @@ -7115,9 +6639,18 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript@5.8.3: {} + typescript-eslint@8.39.0(eslint@8.57.1)(typescript@5.9.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.39.0(@typescript-eslint/parser@8.39.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/parser': 8.39.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@8.57.1)(typescript@5.9.2) + eslint: 8.57.1 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color - ufo@1.6.1: {} + typescript@5.9.2: {} uint8-encoding@2.0.1: {} @@ -7153,93 +6686,93 @@ snapshots: util-deprecate@1.0.2: {} - v8-to-istanbul@9.3.0: - dependencies: - '@jridgewell/trace-mapping': 0.3.29 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - - vite-node@0.34.6(@types/node@20.19.9)(terser@5.43.1): + vite-node@3.2.4(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.1 - mlly: 1.7.4 - pathe: 1.1.2 - picocolors: 1.1.1 - vite: 4.5.14(@types/node@20.19.9)(terser@5.43.1) + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' + - jiti - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color - terser + - tsx + - yaml - vite-plugin-singlefile@0.13.5(rollup@3.29.5)(vite@4.5.14(@types/node@20.19.9)(terser@5.43.1)): + vite-plugin-singlefile@2.3.0(rollup@4.46.2)(vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)): dependencies: micromatch: 4.0.8 - rollup: 3.29.5 - vite: 4.5.14(@types/node@20.19.9)(terser@5.43.1) - - vite-plugin-svgr@3.3.0(rollup@3.29.5)(typescript@5.8.3)(vite@4.5.14(@types/node@20.19.9)(terser@5.43.1)): - dependencies: - '@rollup/pluginutils': 5.2.0(rollup@3.29.5) - '@svgr/core': 8.1.0(typescript@5.8.3) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3)) - vite: 4.5.14(@types/node@20.19.9)(terser@5.43.1) - transitivePeerDependencies: - - rollup - - supports-color - - typescript + rollup: 4.46.2 + vite: 7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) - vite@4.5.14(@types/node@20.19.9)(terser@5.43.1): + vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1): dependencies: - esbuild: 0.18.20 + esbuild: 0.25.8 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 postcss: 8.5.6 - rollup: 3.29.5 + rollup: 4.46.2 + tinyglobby: 0.2.14 optionalDependencies: '@types/node': 20.19.9 fsevents: 2.3.3 + jiti: 2.5.1 terser: 5.43.1 + yaml: 2.8.1 - vitest@0.34.6(jsdom@22.1.0)(terser@5.43.1): - dependencies: - '@types/chai': 4.3.20 - '@types/chai-subset': 1.3.6(@types/chai@4.3.20) - '@types/node': 20.19.9 - '@vitest/expect': 0.34.6 - '@vitest/runner': 0.34.6 - '@vitest/snapshot': 0.34.6 - '@vitest/spy': 0.34.6 - '@vitest/utils': 0.34.6 - acorn: 8.15.0 - acorn-walk: 8.3.4 - cac: 6.7.14 - chai: 4.5.0 + vitefu@1.1.1(vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)): + optionalDependencies: + vite: 7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) + + vitest@3.2.4(@types/node@20.19.9)(jiti@2.5.1)(jsdom@22.1.0)(terser@5.43.1)(yaml@2.8.1): + dependencies: + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.2.1 debug: 4.4.1 - local-pkg: 0.4.3 + expect-type: 1.2.2 magic-string: 0.30.17 - pathe: 1.1.2 - picocolors: 1.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 std-env: 3.9.0 - strip-literal: 1.3.0 tinybench: 2.9.0 - tinypool: 0.7.0 - vite: 4.5.14(@types/node@20.19.9)(terser@5.43.1) - vite-node: 0.34.6(@types/node@20.19.9)(terser@5.43.1) + tinyexec: 0.3.2 + tinyglobby: 0.2.14 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 7.0.6(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@20.19.9)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: + '@types/node': 20.19.9 jsdom: 22.1.0 transitivePeerDependencies: + - jiti - less - lightningcss + - msw - sass + - sass-embedded - stylus - sugarss - supports-color - terser + - tsx + - yaml w3c-xmlserializer@4.0.0: dependencies: @@ -7258,7 +6791,7 @@ snapshots: webpack-sources@3.3.3: {} - webpack@5.100.2: + webpack@5.101.0: dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -7282,7 +6815,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(webpack@5.100.2) + terser-webpack-plugin: 5.3.14(webpack@5.101.0) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -7373,10 +6906,10 @@ snapshots: xmlchars@2.2.0: {} - yallist@3.1.1: {} + yaml@1.10.2: {} - yaml@2.8.0: {} + yaml@2.8.1: {} yocto-queue@0.1.0: {} - yocto-queue@1.2.1: {} + zimmerframe@1.1.2: {} diff --git a/postcss.config.js b/postcss.config.cjs similarity index 100% rename from postcss.config.js rename to postcss.config.cjs diff --git a/src/api/services/figma/nodes/create-polychrom-node.ts b/src/api/services/figma/nodes/create-polychrom-node.ts index f0e38ed..7f9b5b9 100644 --- a/src/api/services/figma/nodes/create-polychrom-node.ts +++ b/src/api/services/figma/nodes/create-polychrom-node.ts @@ -3,7 +3,7 @@ import { getNodeFills } from '~api/services/figma/nodes/get-node-fills.ts'; import { type PolychromNode } from '~types/common.ts'; import { formatHex, modeOklch, useMode } from 'culori/fn'; -const convertToOklch = useMode(modeOklch) +const convertToOklch = useMode(modeOklch); export const createPolychromNode = ( node: PageNode | SceneNode, diff --git a/src/ui/components/App.svelte b/src/ui/components/App.svelte new file mode 100644 index 0000000..4c4b422 --- /dev/null +++ b/src/ui/components/App.svelte @@ -0,0 +1,55 @@ + + +
+ + +
+ + +
+ {#if $isP3} + + {#snippet trigger()} +
+

+ P3 +

+
+ {/snippet} + File color profile +
+ {/if} + + +
+
+ +
+ +
+
diff --git a/src/ui/components/App.tsx b/src/ui/components/App.tsx deleted file mode 100644 index efc2dda..0000000 --- a/src/ui/components/App.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { useStore } from '@nanostores/react'; -import { MessageTypes } from '~types/messages.ts'; -import { AppContent } from '~ui/components/AppContent.tsx'; -import { HelpLink } from '~ui/components/HelpLink.tsx'; -import { LurkersLink } from '~ui/components/LurkersLink.tsx'; -import { SettingsButton } from '~ui/components/SettingsButton.tsx'; -import { - Tooltip, - TooltipContent, - TooltipTrigger, -} from '~ui/components/Tooltip.tsx'; -import React, { useEffect } from 'react'; - -import { $isP3 } from '../stores/selected-nodes'; - -export const App: React.FC = () => { - const isP3 = useStore($isP3); - - useEffect(() => { - parent.postMessage( - { - pluginMessage: { - type: MessageTypes.UiReady, - }, - }, - '*' - ); - }, []); - - return ( -
- - -
- - -
- {isP3 && ( - - -
-

- P3 -

-
-
- File color profile -
- )} - - -
-
- -
- -
-
- ); -}; diff --git a/src/ui/components/AppContent.svelte b/src/ui/components/AppContent.svelte new file mode 100644 index 0000000..06fa0cf --- /dev/null +++ b/src/ui/components/AppContent.svelte @@ -0,0 +1,37 @@ + + +{#if $isInvalidBackground} + +{:else if $isUnprocessedBlendModes} + +{:else if $isEmptySelection || isEmpty($contrastConclusion)} + +{:else if $isMultiSelection} + +{:else if $isSingleSelection} + {#if isEmpty($contrastConclusion[0])} + + {:else} + + {/if} +{/if} diff --git a/src/ui/components/AppContent.tsx b/src/ui/components/AppContent.tsx deleted file mode 100644 index 250bf3e..0000000 --- a/src/ui/components/AppContent.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { useStore } from '@nanostores/react'; -import { EmptySelectionMessage } from '~ui/components/EmptySelectionMessage.tsx'; -import { InvalidBackgroundSelectionMessage } from '~ui/components/InvalidBackgroundSelectionMessage.tsx'; -import { Selection } from '~ui/components/Selection.tsx'; -import { SelectionsList } from '~ui/components/SelectionsList.tsx'; -import { UnprocessedBlendModesSelectionMessage } from '~ui/components/UnprocessedBlendModesSelectionMessage.tsx'; -import { - $contrastConclusion, - $isEmptySelection, - $isInvalidBackground, - $isMultiSelection, - $isUnprocessedBlendModes, -} from '~ui/stores/selected-nodes.ts'; -import { isEmpty } from '~utils/not-empty.ts'; -import { type ReactElement } from 'react'; - -export const AppContent = (): ReactElement => { - const isInvalidBackground = useStore($isInvalidBackground); - const isEmptySelection = useStore($isEmptySelection); - const isMultiSelection = useStore($isMultiSelection); - const isUnprocessedBlendModes = useStore($isUnprocessedBlendModes); - const contrastConclusion = useStore($contrastConclusion); - - if (isInvalidBackground) { - return ; - } - - if (isUnprocessedBlendModes) { - return ; - } - - if (isEmptySelection) { - return ; - } - - if (isEmpty(contrastConclusion)) { - return ; - } - - if (isMultiSelection) { - return ; - } else { - const pair = contrastConclusion[0]; - - if (isEmpty(pair)) { - return ; - } - - return ; - } -}; diff --git a/src/ui/components/BasicColorPreviewIcon.svelte b/src/ui/components/BasicColorPreviewIcon.svelte new file mode 100644 index 0000000..d6f558d --- /dev/null +++ b/src/ui/components/BasicColorPreviewIcon.svelte @@ -0,0 +1,20 @@ + + + + + + diff --git a/src/ui/components/BasicColorPreviewIcon.tsx b/src/ui/components/BasicColorPreviewIcon.tsx deleted file mode 100644 index 41df3be..0000000 --- a/src/ui/components/BasicColorPreviewIcon.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { type ReactElement } from 'react'; - -interface Props { - borderColor: string; - indicatorColor: string; -} - -export const BasicColorPreviewIcon = ({ - borderColor, - indicatorColor, -}: Props): ReactElement => { - return ( - - - - - ); -}; diff --git a/src/ui/components/ColorIndicator.svelte b/src/ui/components/ColorIndicator.svelte new file mode 100644 index 0000000..4294100 --- /dev/null +++ b/src/ui/components/ColorIndicator.svelte @@ -0,0 +1,70 @@ + + + + {#snippet trigger()} + + {/snippet} + + {#if copied} + Copied! + {:else} + Copy as CSS + {/if} + diff --git a/src/ui/components/ColorIndicator.tsx b/src/ui/components/ColorIndicator.tsx deleted file mode 100644 index cfa8bc9..0000000 --- a/src/ui/components/ColorIndicator.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { useStore } from '@nanostores/react'; -import { ColorPreview } from '~ui/components/ColorPreview.tsx'; -import { ThemeVariablesKeys } from '~ui/components/ThemeVariablesProvider.tsx'; -import { - getFormatterForCSS, - getFormatterForDisplaying, -} from '~utils/colors/formatters.ts'; -import { type Oklch } from 'culori/fn'; -import { type ReactElement } from 'react'; -import useClipboard from 'react-use-clipboard'; - -import { $colorSpaceDisplayMode } from '../stores/color-space-display-mode.ts'; -import { Tooltip, TooltipContent, TooltipTrigger } from './Tooltip.tsx'; - -interface ColorIndicatorProps { - borderColor: string; - fill: { hex: string; oklch: Oklch }; - indicatorColor: string; - isBlended: boolean; - textColor: string; -} - -export const ColorIndicator = ({ - borderColor, - fill, - indicatorColor, - isBlended, - textColor, -}: ColorIndicatorProps): ReactElement => { - const colorSpaceDisplayMode = useStore($colorSpaceDisplayMode); - - const formatColorForDisplay = getFormatterForDisplaying( - colorSpaceDisplayMode - ); - const displayValue = formatColorForDisplay(fill.oklch); - - const formatColorForCSS = getFormatterForCSS(colorSpaceDisplayMode); - const cssValue = formatColorForCSS(fill.oklch); - - const [isCopied, setCopied] = useClipboard(cssValue, { - successDuration: 2000, - }); - - return ( - - - - - {isCopied ? 'Copied!' : 'Copy as CSS'} - - ); -}; diff --git a/src/ui/components/ColorPreview.svelte b/src/ui/components/ColorPreview.svelte new file mode 100644 index 0000000..61935ea --- /dev/null +++ b/src/ui/components/ColorPreview.svelte @@ -0,0 +1,18 @@ + + +{#if isBlended} +
+ +
+{:else} + +{/if} diff --git a/src/ui/components/ColorPreview.tsx b/src/ui/components/ColorPreview.tsx deleted file mode 100644 index f424023..0000000 --- a/src/ui/components/ColorPreview.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { BasicColorPreviewIcon } from '~ui/components/BasicColorPreviewIcon.tsx'; -import { LayeredColorPreviewIcon } from '~ui/components/LayeredColorPreviewIcon.tsx'; -import { type ReactElement } from 'react'; - -interface Props { - borderColor: string; - indicatorColor: string; - isBlended: boolean; -} - -export const ColorPreview = ({ - borderColor, - indicatorColor, - isBlended, -}: Props): ReactElement => { - if (isBlended) { - return ( -
- -
- ); - } - - return ( - - ); -}; diff --git a/src/ui/components/ContrastSample.svelte b/src/ui/components/ContrastSample.svelte new file mode 100644 index 0000000..451cdb1 --- /dev/null +++ b/src/ui/components/ContrastSample.svelte @@ -0,0 +1,26 @@ + + +

+ + {exampleText} + +

diff --git a/src/ui/components/ContrastSample.tsx b/src/ui/components/ContrastSample.tsx deleted file mode 100644 index 9232c7b..0000000 --- a/src/ui/components/ContrastSample.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { ThemeVariablesKeys } from '~ui/components/ThemeVariablesProvider.tsx'; -import clsx from 'clsx'; -import { type ReactElement } from 'react'; - -interface Props { - bgColor: string; - color: string; - opacity?: number; - size: 'large' | 'small'; -} - -const exampleText = 'Aa'; - -export const ContrastSample = ({ - bgColor, - color, - opacity, - size, -}: Props): ReactElement => { - return ( -

- - {exampleText} - -

- ); -}; diff --git a/src/ui/components/EmptySelectionMessage.svelte b/src/ui/components/EmptySelectionMessage.svelte new file mode 100644 index 0000000..1721bf4 --- /dev/null +++ b/src/ui/components/EmptySelectionMessage.svelte @@ -0,0 +1,11 @@ + + +

+ Select a layer with a solid fill +

diff --git a/src/ui/components/EmptySelectionMessage.tsx b/src/ui/components/EmptySelectionMessage.tsx deleted file mode 100644 index 1ffa2ae..0000000 --- a/src/ui/components/EmptySelectionMessage.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import ufoImage from '~ui/assets/ufo@2x.webp'; -import { type ReactElement } from 'react'; - -export const EmptySelectionMessage = (): ReactElement => { - return ( -

- Select a layer with a solid fill -

- ); -}; diff --git a/src/ui/components/HelpIcon.svelte b/src/ui/components/HelpIcon.svelte new file mode 100644 index 0000000..2a65240 --- /dev/null +++ b/src/ui/components/HelpIcon.svelte @@ -0,0 +1,6 @@ + + + diff --git a/src/ui/components/HelpIcon.tsx b/src/ui/components/HelpIcon.tsx deleted file mode 100644 index 47c8d38..0000000 --- a/src/ui/components/HelpIcon.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { type ReactElement } from 'react'; - -export const HelpIcon = (): ReactElement => { - return ( - - - - ); -}; diff --git a/src/ui/components/HelpLink.svelte b/src/ui/components/HelpLink.svelte new file mode 100644 index 0000000..db0ef3a --- /dev/null +++ b/src/ui/components/HelpLink.svelte @@ -0,0 +1,20 @@ + + + + {#snippet trigger()} + + + + {/snippet} + APCA in a Nutshell + diff --git a/src/ui/components/HelpLink.tsx b/src/ui/components/HelpLink.tsx deleted file mode 100644 index 530ce72..0000000 --- a/src/ui/components/HelpLink.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { HelpIcon } from '~ui/components/HelpIcon.tsx'; -import { - Tooltip, - TooltipContent, - TooltipTrigger, -} from '~ui/components/Tooltip.tsx'; -import { type ReactElement } from 'react'; - -import { APCADocumentationURL } from '../../constants.ts'; - -export const HelpLink = (): ReactElement => { - return ( - - - - - - - APCA in a Nutshell - - ); -}; diff --git a/src/ui/components/InvalidBackgroundSelectionMessage.svelte b/src/ui/components/InvalidBackgroundSelectionMessage.svelte new file mode 100644 index 0000000..d6064ce --- /dev/null +++ b/src/ui/components/InvalidBackgroundSelectionMessage.svelte @@ -0,0 +1,11 @@ + + +

+ The background layer should be a solid fill +

diff --git a/src/ui/components/InvalidBackgroundSelectionMessage.tsx b/src/ui/components/InvalidBackgroundSelectionMessage.tsx deleted file mode 100644 index 776ff80..0000000 --- a/src/ui/components/InvalidBackgroundSelectionMessage.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import layersImage from '~ui/assets/layers@2x.webp'; -import { type ReactElement } from 'react'; - -export const InvalidBackgroundSelectionMessage = (): ReactElement => { - return ( -

- The background layer should be a solid fill -

- ); -}; diff --git a/src/ui/components/LayeredColorPreviewIcon.svelte b/src/ui/components/LayeredColorPreviewIcon.svelte new file mode 100644 index 0000000..d77f2f2 --- /dev/null +++ b/src/ui/components/LayeredColorPreviewIcon.svelte @@ -0,0 +1,35 @@ + + +
+ + + + + + +
diff --git a/src/ui/components/LayeredColorPreviewIcon.tsx b/src/ui/components/LayeredColorPreviewIcon.tsx deleted file mode 100644 index 26fa5bf..0000000 --- a/src/ui/components/LayeredColorPreviewIcon.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { type ReactElement } from 'react'; - -interface Props { - borderColor: string; - indicatorColor: string; -} - -export const LayeredColorPreviewIcon = ({ - borderColor, - indicatorColor, -}: Props): ReactElement => { - return ( -
- - - - - - -
- ); -}; diff --git a/src/ui/components/LurkersIcon.svelte b/src/ui/components/LurkersIcon.svelte new file mode 100644 index 0000000..9dfeed3 --- /dev/null +++ b/src/ui/components/LurkersIcon.svelte @@ -0,0 +1,29 @@ +
+ + + + + + +
diff --git a/src/ui/components/LurkersIcon.tsx b/src/ui/components/LurkersIcon.tsx deleted file mode 100644 index 3da9021..0000000 --- a/src/ui/components/LurkersIcon.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { type ReactElement } from 'react'; - -export const LurkersIcon = (): ReactElement => { - return ( -
- - - - - - -
- ); -}; diff --git a/src/ui/components/LurkersLink.svelte b/src/ui/components/LurkersLink.svelte new file mode 100644 index 0000000..6254761 --- /dev/null +++ b/src/ui/components/LurkersLink.svelte @@ -0,0 +1,20 @@ + + + + {#snippet trigger()} + + + + {/snippet} + Evil Martians + diff --git a/src/ui/components/LurkersLink.tsx b/src/ui/components/LurkersLink.tsx deleted file mode 100644 index 953706e..0000000 --- a/src/ui/components/LurkersLink.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { LurkersIcon } from '~ui/components/LurkersIcon.tsx'; -import { - Tooltip, - TooltipContent, - TooltipTrigger, -} from '~ui/components/Tooltip.tsx'; -import { type ReactElement } from 'react'; - -import { evilMartiansSiteURL } from '../../constants.ts'; - -export const LurkersLink = (): ReactElement => { - return ( - - - - - - - Evil Martians - - ); -}; diff --git a/src/ui/components/PictureIcon.svelte b/src/ui/components/PictureIcon.svelte new file mode 100644 index 0000000..416d210 --- /dev/null +++ b/src/ui/components/PictureIcon.svelte @@ -0,0 +1,12 @@ + + + + + diff --git a/src/ui/components/PictureIcon.tsx b/src/ui/components/PictureIcon.tsx deleted file mode 100644 index a86ccd8..0000000 --- a/src/ui/components/PictureIcon.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { ThemeVariablesKeys } from '~ui/components/ThemeVariablesProvider.tsx'; -import { type ReactElement } from 'react'; - -export const PictureIcon = (): ReactElement => { - return ( - - - - ); -}; diff --git a/src/ui/components/ProgressBar.svelte b/src/ui/components/ProgressBar.svelte new file mode 100644 index 0000000..e1da3ab --- /dev/null +++ b/src/ui/components/ProgressBar.svelte @@ -0,0 +1,97 @@ + + +
+
+ + 0 + + +
+
+ {#each conclusionArray as { isBodyText, isContextText, isFluentText, position }} +
+ {#if $rewardAnimationLaunch.contentText} + + {/if} + + {#if isBodyText && $rewardAnimationLaunch.bodyText === true} + + {/if} + + {#if isFluentText && $rewardAnimationLaunch.fluentText === true} + + {/if} +
+ {/each} +
+
+ + {maxScale} + +
+
diff --git a/src/ui/components/ProgressBar.tsx b/src/ui/components/ProgressBar.tsx deleted file mode 100644 index 27d457b..0000000 --- a/src/ui/components/ProgressBar.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import { useStore } from '@nanostores/react'; -import { RewardingAnimationBodyText } from '~ui/components/RewardingAnimationBodyText.tsx'; -import { RewardingAnimationContentText } from '~ui/components/RewardingAnimationContentText.tsx'; -import { RewardingAnimationFluentText } from '~ui/components/RewardingAnimationFluentText.tsx'; -import { ThemeVariablesKeys } from '~ui/components/ThemeVariablesProvider.tsx'; -import { conclusions } from '~ui/services/apca/conclusion.ts'; -import { $rewardAnimationLaunch } from '~ui/stores/selected-nodes.ts'; -import { isEmpty } from '~utils/not-empty.ts'; -import clsx from 'clsx'; -import { type ReactElement } from 'react'; - -interface Props { - apca: number; - height: number; -} - -const SCALE = 2; -const APCA_NEGATIVE_MAX_SCALE = 108; -const APCA_POSITIVE_MAX_SCALE = 106; -const SERIF_OFFSET = 2; - -export const ProgressBar = ({ apca, height }: Props): ReactElement => { - const rewardAnimationLaunch = useStore($rewardAnimationLaunch); - const maxScale = apca > 0 ? APCA_POSITIVE_MAX_SCALE : APCA_NEGATIVE_MAX_SCALE; - const barWidth = maxScale * SCALE; - const filledSegmentWidth = Math.abs(apca) * SCALE; - const [, ...conclusionScores] = Object.values(conclusions).reverse(); - - return ( -
-
- - 0 - - -
-
- -
- {Array.from({ length: conclusionScores.length }).map((_, i) => { - const value = conclusionScores[i]; - const isContextText = value === conclusions['Content Text']; - const isBodyText = value === conclusions['Body Text']; - const isFluentText = value === conclusions['Fluent Text']; - - if (isEmpty(value)) return null; - - const position = value * SCALE - SERIF_OFFSET; - - return ( -
- {isContextText && - rewardAnimationLaunch.contentText === true && ( - - )} - - {isBodyText && rewardAnimationLaunch.bodyText === true && ( - - )} - - {isFluentText && - rewardAnimationLaunch.fluentText === true && ( - - )} -
- ); - })} -
-
- - - {maxScale} - -
-
- ); -}; diff --git a/src/ui/components/RewardingAnimationBodyText.svelte b/src/ui/components/RewardingAnimationBodyText.svelte new file mode 100644 index 0000000..6a56fd3 --- /dev/null +++ b/src/ui/components/RewardingAnimationBodyText.svelte @@ -0,0 +1,5 @@ +
+
+
+
+
diff --git a/src/ui/components/RewardingAnimationBodyText.tsx b/src/ui/components/RewardingAnimationBodyText.tsx deleted file mode 100644 index 36bb557..0000000 --- a/src/ui/components/RewardingAnimationBodyText.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { type ReactElement } from 'react'; - -export const RewardingAnimationBodyText = (): ReactElement => { - return ( -
-
-
-
-
- ); -}; diff --git a/src/ui/components/RewardingAnimationContentText.svelte b/src/ui/components/RewardingAnimationContentText.svelte new file mode 100644 index 0000000..121cd89 --- /dev/null +++ b/src/ui/components/RewardingAnimationContentText.svelte @@ -0,0 +1,3 @@ +
+
+
diff --git a/src/ui/components/RewardingAnimationContentText.tsx b/src/ui/components/RewardingAnimationContentText.tsx deleted file mode 100644 index bae601f..0000000 --- a/src/ui/components/RewardingAnimationContentText.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { type ReactElement } from 'react'; - -export const RewardingAnimationContentText = (): ReactElement => { - return ( -
-
-
- ); -}; diff --git a/src/ui/components/RewardingAnimationFluentText.svelte b/src/ui/components/RewardingAnimationFluentText.svelte new file mode 100644 index 0000000..9c9ea2d --- /dev/null +++ b/src/ui/components/RewardingAnimationFluentText.svelte @@ -0,0 +1,6 @@ +
+
+
+
+
+
diff --git a/src/ui/components/RewardingAnimationFluentText.tsx b/src/ui/components/RewardingAnimationFluentText.tsx deleted file mode 100644 index 0643fd7..0000000 --- a/src/ui/components/RewardingAnimationFluentText.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { type ReactElement } from 'react'; - -export const RewardingAnimationFluentText = (): ReactElement => { - return ( -
-
-
-
-
-
- ); -}; diff --git a/src/ui/components/SegmentedFontStyleDefinition.svelte b/src/ui/components/SegmentedFontStyleDefinition.svelte new file mode 100644 index 0000000..97953a2 --- /dev/null +++ b/src/ui/components/SegmentedFontStyleDefinition.svelte @@ -0,0 +1,69 @@ + + + + + diff --git a/src/ui/components/SegmentedFontStyleDefinition.tsx b/src/ui/components/SegmentedFontStyleDefinition.tsx deleted file mode 100644 index 152e4c5..0000000 --- a/src/ui/components/SegmentedFontStyleDefinition.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { type UIColor } from '~types/common.ts'; -import { formatColorForTheme } from '~ui/components/ThemeVariablesProvider.tsx'; -import { type ReactElement } from 'react'; - -interface Props { - currentStyleNumber: number; - id: string; - primaryColor: UIColor; - secondaryColor: UIColor; -} - -export const SegmentedFontStyleDefinition = ({ - currentStyleNumber, - id, - primaryColor, - secondaryColor, -}: Props): ReactElement => { - const formattedCurrentStyleNumber = currentStyleNumber.toLocaleString( - 'en-US', - { - minimumIntegerDigits: 2, - useGrouping: false, - } - ); - - const primaryFormatted = formatColorForTheme(primaryColor); - const secondaryFormatted = formatColorForTheme(secondaryColor, 0.12); - - return ( - - ); -}; diff --git a/src/ui/components/Selection.svelte b/src/ui/components/Selection.svelte new file mode 100644 index 0000000..f6ae0e5 --- /dev/null +++ b/src/ui/components/Selection.svelte @@ -0,0 +1,81 @@ + + +{#if isEmpty(userSelection.apca) || isEmpty(uiColors)} +

+ Can't calc +

+{:else} + +
+ + + +
+
+{/if} diff --git a/src/ui/components/Selection.tsx b/src/ui/components/Selection.tsx deleted file mode 100644 index d393ba5..0000000 --- a/src/ui/components/Selection.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import { - ThemeVariablesKeys, - ThemeVariablesProvider, -} from '~ui/components/ThemeVariablesProvider.tsx'; -import { type ContrastConclusion } from '~ui/types'; -import { isEmpty } from '~utils/not-empty.ts'; -import clsx from 'clsx'; -import { type ReactElement, useState } from 'react'; - -import { generateUIColors } from '../services/theme/generate-ui-colors.ts'; -import { SegmentedFontStyleDefinition } from './SegmentedFontStyleDefinition.tsx'; -import { SelectionContent } from './SelectionContent.tsx'; - -const CantCalculateMessage = (): ReactElement => ( -

- Can't calc -

-); - -interface Props { - id: string; - isLast?: boolean; - size: 'large' | 'small'; - userSelection: ContrastConclusion; -} - -const SEGMENTED_FONT_STYLES = { - INITIAL: 1, - MAX: 2, -}; - -export const Selection = ({ - id, - isLast, - size, - userSelection: { apca, bg, fg }, -}: Props): ReactElement => { - const [currentStyleNumber, setCurrentStyleNumber] = useState( - SEGMENTED_FONT_STYLES.INITIAL - ); - - const handleCurrentStyleNumberChange = (): void => { - const newStyleNumber = currentStyleNumber + 1; - if (newStyleNumber > SEGMENTED_FONT_STYLES.MAX) { - setCurrentStyleNumber(SEGMENTED_FONT_STYLES.INITIAL); - } else { - setCurrentStyleNumber(newStyleNumber); - } - }; - - if (isEmpty(apca)) { - return ; - } - - const uiColors = generateUIColors( - { hex: fg.hex, oklch: fg.oklch }, - { hex: bg.hex, oklch: bg.oklch } - ); - - if (isEmpty(uiColors)) { - return ; - } - - return ( - -
- - - -
-
- ); -}; diff --git a/src/ui/components/SelectionContent.svelte b/src/ui/components/SelectionContent.svelte new file mode 100644 index 0000000..0b72ca4 --- /dev/null +++ b/src/ui/components/SelectionContent.svelte @@ -0,0 +1,90 @@ + + +
+
+

+ {getConclusionByScore(Math.abs(apca))} +

+ +
+ +
+
+ +
+
+ +
+ +
+

+ {Math.abs(apca)} +

+
+
+ + {#if isLast === true || size === 'large'} +
+ +
+ {/if} + + {#if size === 'large'} +
+ + + +
+ {/if} +
diff --git a/src/ui/components/SelectionContent.tsx b/src/ui/components/SelectionContent.tsx deleted file mode 100644 index 78f3f07..0000000 --- a/src/ui/components/SelectionContent.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { - formatColorForTheme, - ThemeVariablesKeys, -} from '~ui/components/ThemeVariablesProvider.tsx'; -import { getConclusionByScore } from '~ui/services/apca/conclusion.ts'; -import { type ContrastConclusion } from '~ui/types'; -import clsx from 'clsx'; -import { type ReactElement } from 'react'; - -import { ColorIndicator } from './ColorIndicator.tsx'; -import { ContrastSample } from './ContrastSample.tsx'; -import { ProgressBar } from './ProgressBar.tsx'; -import { TextMetrics } from './TextMetrics.tsx'; - -interface Props extends ContrastConclusion { - isLast?: boolean; - onApcaDoubleClick: () => void; - size: 'large' | 'small'; -} - -export const SelectionContent = ({ - apca, - bg, - fg, - id, - isLast, - onApcaDoubleClick, - size, -}: Props): ReactElement => { - const bgColor = formatColorForTheme(bg); - const fgColor = formatColorForTheme(fg); - - return ( -
-
-

- {getConclusionByScore(Math.abs(apca))} -

- -
- -
-
- -
-
- -
- -
-

- {Math.abs(apca)} -

-
-
- - <> - {(isLast === true || size === 'large') && ( -
- -
- )} - - {size === 'large' && ( -
- - - -
- )} - -
- ); -}; diff --git a/src/ui/components/SelectionsList.svelte b/src/ui/components/SelectionsList.svelte new file mode 100644 index 0000000..9e1384e --- /dev/null +++ b/src/ui/components/SelectionsList.svelte @@ -0,0 +1,28 @@ + + +
    + {#each contrastConclusion as pair, index} +
  • + +
  • + {/each} +
diff --git a/src/ui/components/SelectionsList.tsx b/src/ui/components/SelectionsList.tsx deleted file mode 100644 index b47f67c..0000000 --- a/src/ui/components/SelectionsList.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { Selection } from '~ui/components/Selection.tsx'; -import { type ContrastConclusionList } from '~ui/services/blend/blend-colors.ts'; -import clsx from 'clsx'; -import { type ReactElement } from 'react'; - -interface Props { - contrastConclusion: ContrastConclusionList; -} - -export const SelectionsList = ({ contrastConclusion }: Props): ReactElement => { - return ( -
    - {contrastConclusion?.map((pair, index) => ( -
  • - -
  • - ))} -
- ); -}; diff --git a/src/ui/components/SettingsButton.svelte b/src/ui/components/SettingsButton.svelte new file mode 100644 index 0000000..7e07069 --- /dev/null +++ b/src/ui/components/SettingsButton.svelte @@ -0,0 +1,33 @@ + + + + {#snippet trigger()} + + {/snippet} + +

+ {#each colorSpaceDisplayModesList as mode} + + {mode} + + {/each} +

+
diff --git a/src/ui/components/SettingsButton.tsx b/src/ui/components/SettingsButton.tsx deleted file mode 100644 index 2698bc9..0000000 --- a/src/ui/components/SettingsButton.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { useStore } from '@nanostores/react'; -import { SettingsIcon } from '~ui/components/SettingsIcon.tsx'; -import { - Tooltip, - TooltipContent, - TooltipTrigger, -} from '~ui/components/Tooltip.tsx'; -import { - $colorSpaceDisplayMode, - changeColorSpaceDisplayMode, - colorSpaceDisplayModesList, -} from '~ui/stores/color-space-display-mode.ts'; -import clsx from 'clsx'; -import { type ReactElement } from 'react'; - -export const SettingsButton = (): ReactElement => { - const colorSpaceDisplayMode = useStore($colorSpaceDisplayMode); - - return ( - - - - - - -

- {colorSpaceDisplayModesList.map((mode) => { - const isActive = mode === colorSpaceDisplayMode; - - return ( - - {mode} - - ); - })} -

-
-
- ); -}; diff --git a/src/ui/components/SettingsIcon.svelte b/src/ui/components/SettingsIcon.svelte new file mode 100644 index 0000000..5caae69 --- /dev/null +++ b/src/ui/components/SettingsIcon.svelte @@ -0,0 +1,8 @@ + + + diff --git a/src/ui/components/SettingsIcon.tsx b/src/ui/components/SettingsIcon.tsx deleted file mode 100644 index 7307a71..0000000 --- a/src/ui/components/SettingsIcon.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { type ReactElement } from 'react'; - -export const SettingsIcon = (): ReactElement => { - return ( - - - - ); -}; diff --git a/src/ui/components/StopIcon.svelte b/src/ui/components/StopIcon.svelte new file mode 100644 index 0000000..d3e5436 --- /dev/null +++ b/src/ui/components/StopIcon.svelte @@ -0,0 +1,12 @@ + + + + + diff --git a/src/ui/components/StopIcon.tsx b/src/ui/components/StopIcon.tsx deleted file mode 100644 index a236b88..0000000 --- a/src/ui/components/StopIcon.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { ThemeVariablesKeys } from '~ui/components/ThemeVariablesProvider.tsx'; -import { type ReactElement } from 'react'; - -export const StopIcon = (): ReactElement => { - return ( - - - - - ); -}; diff --git a/src/ui/components/TextMetrics.svelte b/src/ui/components/TextMetrics.svelte new file mode 100644 index 0000000..687af8c --- /dev/null +++ b/src/ui/components/TextMetrics.svelte @@ -0,0 +1,44 @@ + + +{#if Math.abs(apca) < conclusions['Not Readable']} + +{:else if Math.abs(apca) < conclusions['Non-Text']} + +{:else if Math.abs(apca) < conclusions['Large Text']} + +{:else} +
+
+

+ Rg +

+

{regular}px

+
+
+

+ Bd +

+

{bold}px

+
+
+{/if} diff --git a/src/ui/components/TextMetrics.tsx b/src/ui/components/TextMetrics.tsx deleted file mode 100644 index b54b857..0000000 --- a/src/ui/components/TextMetrics.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { ThemeVariablesKeys } from '~ui/components/ThemeVariablesProvider.tsx'; -import { conclusions } from '~ui/services/apca/conclusion.ts'; -import { fontLookupAPCA } from 'apca-w3'; -import { type ReactElement } from 'react'; - -import { PictureIcon } from './PictureIcon.tsx'; -import { StopIcon } from './StopIcon.tsx'; -import { WarningIcon } from './WarningIcon.tsx'; - -interface Props { - apca: number; -} - -export const TextMetrics = ({ apca }: Props): ReactElement => { - const [, , , , regular, , , bold] = fontLookupAPCA(apca); - - if (Math.abs(apca) < conclusions['Not Readable']) { - return ; - } - - if (Math.abs(apca) < conclusions['Non-Text']) { - return ; - } - - if (Math.abs(apca) < conclusions['Large Text']) { - return ; - } - - return ( -
-
-

- Rg -

-

{regular}px

-
-
-

- Bd -

-

{bold}px

-
-
- ); -}; diff --git a/src/ui/components/ThemeVariablesProvider.svelte b/src/ui/components/ThemeVariablesProvider.svelte new file mode 100644 index 0000000..2e62eca --- /dev/null +++ b/src/ui/components/ThemeVariablesProvider.svelte @@ -0,0 +1,47 @@ + + +
+ {@render children()} +
diff --git a/src/ui/components/ThemeVariablesProvider.tsx b/src/ui/components/ThemeVariablesProvider.tsx deleted file mode 100644 index 3fac048..0000000 --- a/src/ui/components/ThemeVariablesProvider.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import { type UIColor } from '~types/common.ts'; -import { isSupportsOKLCH } from '~ui/constants.ts'; -import { type Theme } from '~ui/services/theme/generate-ui-colors.ts'; -import { formatForOklchCSS } from '~utils/colors/formatters.ts'; -import { isEmpty, notEmpty } from '~utils/not-empty.ts'; -import { formatHex8 } from 'culori/fn'; -import { type ReactElement } from 'react'; - -interface Props { - children: ReactElement; - theme: Theme; -} - -const prefix = '--polychrom-theme-'; - -export enum ThemeVariablesKeys { - bg = `${prefix}bg`, - bgBorder = `${prefix}bg-border`, - borderOriginal = `${prefix}border-original`, - fg = `${prefix}fg`, - fg24 = `${prefix}fg-24`, - fg70 = `${prefix}fg-70`, - fgBorder = `${prefix}fg-border`, - secondary = `${prefix}secondary`, - secondary12 = `${prefix}secondary-12`, - secondary16 = `${prefix}secondary-16`, - secondary24 = `${prefix}secondary-24`, -} - -export const formatColorForTheme = ( - color: null | UIColor, - alpha?: number -): string => { - if (isEmpty(color)) { - return ''; - } - - if (isSupportsOKLCH) { - return formatForOklchCSS(color.oklch, alpha); - } - - return notEmpty(alpha) ? formatHex8({ ...color.oklch, alpha }) : color.hex; -}; - -export const ThemeVariablesProvider = ({ - children, - theme, -}: Props): ReactElement => { - const styles = { - [ThemeVariablesKeys.bg]: formatColorForTheme(theme.bg), - [ThemeVariablesKeys.bgBorder]: formatColorForTheme(theme.bgBorder), - [ThemeVariablesKeys.borderOriginal]: formatColorForTheme( - theme.borderOriginal - ), - [ThemeVariablesKeys.fg]: formatColorForTheme(theme.fg), - [ThemeVariablesKeys.fg24]: formatColorForTheme(theme.fg, 0.24), - [ThemeVariablesKeys.fg70]: formatColorForTheme(theme.fg, 0.7), - [ThemeVariablesKeys.fgBorder]: formatColorForTheme(theme.fgBorder), - [ThemeVariablesKeys.secondary]: formatColorForTheme(theme.secondary), - [ThemeVariablesKeys.secondary12]: formatColorForTheme( - theme.secondary, - 0.12 - ), - [ThemeVariablesKeys.secondary16]: formatColorForTheme( - theme.secondary, - 0.16 - ), - [ThemeVariablesKeys.secondary24]: formatColorForTheme( - theme.secondary, - 0.24 - ), - }; - - return ( - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error -
- {children} -
- ); -}; diff --git a/src/ui/components/Tooltip.svelte b/src/ui/components/Tooltip.svelte new file mode 100644 index 0000000..431d719 --- /dev/null +++ b/src/ui/components/Tooltip.svelte @@ -0,0 +1,52 @@ + + + + +{#if showTooltip} +
+ {@render children()} +
+{/if} diff --git a/src/ui/components/Tooltip.tsx b/src/ui/components/Tooltip.tsx deleted file mode 100644 index e45ce5b..0000000 --- a/src/ui/components/Tooltip.tsx +++ /dev/null @@ -1,188 +0,0 @@ -import { - autoUpdate, - flip, - FloatingPortal, - offset, - type Placement, - shift, - useDismiss, - useFloating, - useFocus, - useHover, - useInteractions, - useMergeRefs, - useRole, -} from '@floating-ui/react'; -import { isEmpty } from '~utils/not-empty.ts'; -import { - cloneElement, - createContext, - forwardRef, - type HTMLProps, - isValidElement, - type ReactElement, - type ReactNode, - useContext, - useMemo, - useState, -} from 'react'; - -interface TooltipOptions { - initialOpen?: boolean; - onOpenChange?: (open: boolean) => void; - open?: boolean; - placement?: Placement; -} - -interface TooltipContextType { - floatingStyles: HTMLProps['style']; - getFloatingProps: ( - props?: HTMLProps - ) => HTMLProps; - getReferenceProps: ( - props?: HTMLProps - ) => HTMLProps; - open: boolean; - refs: { - setFloating: (node: HTMLElement | null) => void; - setReference: (node: HTMLElement | null) => void; - }; - setOpen: (open: boolean) => void; -} - -export const useTooltip = ({ - initialOpen = false, - onOpenChange: setControlledOpen, - open: controlledOpen, - placement = 'top', -}: TooltipOptions = {}): TooltipContextType => { - const [uncontrolledOpen, setUncontrolledOpen] = useState(initialOpen); - - const open = controlledOpen ?? uncontrolledOpen; - const setOpen = setControlledOpen ?? setUncontrolledOpen; - - const data = useFloating({ - middleware: [ - offset(5), - flip({ - crossAxis: placement.includes('-'), - fallbackAxisSideDirection: 'start', - padding: 5, - }), - shift({ padding: 5 }), - ], - onOpenChange: setOpen, - open, - placement, - whileElementsMounted: autoUpdate, - }); - - const context = data.context; - - const hover = useHover(context, { - delay: { - close: 0, - open: 150, - }, - enabled: isEmpty(controlledOpen), - move: false, - }); - const focus = useFocus(context, { - enabled: isEmpty(controlledOpen), - }); - const dismiss = useDismiss(context); - const role = useRole(context, { role: 'tooltip' }); - - const interactions = useInteractions([hover, focus, dismiss, role]); - - return useMemo( - () => ({ - open, - setOpen, - ...interactions, - ...data, - }), - [open, setOpen, interactions, data] - ); -}; - -type ContextType = null | ReturnType; - -const TooltipContext = createContext(null); - -export const useTooltipContext = (): ContextType => { - const context = useContext(TooltipContext); - - if (isEmpty(context)) { - throw new Error('Tooltip components must be wrapped in '); - } - - return context; -}; - -export const Tooltip = ({ - children, - ...options -}: { children: ReactNode } & TooltipOptions): ReactElement => { - const tooltip = useTooltip(options); - return ( - - {children} - - ); -}; - -export const TooltipTrigger = forwardRef< - HTMLButtonElement, - HTMLProps & { asChild?: boolean } ->(function TooltipTrigger({ asChild = false, children, ...props }, propRef) { - const context = useTooltipContext(); - const childrenRef = (children as any).ref; - const ref = useMergeRefs([context?.refs.setReference, propRef, childrenRef]); - - if (asChild && isValidElement(children)) { - return cloneElement( - children, - context?.getReferenceProps({ - ref, - ...props, - ...children.props, - 'data-state': context.open ? 'open' : 'closed', - }) - ); - } - - return ( - - {children} - - ); -}); - -export const TooltipContent = forwardRef< - HTMLDivElement, - HTMLProps ->(function TooltipContent({ style, ...props }, propRef) { - const context = useTooltipContext(); - const ref = useMergeRefs([context?.refs.setFloating, propRef]); - - if (context?.open === false) return null; - - return ( - -
- - ); -}); diff --git a/src/ui/components/UnprocessedBlendModesSelectionMessage.svelte b/src/ui/components/UnprocessedBlendModesSelectionMessage.svelte new file mode 100644 index 0000000..71bd403 --- /dev/null +++ b/src/ui/components/UnprocessedBlendModesSelectionMessage.svelte @@ -0,0 +1,10 @@ + + +

+ The blending mode Plus Darker is not supported +

diff --git a/src/ui/components/UnprocessedBlendModesSelectionMessage.tsx b/src/ui/components/UnprocessedBlendModesSelectionMessage.tsx deleted file mode 100644 index ba3b09d..0000000 --- a/src/ui/components/UnprocessedBlendModesSelectionMessage.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import layersImage from '~ui/assets/layers@2x.webp'; -import { type ReactElement } from 'react'; - -export const UnprocessedBlendModesSelectionMessage = (): ReactElement => { - return ( -

- The blending mode Plus Darker is not supported -

- ); -}; diff --git a/src/ui/components/WarningIcon.svelte b/src/ui/components/WarningIcon.svelte new file mode 100644 index 0000000..65016bf --- /dev/null +++ b/src/ui/components/WarningIcon.svelte @@ -0,0 +1,12 @@ + + + + + diff --git a/src/ui/components/WarningIcon.tsx b/src/ui/components/WarningIcon.tsx deleted file mode 100644 index 73a0b61..0000000 --- a/src/ui/components/WarningIcon.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { ThemeVariablesKeys } from '~ui/components/ThemeVariablesProvider.tsx'; -import { type ReactElement } from 'react'; - -export const WarningIcon = (): ReactElement => { - return ( - - - - ); -}; diff --git a/src/ui/index.html b/src/ui/index.html index c779351..a54296d 100644 --- a/src/ui/index.html +++ b/src/ui/index.html @@ -7,6 +7,6 @@
- + diff --git a/src/ui/index.tsx b/src/ui/index.tsx deleted file mode 100644 index e401bd8..0000000 --- a/src/ui/index.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { createRoot } from 'react-dom/client'; - -import { notEmpty } from '../utils/not-empty.ts'; -import { App } from './components/App'; -import './style.css'; - -document.addEventListener('DOMContentLoaded', function () { - const container = document.getElementById('root'); - - if (notEmpty(container)) { - const root = createRoot(container); - root.render(); - } else { - console.error('Failed to find container element for React root'); - } -}); diff --git a/src/ui/main.ts b/src/ui/main.ts new file mode 100644 index 0000000..d31227b --- /dev/null +++ b/src/ui/main.ts @@ -0,0 +1,19 @@ +import { mount } from 'svelte'; + +import { notEmpty } from '../utils/not-empty.ts'; +import App from './components/App.svelte'; +import './style.css'; + +const container = document.getElementById('root'); + +if (!notEmpty(container)) { + console.error('Failed to find container element for Svelte root'); +} + +const app = mount(App, { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + target: container!, +}); + +// eslint-disable-next-line import/no-default-export +export default app; diff --git a/src/ui/services/blend-modes/map-figma-blend-to-canvas.ts b/src/ui/services/blend-modes/map-figma-blend-to-canvas.ts index 8e96afc..07985c6 100644 --- a/src/ui/services/blend-modes/map-figma-blend-to-canvas.ts +++ b/src/ui/services/blend-modes/map-figma-blend-to-canvas.ts @@ -1,10 +1,11 @@ +import type { Properties } from 'csstype'; + import { notEmpty } from '~utils/not-empty.ts'; -import { type CSSProperties } from 'react'; export const mapFigmaBlendToCanvas = ( figmaBlend?: BlendMode -): CSSProperties['mixBlendMode'] => { - const mapping: Record = { +): Properties['mixBlendMode'] => { + const mapping: Record = { COLOR: 'color', COLOR_BURN: 'color-burn', COLOR_DODGE: 'color-dodge', diff --git a/src/ui/services/blend/format-color-data.ts b/src/ui/services/blend/format-color-data.ts index ae024ac..67e1850 100644 --- a/src/ui/services/blend/format-color-data.ts +++ b/src/ui/services/blend/format-color-data.ts @@ -1,6 +1,6 @@ import { formatHex, modeOklch, type Oklch, useMode } from 'culori/fn'; -const convertToOklch = useMode(modeOklch) +const convertToOklch = useMode(modeOklch); export const formatColorData = ( color: RGB, diff --git a/src/ui/services/css/transformStyleObjectToString.ts b/src/ui/services/css/transformStyleObjectToString.ts new file mode 100644 index 0000000..a4bef2b --- /dev/null +++ b/src/ui/services/css/transformStyleObjectToString.ts @@ -0,0 +1,12 @@ +export const styleObjectToCssString = ( + styleObject: Record +): string => { + let cssString = ''; + for (const property in styleObject) { + if (Object.prototype.hasOwnProperty.call(styleObject, property)) { + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + cssString += `${property}: ${styleObject[property]}; `; + } + } + return cssString.trim(); +}; diff --git a/src/ui/services/format/format-color-for-theme.ts b/src/ui/services/format/format-color-for-theme.ts new file mode 100644 index 0000000..ac64a92 --- /dev/null +++ b/src/ui/services/format/format-color-for-theme.ts @@ -0,0 +1,20 @@ +import { type UIColor } from '~types/common.ts'; +import { isSupportsOKLCH } from '~ui/constants.ts'; +import { formatForOklchCSS } from '~utils/colors/formatters.ts'; +import { isEmpty, notEmpty } from '~utils/not-empty.ts'; +import { formatHex8 } from 'culori/fn'; + +export const formatColorForTheme = ( + color: null | UIColor, + alpha?: number +): string => { + if (isEmpty(color)) { + return ''; + } + + if (isSupportsOKLCH) { + return formatForOklchCSS(color.oklch, alpha); + } + + return notEmpty(alpha) ? formatHex8({ ...color.oklch, alpha }) : color.hex; +}; diff --git a/src/ui/services/use-copy-to-clipboard/useCopyToClipboard.ts b/src/ui/services/use-copy-to-clipboard/useCopyToClipboard.ts new file mode 100644 index 0000000..f1fafd9 --- /dev/null +++ b/src/ui/services/use-copy-to-clipboard/useCopyToClipboard.ts @@ -0,0 +1,164 @@ +import { on } from 'svelte/events'; + +interface ActionReturn< + Parameter = undefined, + Attributes extends Record = Record, +> { + $$_attributes?: Attributes; + destroy?: () => void; + update?: (parameter: Parameter) => void; +} + +export interface TextResolverInput { + event: HTMLElementEventMap[K]; + node: HTMLElement; + trigger: HTMLElement; +} + +export type TextResolver = ( + input: TextResolverInput +) => Promise | string; + +export interface CopyConfig { + enabled: boolean; + event: K | K[]; + synthetic: boolean; + text: string | TextResolver; + trigger: HTMLElement; +} + +export interface CopyAttributes { + oncopied?: (event: CustomEvent) => void; +} + +export type CopyReturn = ActionReturn< + CopyParameter, + CopyAttributes +>; + +type CopyParameter = + | Partial> + | undefined; + +export interface CopyDetail { + text: string; +} + +const copyToClipboard = function (text: string): Promise | undefined { + try { + return navigator.clipboard.writeText(text); + } catch { + const element = document.createElement('textarea'); + + element.value = text; + + element.setAttribute('readonly', ''); + + element.style.contain = 'strict'; + element.style.position = 'absolute'; + element.style.left = '-9999px'; + element.style.fontSize = '12pt'; // Prevent zooming on iOS + + const selection = document.getSelection(); + const originalRange = + selection != null + ? selection.rangeCount > 0 && selection.getRangeAt(0) + : null; + + document.body.appendChild(element); + element.select(); + + element.selectionStart = 0; + element.selectionEnd = text.length; + + document.execCommand('copy'); + document.body.removeChild(element); + + if (Boolean(originalRange) && selection != null) { + selection.removeAllRanges(); // originalRange can't be truthy when selection is falsy + selection.addRange(originalRange as Range); + } + } +}; + +export const copy = function ( + node: HTMLElement, + parameter: CopyParameter = {} +): CopyReturn { + let { enabled, events, synthetic, text, trigger } = resolveConfig( + node, + parameter + ); + + const handler = async function (e: HTMLElementEventMap[K]): Promise { + const rText = await text({ event: e, node, trigger }); + await copyToClipboard(rText); + + const detail: CopyDetail = { text: rText }; + node.dispatchEvent(new CustomEvent('copied', { detail })); + + if (synthetic) { + const clipboardData = new DataTransfer(); + clipboardData.setData('text/plain', rText); + /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */ + const event = new ClipboardEvent('copy', { + clipboardData, + data: rText, + dataType: 'text/plain', + } as ClipboardEventInit); + node.dispatchEvent(event); + } + }; + + let offs: Array<() => void> = []; + + const addEvents = function (): void { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + offs = events.map((event) => on(trigger, event as K, handler)); + }; + + const removeEvents = function (): void { + offs.forEach((unsub) => { + unsub(); + }); + offs = []; + }; + + if (enabled) addEvents(); + + return { + destroy() { + removeEvents(); + }, + update(update: CopyParameter = {}) { + removeEvents(); + ({ enabled, events, synthetic, text, trigger } = resolveConfig( + node, + update + )); + addEvents(); + }, + }; +}; + +const resolveConfig = function ( + node: HTMLElement, + param: CopyParameter = {} +): { + enabled: boolean; + events: Array<'click'> | K[]; + synthetic: boolean; + text: TextResolver; + trigger: HTMLElement; +} { + const { enabled = true, synthetic = false, trigger = node } = param; + const text = + typeof param.text === 'function' + ? param.text + : () => param.text ?? node.innerText; + const events = + typeof param.event === 'string' + ? [param.event] + : (param.event ?? ['click']); + return { enabled, events, synthetic, text: text as TextResolver, trigger }; +}; diff --git a/src/ui/stores/color-space-display-mode.ts b/src/ui/stores/color-space-display-mode.ts index dd3255d..b01ac31 100644 --- a/src/ui/stores/color-space-display-mode.ts +++ b/src/ui/stores/color-space-display-mode.ts @@ -10,12 +10,12 @@ import { ColorSpaceDisplayModes } from '../../constants.ts'; export const colorSpaceDisplayModesList = Object.values(ColorSpaceDisplayModes); -export const $colorSpaceDisplayMode = atom( +export const colorSpaceDisplayMode = atom( ColorSpaceDisplayModes.OKLCH ); export const changeColorSpaceDisplayMode = (): void => { - const previous = $colorSpaceDisplayMode.get(); + const previous = colorSpaceDisplayMode.get(); const previousIndex = colorSpaceDisplayModesList.findIndex( (mode) => mode === previous @@ -28,10 +28,10 @@ export const changeColorSpaceDisplayMode = (): void => { const nextValue = colorSpaceDisplayModesList[nextIndex]; - if (nextValue) $colorSpaceDisplayMode.set(nextValue); + if (nextValue) colorSpaceDisplayMode.set(nextValue); }; -onSet($colorSpaceDisplayMode, (mode) => { +onSet(colorSpaceDisplayMode, (mode) => { parent.postMessage( { pluginMessage: { @@ -45,7 +45,7 @@ onSet($colorSpaceDisplayMode, (mode) => { ); }); -onMount($colorSpaceDisplayMode, () => { +onMount(colorSpaceDisplayMode, () => { const addMessageListener = ( event: MessageEvent> ): void => { @@ -53,7 +53,7 @@ onMount($colorSpaceDisplayMode, () => { event.data?.pluginMessage.type === MessageTypes.ColorSpaceDisplayModeChange ) { - $colorSpaceDisplayMode.set( + colorSpaceDisplayMode.set( event.data.pluginMessage.payload.colorSpaceDisplayMode ); } diff --git a/src/ui/stores/selected-nodes.ts b/src/ui/stores/selected-nodes.ts index f20cf37..442dc58 100644 --- a/src/ui/stores/selected-nodes.ts +++ b/src/ui/stores/selected-nodes.ts @@ -12,53 +12,56 @@ import { import { isEmpty, notEmpty } from '~utils/not-empty.ts'; import { atom, computed, map, onMount, onSet } from 'nanostores'; -export const $userSelection = atom({ +export const userSelection = atom({ colorSpace: 'SRGB', selectedNodePairs: [], }); -export const $contrastConclusion = atom([]); +export const contrastConclusion = atom([]); -export const $isP3 = computed($userSelection, (selection) => { +export const isP3 = computed(userSelection, (selection) => { return 'colorSpace' in selection ? selection.colorSpace === 'DISPLAY_P3' : false; }); -export const $isMultiSelection = computed($userSelection, (selection) => { +export const isMultiSelection = computed(userSelection, (selection) => { return 'selectedNodePairs' in selection ? selection.selectedNodePairs.length > 1 : false; }); -export const $isInvalidBackground = computed($userSelection, (selection) => { +export const isSingleSelection = computed(userSelection, (selection) => { + return 'selectedNodePairs' in selection + ? selection.selectedNodePairs.length === 1 + : false; +}); + +export const isInvalidBackground = computed(userSelection, (selection) => { return ( 'text' in selection && selection.text === SelectionMessageTypes.invalidBackground ); }); -export const $isUnprocessedBlendModes = computed( - $userSelection, - (selection) => { - return ( - 'text' in selection && - selection.text === SelectionMessageTypes.unprocessedBlendModes - ); - } -); +export const isUnprocessedBlendModes = computed(userSelection, (selection) => { + return ( + 'text' in selection && + selection.text === SelectionMessageTypes.unprocessedBlendModes + ); +}); -export const $isEmptySelection = computed( - $contrastConclusion, +export const isEmptySelection = computed( + contrastConclusion, (selection) => selection?.length === 0 ); -onMount($userSelection, () => { +onMount(userSelection, () => { const addMessageListener = ( event: MessageEvent> ): void => { if (event.data?.pluginMessage.type === MessageTypes.SelectionChange) { - $userSelection.set(event.data.pluginMessage.payload); + userSelection.set(event.data.pluginMessage.payload); } }; @@ -69,13 +72,13 @@ onMount($userSelection, () => { }; }); -onSet($contrastConclusion, ({ newValue }) => { +onSet(contrastConclusion, ({ newValue }) => { if (isEmpty(newValue)) return; setRewardAnimationLaunch(newValue); }); -onSet($userSelection, ({ newValue }) => { +onSet(userSelection, ({ newValue }) => { const start = async (): Promise => { if ('selectedNodePairs' in newValue) { const res = await blendColors( @@ -83,14 +86,14 @@ onSet($userSelection, ({ newValue }) => { newValue.colorSpace ); - if (notEmpty(res)) $contrastConclusion.set(res); + if (notEmpty(res)) contrastConclusion.set(res); } }; void start(); }); -export const $rewardAnimationLaunch = map<{ +export const rewardAnimationLaunch = map<{ bodyText: boolean | null; contentText: boolean | null; fluentText: boolean | null; @@ -103,9 +106,9 @@ export const $rewardAnimationLaunch = map<{ const setRewardAnimationLaunch = ( contrastConclusionList: ContrastConclusionList ): void => { - const prevId = $contrastConclusion.get()?.[0]?.id; + const prevId = contrastConclusion.get()?.[0]?.id; const newId = contrastConclusionList?.[0]?.id; - const prevApca = $contrastConclusion.get()?.[0]?.apca; + const prevApca = contrastConclusion.get()?.[0]?.apca; const newApca = contrastConclusionList?.[0]?.apca; if (isEmpty(newId) || isEmpty(prevId) || newId !== prevId) return; @@ -118,10 +121,10 @@ const setRewardAnimationLaunch = ( formattedPrevApca < conclusions['Content Text'] && formattedNewApca >= conclusions['Content Text'] ) { - $rewardAnimationLaunch.setKey('contentText', true); + rewardAnimationLaunch.setKey('contentText', true); setTimeout(() => { - $rewardAnimationLaunch.setKey('contentText', null); + rewardAnimationLaunch.setKey('contentText', null); }, 1000); } @@ -129,10 +132,10 @@ const setRewardAnimationLaunch = ( formattedPrevApca < conclusions['Body Text'] && formattedNewApca >= conclusions['Body Text'] ) { - $rewardAnimationLaunch.setKey('bodyText', true); + rewardAnimationLaunch.setKey('bodyText', true); setTimeout(() => { - $rewardAnimationLaunch.setKey('bodyText', null); + rewardAnimationLaunch.setKey('bodyText', null); }, 1000); } @@ -140,10 +143,10 @@ const setRewardAnimationLaunch = ( formattedPrevApca < conclusions['Fluent Text'] && formattedNewApca >= conclusions['Fluent Text'] ) { - $rewardAnimationLaunch.setKey('fluentText', true); + rewardAnimationLaunch.setKey('fluentText', true); setTimeout(() => { - $rewardAnimationLaunch.setKey('fluentText', null); + rewardAnimationLaunch.setKey('fluentText', null); }, 1000); } }; diff --git a/src/ui/style.css b/src/ui/style.css index 3b5ed2f..8d2823a 100644 --- a/src/ui/style.css +++ b/src/ui/style.css @@ -63,8 +63,8 @@ @layer utilities { .interactive:not(:disabled) { - @apply outline-offset-[1px] outline-2; - @apply focus:outline focus:outline-focus; + @apply outline-2 outline-offset-[1px]; + @apply focus:outline; } .interactive:not(:focus-visible):focus { diff --git a/src/ui/svelte.config.js b/src/ui/svelte.config.js new file mode 100644 index 0000000..3bce8ea --- /dev/null +++ b/src/ui/svelte.config.js @@ -0,0 +1,7 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; + +export default { + // Consult https://svelte.dev/docs#compile-time-svelte-preprocess + // for more information about preprocessors + preprocess: vitePreprocess(), +}; diff --git a/src/ui/types/index.ts b/src/ui/types/index.ts index 2b2a26f..7df7f08 100644 --- a/src/ui/types/index.ts +++ b/src/ui/types/index.ts @@ -6,3 +6,19 @@ export interface ContrastConclusion { fg: { hex: string; isBlended: boolean; oklch: Oklch }; id: string; } + +const prefix = '--polychrom-theme-'; + +export enum ThemeVariablesKeys { + bg = `${prefix}bg`, + bgBorder = `${prefix}bg-border`, + borderOriginal = `${prefix}border-original`, + fg = `${prefix}fg`, + fg24 = `${prefix}fg-24`, + fg70 = `${prefix}fg-70`, + fgBorder = `${prefix}fg-border`, + secondary = `${prefix}secondary`, + secondary12 = `${prefix}secondary-12`, + secondary16 = `${prefix}secondary-16`, + secondary24 = `${prefix}secondary-24`, +} diff --git a/src/utils/colors/formatters.ts b/src/utils/colors/formatters.ts index 19a02e0..dd9409d 100644 --- a/src/utils/colors/formatters.ts +++ b/src/utils/colors/formatters.ts @@ -30,10 +30,7 @@ export const convert255ScaleRGBtoDecimal = (color: { }; export const formatForOklchDisplay = (oklch: Oklch): string => { - return `${toPercent(oklch.l)} ${clearValue(oklch.c)} ${clearValue( - oklch.h ?? 0, - 1 - )}`; + return `${toPercent(oklch.l)} ${clearValue(oklch.c)} ${clearValue(oklch.h ?? 0, 1)}`; }; export const formatForRgbDisplay = (oklch: Oklch): string => { @@ -68,10 +65,7 @@ export const formatForOklchCSS = (color: Oklch, opacity?: number): string => { postfix = ` / ${toPercent(opacity)}`; } - return `oklch(${toPercent(l)} ${clearValue(c, 3)} ${clearValue( - h ?? 0, - 1 - )}${postfix})`; + return `oklch(${toPercent(l)} ${clearValue(c, 3)} ${clearValue(h ?? 0, 1)}${postfix})`; }; export const formatForRGBCSS = (color: Oklch, opacity?: number): string => { diff --git a/tailwind.config.js b/tailwind.config.js index 8ca8ee1..c12e18a 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -3,7 +3,7 @@ const plugin = require('tailwindcss/plugin'); /** @type {import('tailwindcss').Config} */ module.exports = { darkMode: ['class', '.figma-dark'], - content: ['./index.html', './src/**/*.{js,ts,jsx,tsx,svg}'], + content: ['./index.html', './src/**/*.{js,ts,svg,svelte}'], plugins: [ plugin(function ({ matchUtilities, theme }) { matchUtilities( diff --git a/tsconfig.json b/tsconfig.json index 5cc2254..21ea543 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,5 @@ { + "extends": "@tsconfig/svelte/tsconfig.json", "compilerOptions": { "target": "ES2015", "useDefineForClassFields": true, @@ -10,9 +11,11 @@ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "resolveJsonModule": true, - "isolatedModules": true, "noEmit": true, - "jsx": "react-jsx", + "allowJs": true, + "checkJs": true, + "isolatedModules": true, + "moduleDetection": "force", "noUncheckedIndexedAccess": true, @@ -32,5 +35,6 @@ } }, "include": ["src"], + "exclude": ["src/ui/coverage/**"], "references": [{ "path": "./tsconfig.node.json" }] } diff --git a/tsconfig.node.json b/tsconfig.node.json index 42872c5..20d1b13 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -3,8 +3,21 @@ "composite": true, "skipLibCheck": true, "module": "ESNext", + "allowSyntheticDefaultImports": true, + + /* Bundler mode */ "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true }, "include": ["vite.config.ts"] } diff --git a/vite.config.ui.ts b/vite.config.ui.ts index 2e1467e..620af18 100644 --- a/vite.config.ui.ts +++ b/vite.config.ui.ts @@ -1,9 +1,8 @@ /// import { defineConfig } from 'vite'; import { resolve } from 'path'; -import react from '@vitejs/plugin-react'; +import { svelte } from '@sveltejs/vite-plugin-svelte'; import { viteSingleFile } from 'vite-plugin-singlefile'; -import svgr from 'vite-plugin-svgr'; export default defineConfig({ resolve: { @@ -14,7 +13,7 @@ export default defineConfig({ '~utils': resolve(__dirname, 'src', 'utils'), }, }, - plugins: [react(), svgr(), viteSingleFile()], + plugins: [svelte(), viteSingleFile()], root: './src/ui', build: { emptyOutDir: false,