diff --git a/.github/ISSUE_TEMPLATE/02-bug_report.yml b/.github/ISSUE_TEMPLATE/02-bug_report.yml index 8a3c739f0..871efdfbe 100644 --- a/.github/ISSUE_TEMPLATE/02-bug_report.yml +++ b/.github/ISSUE_TEMPLATE/02-bug_report.yml @@ -31,6 +31,7 @@ body: - label: "@tabler/icons-react-native" - label: "@tabler/icons-solid" - label: "@tabler/icons-svelte" + - label: "@tabler/icons-svelte-runes" - label: "@tabler/icons-vue" - label: Figma plugin - label: source/main diff --git a/.github/labeler.yml b/.github/labeler.yml index ec06d908d..551b2ece9 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -38,12 +38,18 @@ - any-glob-to-any-file: - 'packages/icons-preact/*' -# For Svelte package +# For Svelte 4 and below package 🔗 svelte package: - changed-files: - any-glob-to-any-file: - 'packages/icons-svelte/*' +# For Svelte 5 package +🔗 svelte-runes package: + - changed-files: + - any-glob-to-any-file: + - 'packages/icons-svelte-runes/*' + # For SolidJS package 🔗 solid package: - changed-files: diff --git a/README.md b/README.md index b594da7cf..d16e09f93 100644 --- a/README.md +++ b/README.md @@ -232,7 +232,7 @@ After importing the _IconsModule_ in your feature or shared module, use the icon For more usage documentation refer to [the official documentation](https://github.com/pierreavn/angular-tabler-icons). -### Svelte +### Svelte 4 and below Svelte components available through [`@tabler/icons-svelte`](https://github.com/tabler/tabler-icons/tree/master/packages/icons-svelte) package. @@ -248,6 +248,21 @@ Svelte components available through [`@tabler/icons-svelte`](https://github.com/ ``` +### Svelte 5 +Svelte 5 components available through [`@tabler/icons-svelte-runes`](https://www.npmjs.com/package/@tabler/icons-svelte-runes) package. + +```js + + +
+ + + +
+``` + ## CDN All files included in `@tabler/icons` npm package are available over a CDN. diff --git a/docs/icons/svelte-runes.mdx b/docs/icons/svelte-runes.mdx new file mode 100644 index 000000000..fe0bebae2 --- /dev/null +++ b/docs/icons/svelte-runes.mdx @@ -0,0 +1,40 @@ +--- +title: Tabler Icons for Svelte 5 +--- + +![](https://raw.githubusercontent.com/tabler/tabler-icons/master/.github/packages/og-package-svelte.png) + +## Installation + + + +or just [download from Github](https://github.com/tabler/tabler-icons/releases). + +## How to use + +It's build with ESmodules so it's completely tree-shakable. Each icon can be imported as a component. + +```sveltehtml + + +
+ +
+``` + +You can pass additional props to adjust the icon. + +```html + +``` + +### Props + +| name | type | default | +| ------------- | -------- | ------------ | +| `size` | _Number_ | 24 | +| `color` | _String_ | currentColor | +| `stroke` | _Number_ | 2 | +| `class` | _String_ | | diff --git a/package.json b/package.json index 8e640b81e..56b572637 100644 --- a/package.json +++ b/package.json @@ -33,13 +33,14 @@ "validate": "node ./.build/validate-icons.mjs", "release": "git pull && release-it --verbose", "build:copy": "rm -rf ./icons && mkdir ./icons && cp ./_site/tags.json tags.json && cp ./_site/icons/* ./icons/ && rm -rf ./_site/", - "build:packages": "pnpm run build:icons && pnpm run build:sprite && pnpm run build:react && pnpm run build:react-native && pnpm run build:preact && pnpm run build:solidjs && pnpm run build:svelte && pnpm run build:vue && pnpm run build:png && pnpm run build:pdf && pnpm run build:esp && pnpm run build:webfont", + "build:packages": "pnpm run build:icons && pnpm run build:sprite && pnpm run build:react && pnpm run build:react-native && pnpm run build:preact && pnpm run build:solidjs && pnpm run build:svelte && pnpm run build:svelte-runes && pnpm run build:vue && pnpm run build:png && pnpm run build:pdf && pnpm run build:esp && pnpm run build:webfont", "build:icons": "pnpm --filter @tabler/icons build", "build:react": "pnpm --filter @tabler/icons-react build", "build:react-native": "pnpm --filter @tabler/icons-react-native build", "build:preact": "pnpm --filter @tabler/icons-preact build", "build:solidjs": "pnpm --filter @tabler/icons-solidjs build", "build:svelte": "pnpm --filter @tabler/icons-svelte build", + "build:svelte-runes": "pnpm --filter @tabler/icons-svelte-runes build", "build:vue": "pnpm --filter @tabler/icons-vue build", "build:png": "pnpm --filter @tabler/icons-png build", "build:pdf": "pnpm --filter @tabler/icons-pdf build", diff --git a/packages/icons-svelte-runes/.gitignore b/packages/icons-svelte-runes/.gitignore new file mode 100644 index 000000000..bf11120f6 --- /dev/null +++ b/packages/icons-svelte-runes/.gitignore @@ -0,0 +1,4 @@ +src/icons/*.svelte +.svelte-kit +src/aliases.ts +src/icons-list.ts diff --git a/packages/icons-svelte-runes/README.md b/packages/icons-svelte-runes/README.md new file mode 100644 index 000000000..edfb7727f --- /dev/null +++ b/packages/icons-svelte-runes/README.md @@ -0,0 +1,207 @@ +# Tabler Icons for Svelte (Runes) + +

+ Tabler Icons +

+ +

+Implementation of the Tabler Icons library for Svelte 5+ using the new runes reactivity system. +

+ +

+ Browse all icons at tabler-icons.io → +

+ +

+ Latest Release + License +

+ +## Why This Package? + +This package is specifically built for **Svelte 5+** using the new **runes** reactivity system (`$props()`, `$derived`, etc.). + +- **For Svelte 5+ projects:** Use this package (`@tabler/icons-svelte-runes`) +- **For Svelte 3/4 projects:** Use [`@tabler/icons-svelte`](https://www.npmjs.com/package/@tabler/icons-svelte) + +## Installation + +```bash +pnpm add @tabler/icons-svelte-runes +``` + +or + +```bash +npm install @tabler/icons-svelte-runes +``` + +or + +```bash +yarn add @tabler/icons-svelte-runes +``` + +## Requirements + +- **Svelte 5.0+** with runes enabled +- For older Svelte versions, use `@tabler/icons-svelte` instead + +## Usage + +It's built with ES modules so it's completely tree-shakable. Each icon can be imported as a component. + +```svelte + + + +``` + +You can pass additional props to adjust the icon: + +```svelte + +``` + +### Props + +| name | type | default | +| -------- | ------------------ | ------------ | +| `size` | `number \| string` | 24 | +| `color` | `string` | currentColor | +| `stroke` | `number \| string` | 2 | +| `class` | `string` | '' | + +All other HTML attributes are forwarded to the SVG element. + +## TypeScript Support + +The package includes full TypeScript definitions. Icons are typed as Svelte 5 `Component`: + +```typescript +import type { Icon } from '@tabler/icons-svelte-runes'; +import { IconHeart } from '@tabler/icons-svelte-runes'; + +// Icon is compatible with Svelte 5's Component type +const MyIcon: Icon = IconHeart; +``` + +### Using Icons in Props + +When passing icons as props, use the `Component` type or `any` for maximum compatibility: + +```svelte + + + +``` + +## Examples + +### Basic Icon Usage + +```svelte + + + + + +``` + +### Dynamic Icons with Runes + +```svelte + + + + + + + +``` + +### Reactive Size with $derived + +```svelte + + + + +``` + +## Migrating from @tabler/icons-svelte + +The API is identical, just change the package name: + +```diff +- import { IconHeart } from '@tabler/icons-svelte'; ++ import { IconHeart } from '@tabler/icons-svelte-runes'; +``` + +No other changes needed! Your existing props and usage remain the same. + +## What's Different from @tabler/icons-svelte? + +Internally, this package uses Svelte 5's new features: + +- `$props()` instead of `export let` +- `$derived` for computed values +- Modern TypeScript `Component` type +- Optimized for Svelte 5's fine-grained reactivity + +**Result:** Better performance and smaller bundle sizes in Svelte 5 projects! + +## Sponsors + +**If you want to support this project, you can [become a sponsor on GitHub](https://github.com/sponsors/codecalm) or just [donate on PayPal](https://paypal.me/codecalm) :)** + + + Tabler sponsors + + +## Contributing + +For more info on how to contribute please see the [contribution guidelines](https://github.com/tabler/tabler-icons/blob/main/CONTRIBUTING.md). + +Caught a mistake or want to contribute to the documentation? [Edit this page on Github](https://github.com/tabler/tabler-icons/blob/main/packages/icons-svelte-runes/README.md) + +## License + +Tabler Icons is licensed under the [MIT License](https://github.com/tabler/tabler-icons/blob/master/LICENSE). + +## Sponsor Tabler + +Sponsor Tabler diff --git a/packages/icons-svelte-runes/build.mjs b/packages/icons-svelte-runes/build.mjs new file mode 100644 index 000000000..6631f8c86 --- /dev/null +++ b/packages/icons-svelte-runes/build.mjs @@ -0,0 +1,41 @@ +#!/usr/bin/env node + +import { buildJsIcons, buildIconsList } from '../../.build/build-icons.mjs'; + +const componentTemplate = ({ type, name, children, stringify }) => { + return `\ + + +`; +}; + +const aliasTemplate = ({ fromPascal, to }) => + `export { default as Icon${fromPascal} } from './icons/${to}.svelte';\n`; + +const indexItemTemplate = ({ name, namePascal }) => + `export { default as Icon${namePascal} } from './${name}.svelte';`; + +buildJsIcons({ + name: 'icons-svelte-runes', + componentTemplate, + indexItemTemplate, + aliasTemplate, + extension: 'svelte', + key: false, + indexFile: 'index.ts', + pascalName: false, +}); + +buildIconsList('icons-svelte-runes'); diff --git a/packages/icons-svelte-runes/package.json b/packages/icons-svelte-runes/package.json new file mode 100644 index 000000000..cbf438d13 --- /dev/null +++ b/packages/icons-svelte-runes/package.json @@ -0,0 +1,83 @@ +{ + "name": "@tabler/icons-svelte-runes", + "version": "1.0.0", + "license": "MIT", + "author": "codecalm", + "description": "A set of free MIT-licensed high-quality SVG icons for Svelte 5+ using runes", + "homepage": "https://tabler-icons.io", + "bugs": { + "url": "https://github.com/tabler/tabler-icons/issues" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tabler/tabler-icons.git", + "directory": "packages/icons-svelte-runes" + }, + "svelte": "./dist/tabler-icons-svelte-runes.js", + "types": "./dist/tabler-icons-svelte-runes.d.ts", + "type": "module", + "amdName": "TablerIconsSvelteRunes", + "exports": { + ".": { + "types": "./dist/tabler-icons-svelte-runes.d.ts", + "svelte": "./dist/tabler-icons-svelte-runes.js", + "default": "./dist/tabler-icons-svelte-runes.js" + }, + "./icons": { + "types": "./dist/tabler-icons-svelte-runes.d.ts", + "svelte": "./dist/tabler-icons-svelte-runes.js" + }, + "./icons/*": { + "types": "./dist/icons/*.svelte.d.ts", + "svelte": "./dist/icons/*.svelte" + } + }, + "sideEffects": false, + "files": [ + "dist" + ], + "keywords": [ + "svelte", + "svelte5", + "runes", + "icons", + "svg", + "tabler", + "tabler-icons", + "svelte-runes", + "ui" + ], + "scripts": { + "build": "pnpm run clean && pnpm run copy:license && pnpm run build:icons && pnpm run build:package", + "build:icons": "node build.mjs", + "build:package": "svelte-package --input ./src", + "copy:license": "cp ../../LICENSE ./LICENSE", + "clean": "rm -rf dist && find . ! -name '.gitkeep' -path '*/src/icons/*' -exec rm -rf {} +", + "test": "vitest run", + "imports-check": "attw $(npm pack)" + }, + "dependencies": { + "@tabler/icons": "3.35.0" + }, + "devDependencies": { + "@sveltejs/package": "^2.3.7", + "@sveltejs/vite-plugin-svelte": "^5.0.3", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/svelte": "^5.2.9", + "@tsconfig/svelte": "^5.0.4", + "jest-serializer-html": "^7.1.0", + "jsdom": "^25.0.1", + "svelte": "^5.0.0", + "svelte-check": "^4.3.4", + "typescript": "^5.7.3", + "vite": "^7.2.7", + "vitest": "^3.0.8" + }, + "peerDependencies": { + "svelte": "^5.0.0" + } +} diff --git a/packages/icons-svelte-runes/setupVitest.ts b/packages/icons-svelte-runes/setupVitest.ts new file mode 100644 index 000000000..27e437b23 --- /dev/null +++ b/packages/icons-svelte-runes/setupVitest.ts @@ -0,0 +1,9 @@ +import { expect } from 'vitest'; +import * as matchers from '@testing-library/jest-dom/matchers'; +import htmlSerializer from 'jest-serializer-html'; + +// Extend Vitest's expect with jest-dom matchers +expect.extend(matchers); + +// Add HTML serializer for snapshots +expect.addSnapshotSerializer(htmlSerializer); diff --git a/packages/icons-svelte-runes/src/Icon.svelte b/packages/icons-svelte-runes/src/Icon.svelte new file mode 100644 index 000000000..5e2a5b3b6 --- /dev/null +++ b/packages/icons-svelte-runes/src/Icon.svelte @@ -0,0 +1,53 @@ + + + + {#each iconNode as [tag, attrs]} + + {/each} + {#if children} + {@render children()} + {/if} + diff --git a/packages/icons-svelte-runes/src/defaultAttributes.ts b/packages/icons-svelte-runes/src/defaultAttributes.ts new file mode 100644 index 000000000..70bf935db --- /dev/null +++ b/packages/icons-svelte-runes/src/defaultAttributes.ts @@ -0,0 +1,25 @@ +import type { Attrs } from "./types.js"; + +const defaultAttributes: Record<"outline" | "filled", Attrs> = { + outline: { + xmlns: 'http://www.w3.org/2000/svg', + width: 24, + height: 24, + viewBox: '0 0 24 24', + fill: 'none', + stroke: 'currentColor', + 'stroke-width': 2, + 'stroke-linecap': 'round', + 'stroke-linejoin': 'round', + }, + filled: { + xmlns: 'http://www.w3.org/2000/svg', + width: 24, + height: 24, + viewBox: '0 0 24 24', + fill: 'currentColor', + stroke: 'none' + }, +}; + +export default defaultAttributes; diff --git a/packages/icons-svelte-runes/src/icons/.gitkeep b/packages/icons-svelte-runes/src/icons/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/icons-svelte-runes/src/tabler-icons-svelte-runes.ts b/packages/icons-svelte-runes/src/tabler-icons-svelte-runes.ts new file mode 100644 index 000000000..4453d1a90 --- /dev/null +++ b/packages/icons-svelte-runes/src/tabler-icons-svelte-runes.ts @@ -0,0 +1,7 @@ +export * from './icons/index.js'; +export * as icons from './icons/index.js'; +export * as iconsList from './icons-list.js'; +export * from './aliases.js'; +export { default as defaultAttributes } from './defaultAttributes.js'; + +export type { Icon } from './types.js'; diff --git a/packages/icons-svelte-runes/src/types.ts b/packages/icons-svelte-runes/src/types.ts new file mode 100644 index 000000000..555bee76d --- /dev/null +++ b/packages/icons-svelte-runes/src/types.ts @@ -0,0 +1,17 @@ +import type { Component, Snippet } from 'svelte'; +import type { SVGAttributes, SvelteHTMLElements } from 'svelte/elements'; + +export type Attrs = SVGAttributes; + +export type IconNode = [elementName: keyof SvelteHTMLElements, attrs: Attrs][]; + +export interface IconProps extends Omit { + color?: string; + size?: number | string; + stroke?: number | string; + class?: string; + children?: Snippet; +} + +// Svelte 5 compatible icon type +export type Icon = Component; diff --git a/packages/icons-svelte-runes/svelte.config.js b/packages/icons-svelte-runes/svelte.config.js new file mode 100644 index 000000000..6005ca8b3 --- /dev/null +++ b/packages/icons-svelte-runes/svelte.config.js @@ -0,0 +1,8 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; + +export default { + preprocess: vitePreprocess(), + compilerOptions: { + runes: true, + }, +}; diff --git a/packages/icons-svelte-runes/test.spec.js b/packages/icons-svelte-runes/test.spec.js new file mode 100644 index 000000000..8ffa85257 --- /dev/null +++ b/packages/icons-svelte-runes/test.spec.js @@ -0,0 +1,132 @@ +import { describe, it, expect, afterEach } from 'vitest'; +import { render, cleanup } from '@testing-library/svelte'; +import { IconAccessible, IconAccessibleFilled } from './src/tabler-icons-svelte-runes.js'; + +describe('Svelte Runes Icon component', () => { + afterEach(() => cleanup()); + + it('should render icon component', () => { + const { container } = render(IconAccessible); + expect(container.getElementsByTagName('svg').length).toBeGreaterThan(0); + }); + + it('should add a class to the element', () => { + const { container } = render(IconAccessible, { + props: { + class: 'test-class', + }, + }); + + const svg = container.getElementsByTagName('svg')[0]; + + expect(svg).toHaveClass('test-class'); + expect(svg).toHaveClass('tabler-icon'); + expect(svg).toHaveClass('tabler-icon-accessible'); + }); + + it('should add a style attribute to the element', () => { + const { container } = render(IconAccessible, { + props: { + style: 'color: red', + }, + }); + + const svg = container.getElementsByTagName('svg')[0]; + + expect(svg).toHaveStyle('color: rgb(255, 0, 0)'); + }); + + it('should update svg attributes when there are props passed to the component', () => { + const { container } = render(IconAccessible, { + props: { + size: 48, + color: 'red', + stroke: 4, + }, + }); + + const svg = container.getElementsByTagName('svg')[0]; + + expect(svg.getAttribute('width')).toBe('48'); + expect(svg.getAttribute('stroke')).toBe('red'); + expect(svg.getAttribute('stroke-width')).toBe('4'); + }); + + it('should accept stroke as a number', () => { + const { container } = render(IconAccessible, { + props: { + stroke: 3, + }, + }); + + const svg = container.getElementsByTagName('svg')[0]; + + expect(svg.getAttribute('stroke-width')).toBe('3'); + }); + + it('should accept size as a string', () => { + const { container } = render(IconAccessible, { + props: { + size: '100%', + }, + }); + + const svg = container.getElementsByTagName('svg')[0]; + + expect(svg.getAttribute('width')).toBe('100%'); + expect(svg.getAttribute('height')).toBe('100%'); + }); + + it('should update svg attributes when there are props passed to the filled version of component', () => { + const { container } = render(IconAccessibleFilled, { + props: { + size: 48, + color: 'red', + }, + }); + const svg = container.getElementsByTagName('svg')[0]; + + expect(svg.getAttribute('width')).toBe('48'); + expect(svg.getAttribute('fill')).toBe('red'); + expect(svg.getAttribute('stroke')).toBe('none'); + expect(svg.getAttribute('stroke-width')).toBe(null); + }); + + it('should render children content using snippets', () => { + const { container } = render(IconAccessible, { + props: {}, + // Test that children can be passed (even though we can't easily test snippet content in this setup) + }); + + const svg = container.getElementsByTagName('svg')[0]; + expect(svg).toBeDefined(); + }); + + it('should match snapshot', () => { + const { container } = render(IconAccessible); + expect(container.innerHTML).toMatchInlineSnapshot(` + + + + + + + + + `); + }); +}); diff --git a/packages/icons-svelte-runes/tsconfig.json b/packages/icons-svelte-runes/tsconfig.json new file mode 100644 index 000000000..3db5e978c --- /dev/null +++ b/packages/icons-svelte-runes/tsconfig.json @@ -0,0 +1,27 @@ +{ + "extends": "@tsconfig/svelte/tsconfig.json", + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "allowJs": true, + "checkJs": true, + "isolatedModules": true, + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + "strict": true, + "types": ["vitest/globals", "@testing-library/jest-dom"] + }, + "include": [ + "src/**/*.d.ts", + "src/**/*.ts", + "src/**/*.js", + "src/**/*.svelte", + "tests/**/*.ts", + "*.spec.js", + "vitest-setup.d.ts" + ], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/icons-svelte-runes/vitest-setup.d.ts b/packages/icons-svelte-runes/vitest-setup.d.ts new file mode 100644 index 000000000..cd2577820 --- /dev/null +++ b/packages/icons-svelte-runes/vitest-setup.d.ts @@ -0,0 +1,7 @@ +/// +import type { TestingLibraryMatchers } from '@testing-library/jest-dom/matchers'; + +declare module 'vitest' { + interface Assertion extends jest.Matchers, TestingLibraryMatchers {} + interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} +} diff --git a/packages/icons-svelte-runes/vitest.config.ts b/packages/icons-svelte-runes/vitest.config.ts new file mode 100644 index 000000000..c6f14b4d3 --- /dev/null +++ b/packages/icons-svelte-runes/vitest.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from 'vitest/config'; +import { svelte } from '@sveltejs/vite-plugin-svelte'; + +export default defineConfig({ + plugins: [svelte()], + test: { + globals: true, + environment: 'jsdom', + setupFiles: './setupVitest.ts', + }, + resolve: { + conditions: ['browser'], + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d947bac68..46f91f941 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -284,6 +284,49 @@ importers: specifier: ^5.1.3 version: 5.1.4(sass@1.92.1)(svelte@4.2.20)(typescript@5.9.2) + packages/icons-svelte-runes: + dependencies: + '@tabler/icons': + specifier: 3.35.0 + version: link:../icons + devDependencies: + '@sveltejs/package': + specifier: ^2.3.7 + version: 2.5.1(svelte@5.46.0)(typescript@5.9.2) + '@sveltejs/vite-plugin-svelte': + specifier: ^5.0.3 + version: 5.1.1(svelte@5.46.0)(vite@7.2.7) + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.8.0 + '@testing-library/svelte': + specifier: ^5.2.9 + version: 5.2.9(svelte@5.46.0)(vite@7.2.7)(vitest@3.2.4) + '@tsconfig/svelte': + specifier: ^5.0.4 + version: 5.0.5 + jest-serializer-html: + specifier: ^7.1.0 + version: 7.1.0 + jsdom: + specifier: ^25.0.1 + version: 25.0.1 + svelte: + specifier: ^5.0.0 + version: 5.46.0 + svelte-check: + specifier: ^4.3.4 + version: 4.3.4(svelte@5.46.0)(typescript@5.9.2) + typescript: + specifier: ^5.7.3 + version: 5.9.2 + vite: + specifier: ^7.2.7 + version: 7.2.7(sass@1.92.1) + vitest: + specifier: ^3.0.8 + version: 3.2.4(jsdom@25.0.1)(sass@1.92.1) + packages/icons-vue: dependencies: '@tabler/icons': @@ -2038,6 +2081,15 @@ packages: dev: true optional: true + /@esbuild/aix-ppc64@0.25.12: + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64@0.20.2: resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} @@ -2056,6 +2108,15 @@ packages: dev: true optional: true + /@esbuild/android-arm64@0.25.12: + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.15.18: resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} engines: {node: '>=12'} @@ -2083,6 +2144,15 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.25.12: + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.20.2: resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} @@ -2101,6 +2171,15 @@ packages: dev: true optional: true + /@esbuild/android-x64@0.25.12: + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.20.2: resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} @@ -2119,6 +2198,15 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64@0.25.12: + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.20.2: resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} @@ -2137,6 +2225,15 @@ packages: dev: true optional: true + /@esbuild/darwin-x64@0.25.12: + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.20.2: resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} @@ -2155,6 +2252,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.25.12: + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.20.2: resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} @@ -2173,6 +2279,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.25.12: + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.20.2: resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} @@ -2191,6 +2306,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.25.12: + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.20.2: resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} @@ -2209,6 +2333,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.25.12: + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.20.2: resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} @@ -2227,6 +2360,15 @@ packages: dev: true optional: true + /@esbuild/linux-ia32@0.25.12: + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.15.18: resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} engines: {node: '>=12'} @@ -2254,6 +2396,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.25.12: + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.20.2: resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} @@ -2272,6 +2423,15 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.25.12: + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.20.2: resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} @@ -2290,6 +2450,15 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.25.12: + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.20.2: resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} @@ -2308,6 +2477,15 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64@0.25.12: + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.20.2: resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} @@ -2326,6 +2504,15 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.25.12: + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.20.2: resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} @@ -2344,6 +2531,24 @@ packages: dev: true optional: true + /@esbuild/linux-x64@0.25.12: + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-arm64@0.25.12: + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.20.2: resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} @@ -2362,6 +2567,24 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.25.12: + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-arm64@0.25.12: + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.20.2: resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} @@ -2380,6 +2603,24 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.25.12: + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openharmony-arm64@0.25.12: + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.20.2: resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} @@ -2398,6 +2639,15 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.25.12: + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.20.2: resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} @@ -2416,6 +2666,15 @@ packages: dev: true optional: true + /@esbuild/win32-arm64@0.25.12: + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.20.2: resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} @@ -2434,6 +2693,15 @@ packages: dev: true optional: true + /@esbuild/win32-ia32@0.25.12: + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.20.2: resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} @@ -2452,6 +2720,15 @@ packages: dev: true optional: true + /@esbuild/win32-x64@0.25.12: + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@gar/promisify@1.1.3: resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} dev: true @@ -4324,6 +4601,14 @@ packages: solid-js: 1.9.9 dev: true + /@sveltejs/acorn-typescript@1.0.8(acorn@8.15.0): + resolution: {integrity: sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA==} + peerDependencies: + acorn: ^8.9.0 + dependencies: + acorn: 8.15.0 + dev: true + /@sveltejs/package@2.5.1(svelte@4.2.20)(typescript@5.9.2): resolution: {integrity: sha512-n0XRW7H7rD2AbdDsTD1KjXBztU96eMMuxPYwL9C+ZS8H8M1mS5NgmqFaSe8wKR40RU1KjLsqSWMnzsxRfG2j+A==} engines: {node: ^16.14 || >=18} @@ -4341,6 +4626,23 @@ packages: - typescript dev: true + /@sveltejs/package@2.5.1(svelte@5.46.0)(typescript@5.9.2): + resolution: {integrity: sha512-n0XRW7H7rD2AbdDsTD1KjXBztU96eMMuxPYwL9C+ZS8H8M1mS5NgmqFaSe8wKR40RU1KjLsqSWMnzsxRfG2j+A==} + engines: {node: ^16.14 || >=18} + hasBin: true + peerDependencies: + svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 + dependencies: + chokidar: 4.0.3 + kleur: 4.1.5 + sade: 1.8.1 + semver: 7.7.2 + svelte: 5.46.0 + svelte2tsx: 0.7.43(svelte@5.46.0)(typescript@5.9.2) + transitivePeerDependencies: + - typescript + dev: true + /@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2)(svelte@4.2.20)(vite@5.4.20): resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==} engines: {node: ^18.0.0 || >=20} @@ -4357,6 +4659,22 @@ packages: - supports-color dev: true + /@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1)(svelte@5.46.0)(vite@7.2.7): + resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^5.0.0 + svelte: ^5.0.0 + vite: ^6.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.46.0)(vite@7.2.7) + debug: 4.4.3 + svelte: 5.46.0 + vite: 7.2.7(sass@1.92.1) + transitivePeerDependencies: + - supports-color + dev: true + /@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.20): resolution: {integrity: sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==} engines: {node: ^18.0.0 || >=20} @@ -4377,6 +4695,25 @@ packages: - supports-color dev: true + /@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.0)(vite@7.2.7): + resolution: {integrity: sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + svelte: ^5.0.0 + vite: ^6.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1)(svelte@5.46.0)(vite@7.2.7) + debug: 4.4.3 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.19 + svelte: 5.46.0 + vite: 7.2.7(sass@1.92.1) + vitefu: 1.1.1(vite@7.2.7) + transitivePeerDependencies: + - supports-color + dev: true + /@szmarczak/http-timer@5.0.1: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} @@ -4474,6 +4811,25 @@ packages: svelte: 4.2.20 dev: true + /@testing-library/svelte@5.2.9(svelte@5.46.0)(vite@7.2.7)(vitest@3.2.4): + resolution: {integrity: sha512-p0Lg/vL1iEsEasXKSipvW9nBCtItQGhYvxL8OZ4w7/IDdC+LGoSJw4mMS5bndVFON/gWryitEhMr29AlO4FvBg==} + engines: {node: '>= 10'} + peerDependencies: + svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 + vite: '*' + vitest: '*' + peerDependenciesMeta: + vite: + optional: true + vitest: + optional: true + dependencies: + '@testing-library/dom': 10.4.1 + svelte: 5.46.0 + vite: 7.2.7(sass@1.92.1) + vitest: 3.2.4(jsdom@25.0.1)(sass@1.92.1) + dev: true + /@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.21)(vue@3.5.21): resolution: {integrity: sha512-ls4RiHO1ta4mxqqajWRh8158uFObVrrtAPoxk7cIp4HrnQUj/ScKzqz53HxYpG3X6Zb7H2v+0eTGLSoy8HQ2nA==} engines: {node: '>=14'} @@ -4557,6 +4913,17 @@ packages: '@babel/types': 7.28.4 dev: true + /@types/chai@5.2.3: + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + dev: true + + /@types/deep-eql@4.0.2: + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + dev: true + /@types/estree@1.0.8: resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} dev: true @@ -4702,6 +5069,39 @@ packages: chai: 4.5.0 dev: true + /@vitest/expect@3.2.4: + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 + dev: true + + /@vitest/mocker@3.2.4(vite@7.2.7): + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.19 + vite: 7.2.7(sass@1.92.1) + dev: true + + /@vitest/pretty-format@3.2.4: + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + dependencies: + tinyrainbow: 2.0.0 + dev: true + /@vitest/runner@1.6.1: resolution: {integrity: sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==} dependencies: @@ -4710,6 +5110,14 @@ packages: pathe: 1.1.2 dev: true + /@vitest/runner@3.2.4: + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + dependencies: + '@vitest/utils': 3.2.4 + pathe: 2.0.3 + strip-literal: 3.1.0 + dev: true + /@vitest/snapshot@1.6.1: resolution: {integrity: sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==} dependencies: @@ -4718,12 +5126,26 @@ packages: pretty-format: 29.7.0 dev: true + /@vitest/snapshot@3.2.4: + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + dependencies: + '@vitest/pretty-format': 3.2.4 + magic-string: 0.30.19 + pathe: 2.0.3 + dev: true + /@vitest/spy@1.6.1: resolution: {integrity: sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==} dependencies: tinyspy: 2.2.1 dev: true + /@vitest/spy@3.2.4: + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + dependencies: + tinyspy: 4.0.4 + dev: true + /@vitest/utils@1.6.1: resolution: {integrity: sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==} dependencies: @@ -4733,6 +5155,14 @@ packages: pretty-format: 29.7.0 dev: true + /@vitest/utils@3.2.4: + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + dev: true + /@volar/language-core@1.11.1: resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} dependencies: @@ -5150,6 +5580,11 @@ packages: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true + /assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + dev: true + /ast-types@0.13.4: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} @@ -5631,6 +6066,17 @@ packages: type-detect: 4.1.0 dev: true + /chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + dev: true + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -5660,6 +6106,11 @@ packages: get-func-name: 2.0.2 dev: true + /check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + dev: true + /cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} dependencies: @@ -5827,6 +6278,11 @@ packages: engines: {node: '>=0.8'} dev: true + /clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + dev: true + /code-red@1.0.4: resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} dependencies: @@ -6244,6 +6700,11 @@ packages: type-detect: 4.1.0 dev: true + /deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + dev: true + /deep-equal@2.2.3: resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} engines: {node: '>= 0.4'} @@ -6421,6 +6882,10 @@ packages: hasBin: true dev: true + /devalue@5.6.1: + resolution: {integrity: sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==} + dev: true + /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -7102,6 +7567,40 @@ packages: '@esbuild/win32-x64': 0.21.5 dev: true + /esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + dev: true + /escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -7143,12 +7642,22 @@ packages: source-map: 0.6.1 dev: true + /esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + dev: true + /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: true + /esrap@2.2.1: + resolution: {integrity: sha512-GiYWG34AN/4CUyaWAgunGt0Rxvr1PTMlGC0vvEov/uOQYWne2bpN03Um+k8jT+q3op33mKouP2zeJ6OlM+qeUg==} + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + dev: true + /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -7216,6 +7725,11 @@ packages: resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} dev: true + /expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + dev: true + /exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} dev: true @@ -7266,7 +7780,7 @@ packages: bser: 2.1.1 dev: true - /fdir@6.5.0: + /fdir@6.5.0(picomatch@4.0.3): resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -7274,6 +7788,8 @@ packages: peerDependenciesMeta: picomatch: optional: true + dependencies: + picomatch: 4.0.3 dev: true /fetch-blob@3.2.0: @@ -8898,6 +9414,42 @@ packages: - utf-8-validate dev: true + /jsdom@25.0.1: + resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + cssstyle: 4.6.0 + data-urls: 5.0.0 + decimal.js: 10.6.0 + form-data: 4.0.4 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.22 + parse5: 7.3.0 + rrweb-cssom: 0.7.1 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.18.3 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -9179,6 +9731,10 @@ packages: get-func-name: 2.0.2 dev: true + /loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + dev: true + /lower-case@1.1.4: resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} dev: true @@ -10443,7 +10999,7 @@ packages: got: 12.6.1 registry-auth-token: 5.1.0 registry-url: 6.0.1 - semver: 7.6.0 + semver: 7.7.2 dev: true /package-name-regex@2.0.6: @@ -10666,6 +11222,11 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true + /pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + dev: true + /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: @@ -11613,7 +12174,7 @@ packages: rollup: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 dependencies: commenting: 1.1.0 - fdir: 6.5.0 + fdir: 6.5.0(picomatch@4.0.3) lodash: 4.17.21 magic-string: 0.30.19 moment: 2.30.1 @@ -11849,7 +12410,7 @@ packages: resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} engines: {node: '>=12'} dependencies: - semver: 7.6.0 + semver: 7.7.2 dev: true /semver@5.7.2: @@ -12488,6 +13049,12 @@ packages: js-tokens: 9.0.1 dev: true + /strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + dependencies: + js-tokens: 9.0.1 + dev: true + /strnum@1.1.2: resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} dev: true @@ -12541,6 +13108,25 @@ packages: - sugarss dev: true + /svelte-check@4.3.4(svelte@5.46.0)(typescript@5.9.2): + resolution: {integrity: sha512-DVWvxhBrDsd+0hHWKfjP99lsSXASeOhHJYyuKOFYJcP7ThfSCKgjVarE8XfuMWpS5JV3AlDf+iK1YGGo2TACdw==} + engines: {node: '>= 18.0.0'} + hasBin: true + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: '>=5.0.0' + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + chokidar: 4.0.3 + fdir: 6.5.0(picomatch@4.0.3) + picocolors: 1.1.1 + sade: 1.8.1 + svelte: 5.46.0 + typescript: 5.9.2 + transitivePeerDependencies: + - picomatch + dev: true + /svelte-hmr@0.16.0(svelte@4.2.20): resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} @@ -12610,6 +13196,18 @@ packages: typescript: 5.9.2 dev: true + /svelte2tsx@0.7.43(svelte@5.46.0)(typescript@5.9.2): + resolution: {integrity: sha512-TtxMuk520th4ZEvUQrhbDAyyQ1I+kc5dZCA4ChOLlbVXZfqenrY45iTH27DpLyx/u4STEz8O3hkGm5goTS8JhQ==} + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 + typescript: ^4.9.4 || ^5.0.0 + dependencies: + dedent-js: 1.0.1 + pascal-case: 3.1.2 + svelte: 5.46.0 + typescript: 5.9.2 + dev: true + /svelte@4.2.20: resolution: {integrity: sha512-eeEgGc2DtiUil5ANdtd8vPwt9AgaMdnuUFnPft9F5oMvU/FHu5IHFic+p1dR/UOB7XU2mX2yHW+NcTch4DCh5Q==} engines: {node: '>=16'} @@ -12630,6 +13228,27 @@ packages: periscopic: 3.1.0 dev: true + /svelte@5.46.0: + resolution: {integrity: sha512-ZhLtvroYxUxr+HQJfMZEDRsGsmU46x12RvAv/zi9584f5KOX7bUrEbhPJ7cKFmUvZTJXi/CFZUYwDC6M1FigPw==} + engines: {node: '>=18'} + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + '@sveltejs/acorn-typescript': 1.0.8(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 + devalue: 5.6.1 + esm-env: 1.2.2 + esrap: 2.2.1 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.19 + zimmerframe: 1.1.4 + dev: true + /svg-outline-stroke@1.3.1: resolution: {integrity: sha512-nfSJw3wFJCB8lVupuhD4SZjExZS72W2CF4QDr9tHRxXlbmTUqWKU3uDMMf3EIgryC6Pl458G+Ct9jesM5NUBXQ==} engines: {node: '>=8'} @@ -12761,16 +13380,54 @@ packages: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} dev: true + /tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + dev: true + + /tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + dev: true + /tinypool@0.8.4: resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} engines: {node: '>=14.0.0'} dev: true + /tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + dev: true + + /tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + dev: true + /tinyspy@2.2.1: resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} engines: {node: '>=14.0.0'} dev: true + /tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + dev: true + + /tldts-core@6.1.86: + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} + dev: true + + /tldts@6.1.86: + resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} + hasBin: true + dependencies: + tldts-core: 6.1.86 + dev: true + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -12808,6 +13465,13 @@ packages: url-parse: 1.5.10 dev: true + /tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + dependencies: + tldts: 6.1.86 + dev: true + /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true @@ -13253,6 +13917,31 @@ packages: - terser dev: true + /vite-node@3.2.4(sass@1.92.1): + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.4.3 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 7.2.7(sass@1.92.1) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + dev: true + /vite-plugin-solid@2.11.8(@testing-library/jest-dom@6.8.0)(solid-js@1.9.9)(vite@5.4.20): resolution: {integrity: sha512-hFrCxBfv3B1BmFqnJF4JOCYpjrmi/zwyeKjcomQ0khh8HFyQ8SbuBWQ7zGojfrz6HUOBFrJBNySDi/JgAHytWg==} peerDependencies: @@ -13329,6 +14018,57 @@ packages: fsevents: 2.3.3 dev: true + /vite@7.2.7(sass@1.92.1): + resolution: {integrity: sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.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 + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.50.2 + sass: 1.92.1 + tinyglobby: 0.2.15 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /vitefu@0.2.5(vite@5.4.20): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: @@ -13351,6 +14091,17 @@ packages: vite: 5.4.20(sass@1.92.1) dev: true + /vitefu@1.1.1(vite@7.2.7): + 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 + dependencies: + vite: 7.2.7(sass@1.92.1) + dev: true + /vitest@1.6.1(jsdom@24.1.3)(sass@1.92.1): resolution: {integrity: sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==} engines: {node: ^18.0.0 || >=20.0.0} @@ -13408,6 +14159,73 @@ packages: - terser dev: true + /vitest@3.2.4(jsdom@25.0.1)(sass@1.92.1): + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@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: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@7.2.7) + '@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.3.3 + debug: 4.4.3 + expect-type: 1.3.0 + jsdom: 25.0.1 + magic-string: 0.30.19 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.9.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 7.2.7(sass@1.92.1) + vite-node: 3.2.4(sass@1.92.1) + why-is-node-running: 2.3.0 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + dev: true + /vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} dev: true @@ -13898,3 +14716,7 @@ packages: resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} engines: {node: '>=12.20'} dev: true + + /zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + dev: true